diff --git a/include/media/stagefright/MetaData.h b/include/media/stagefright/MetaData.h index 18fd90efbb7da..f7f2235eee089 100644 --- a/include/media/stagefright/MetaData.h +++ b/include/media/stagefright/MetaData.h @@ -48,6 +48,7 @@ enum { kKeyBitRate = 'brte', // int32_t (bps) kKeyESDS = 'esds', // raw data kKeyAVCC = 'avcc', // raw data + kKeyD263 = 'd263', // raw data kKeyVorbisInfo = 'vinf', // raw data kKeyVorbisBooks = 'vboo', // raw data kKeyWantsNALFragments = 'NALf', @@ -118,6 +119,7 @@ enum { enum { kTypeESDS = 'esds', kTypeAVCC = 'avcc', + kTypeD263 = 'd263', }; class MetaData : public RefBase { diff --git a/media/libstagefright/MPEG4Extractor.cpp b/media/libstagefright/MPEG4Extractor.cpp index 108a1d12953a1..a973d7e6447e8 100644 --- a/media/libstagefright/MPEG4Extractor.cpp +++ b/media/libstagefright/MPEG4Extractor.cpp @@ -1164,6 +1164,30 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) { break; } + case FOURCC('d', '2', '6', '3'): + { + // d263 contains fixed 7 bytes: + // vendor - 4 bytes + // version - 1 byte + // level - 1 byte + // profile - 1 byte + char buffer[7]; + if (chunk_data_size != (off64_t) sizeof(buffer)) { + LOGE("Incorrect D263 box size %lld", chunk_data_size); + return ERROR_MALFORMED; + } + + if (mDataSource->readAt( + data_offset, buffer, chunk_data_size) < chunk_data_size) { + return ERROR_IO; + } + + mLastTrack->meta->setData(kKeyD263, kTypeD263, buffer, chunk_data_size); + + *offset += chunk_size; + break; + } + case FOURCC('m', 'e', 't', 'a'): { uint8_t buffer[4];