Loading media/libstagefright/Utils.cpp +28 −39 Original line number Diff line number Diff line Loading @@ -646,6 +646,14 @@ static std::vector<std::pair<const char *, uint32_t>> bufferMappings { } }; static std::vector<std::pair<const char *, uint32_t>> CSDMappings { { { "csd-0", kKeyOpaqueCSD0 }, { "csd-1", kKeyOpaqueCSD1 }, { "csd-2", kKeyOpaqueCSD2 }, } }; void convertMessageToMetaDataFromMappings(const sp<AMessage> &msg, sp<MetaData> &meta) { for (auto elem : stringMappings) { AString value; Loading Loading @@ -682,6 +690,14 @@ void convertMessageToMetaDataFromMappings(const sp<AMessage> &msg, sp<MetaData> MetaDataBase::Type::TYPE_NONE, value->data(), value->size()); } } for (auto elem : CSDMappings) { sp<ABuffer> value; if (msg->findBuffer(elem.first, &value)) { meta->setData(elem.second, MetaDataBase::Type::TYPE_NONE, value->data(), value->size()); } } } void convertMetaDataToMessageFromMappings(const MetaDataBase *meta, sp<AMessage> format) { Loading Loading @@ -722,6 +738,18 @@ void convertMetaDataToMessageFromMappings(const MetaDataBase *meta, sp<AMessage> format->setBuffer(elem.first, buf); } } for (auto elem : CSDMappings) { uint32_t type; const void* data; size_t size; if (meta->findData(elem.second, &type, &data, &size)) { sp<ABuffer> buf = ABuffer::CreateAsCopy(data, size); buf->meta()->setInt32("csd", true); buf->meta()->setInt64("timeUs", 0); format->setBuffer(elem.first, buf); } } } status_t convertMetaDataToMessage( Loading Loading @@ -1249,30 +1277,6 @@ status_t convertMetaDataToMessage( } else if (meta->findData(kKeyD263, &type, &data, &size)) { const uint8_t *ptr = (const uint8_t *)data; parseH263ProfileLevelFromD263(ptr, size, msg); } else if (meta->findData(kKeyVorbisInfo, &type, &data, &size)) { sp<ABuffer> buffer = new (std::nothrow) ABuffer(size); if (buffer.get() == NULL || buffer->base() == NULL) { return NO_MEMORY; } memcpy(buffer->data(), data, size); buffer->meta()->setInt32("csd", true); buffer->meta()->setInt64("timeUs", 0); msg->setBuffer("csd-0", buffer); if (!meta->findData(kKeyVorbisBooks, &type, &data, &size)) { return -EINVAL; } buffer = new (std::nothrow) ABuffer(size); if (buffer.get() == NULL || buffer->base() == NULL) { return NO_MEMORY; } memcpy(buffer->data(), data, size); buffer->meta()->setInt32("csd", true); buffer->meta()->setInt64("timeUs", 0); msg->setBuffer("csd-1", buffer); } else if (meta->findData(kKeyOpusHeader, &type, &data, &size)) { sp<ABuffer> buffer = new (std::nothrow) ABuffer(size); if (buffer.get() == NULL || buffer->base() == NULL) { Loading Loading @@ -1311,16 +1315,6 @@ status_t convertMetaDataToMessage( buffer->meta()->setInt32("csd", true); buffer->meta()->setInt64("timeUs", 0); msg->setBuffer("csd-2", buffer); } else if (meta->findData(kKeyFlacMetadata, &type, &data, &size)) { sp<ABuffer> buffer = new (std::nothrow) ABuffer(size); if (buffer.get() == NULL || buffer->base() == NULL) { return NO_MEMORY; } memcpy(buffer->data(), data, size); buffer->meta()->setInt32("csd", true); buffer->meta()->setInt64("timeUs", 0); msg->setBuffer("csd-0", buffer); } else if (meta->findData(kKeyVp9CodecPrivate, &type, &data, &size)) { sp<ABuffer> buffer = new (std::nothrow) ABuffer(size); if (buffer.get() == NULL || buffer->base() == NULL) { Loading Loading @@ -1797,11 +1791,6 @@ void convertMessageToMetaData(const sp<AMessage> &msg, sp<MetaData> &meta) { if (seekPreRollBuf) { meta->setData(kKeyOpusSeekPreRoll, 0, seekPreRollBuf, seekPreRollBufSize); } } else if (mime == MEDIA_MIMETYPE_AUDIO_VORBIS) { meta->setData(kKeyVorbisInfo, 0, csd0->data(), csd0->size()); if (msg->findBuffer("csd-1", &csd1)) { meta->setData(kKeyVorbisBooks, 0, csd1->data(), csd1->size()); } } else if (mime == MEDIA_MIMETYPE_AUDIO_ALAC) { meta->setData(kKeyAlacMagicCookie, 0, csd0->data(), csd0->size()); } Loading media/libstagefright/include/media/stagefright/MetaDataBase.h +5 −1 Original line number Diff line number Diff line Loading @@ -67,7 +67,6 @@ enum { kKeyOpusHeader = 'ohdr', // raw data kKeyOpusCodecDelay = 'ocod', // uint64_t (codec delay in ns) kKeyOpusSeekPreRoll = 'ospr', // uint64_t (seek preroll in ns) kKeyFlacMetadata = 'flMd', // raw data kKeyVp9CodecPrivate = 'vp9p', // raw data (vp9 csd information) kKeyIsSyncFrame = 'sync', // int32_t (bool) kKeyIsCodecConfig = 'conf', // int32_t (bool) Loading Loading @@ -234,6 +233,11 @@ enum { // AC-4 AudioPresentationInfo kKeyAudioPresentationInfo = 'audP', // raw data // opaque codec specific data being passed from extractor to codec kKeyOpaqueCSD0 = 'csd0', kKeyOpaqueCSD1 = 'csd1', kKeyOpaqueCSD2 = 'csd2', }; enum { Loading Loading
media/libstagefright/Utils.cpp +28 −39 Original line number Diff line number Diff line Loading @@ -646,6 +646,14 @@ static std::vector<std::pair<const char *, uint32_t>> bufferMappings { } }; static std::vector<std::pair<const char *, uint32_t>> CSDMappings { { { "csd-0", kKeyOpaqueCSD0 }, { "csd-1", kKeyOpaqueCSD1 }, { "csd-2", kKeyOpaqueCSD2 }, } }; void convertMessageToMetaDataFromMappings(const sp<AMessage> &msg, sp<MetaData> &meta) { for (auto elem : stringMappings) { AString value; Loading Loading @@ -682,6 +690,14 @@ void convertMessageToMetaDataFromMappings(const sp<AMessage> &msg, sp<MetaData> MetaDataBase::Type::TYPE_NONE, value->data(), value->size()); } } for (auto elem : CSDMappings) { sp<ABuffer> value; if (msg->findBuffer(elem.first, &value)) { meta->setData(elem.second, MetaDataBase::Type::TYPE_NONE, value->data(), value->size()); } } } void convertMetaDataToMessageFromMappings(const MetaDataBase *meta, sp<AMessage> format) { Loading Loading @@ -722,6 +738,18 @@ void convertMetaDataToMessageFromMappings(const MetaDataBase *meta, sp<AMessage> format->setBuffer(elem.first, buf); } } for (auto elem : CSDMappings) { uint32_t type; const void* data; size_t size; if (meta->findData(elem.second, &type, &data, &size)) { sp<ABuffer> buf = ABuffer::CreateAsCopy(data, size); buf->meta()->setInt32("csd", true); buf->meta()->setInt64("timeUs", 0); format->setBuffer(elem.first, buf); } } } status_t convertMetaDataToMessage( Loading Loading @@ -1249,30 +1277,6 @@ status_t convertMetaDataToMessage( } else if (meta->findData(kKeyD263, &type, &data, &size)) { const uint8_t *ptr = (const uint8_t *)data; parseH263ProfileLevelFromD263(ptr, size, msg); } else if (meta->findData(kKeyVorbisInfo, &type, &data, &size)) { sp<ABuffer> buffer = new (std::nothrow) ABuffer(size); if (buffer.get() == NULL || buffer->base() == NULL) { return NO_MEMORY; } memcpy(buffer->data(), data, size); buffer->meta()->setInt32("csd", true); buffer->meta()->setInt64("timeUs", 0); msg->setBuffer("csd-0", buffer); if (!meta->findData(kKeyVorbisBooks, &type, &data, &size)) { return -EINVAL; } buffer = new (std::nothrow) ABuffer(size); if (buffer.get() == NULL || buffer->base() == NULL) { return NO_MEMORY; } memcpy(buffer->data(), data, size); buffer->meta()->setInt32("csd", true); buffer->meta()->setInt64("timeUs", 0); msg->setBuffer("csd-1", buffer); } else if (meta->findData(kKeyOpusHeader, &type, &data, &size)) { sp<ABuffer> buffer = new (std::nothrow) ABuffer(size); if (buffer.get() == NULL || buffer->base() == NULL) { Loading Loading @@ -1311,16 +1315,6 @@ status_t convertMetaDataToMessage( buffer->meta()->setInt32("csd", true); buffer->meta()->setInt64("timeUs", 0); msg->setBuffer("csd-2", buffer); } else if (meta->findData(kKeyFlacMetadata, &type, &data, &size)) { sp<ABuffer> buffer = new (std::nothrow) ABuffer(size); if (buffer.get() == NULL || buffer->base() == NULL) { return NO_MEMORY; } memcpy(buffer->data(), data, size); buffer->meta()->setInt32("csd", true); buffer->meta()->setInt64("timeUs", 0); msg->setBuffer("csd-0", buffer); } else if (meta->findData(kKeyVp9CodecPrivate, &type, &data, &size)) { sp<ABuffer> buffer = new (std::nothrow) ABuffer(size); if (buffer.get() == NULL || buffer->base() == NULL) { Loading Loading @@ -1797,11 +1791,6 @@ void convertMessageToMetaData(const sp<AMessage> &msg, sp<MetaData> &meta) { if (seekPreRollBuf) { meta->setData(kKeyOpusSeekPreRoll, 0, seekPreRollBuf, seekPreRollBufSize); } } else if (mime == MEDIA_MIMETYPE_AUDIO_VORBIS) { meta->setData(kKeyVorbisInfo, 0, csd0->data(), csd0->size()); if (msg->findBuffer("csd-1", &csd1)) { meta->setData(kKeyVorbisBooks, 0, csd1->data(), csd1->size()); } } else if (mime == MEDIA_MIMETYPE_AUDIO_ALAC) { meta->setData(kKeyAlacMagicCookie, 0, csd0->data(), csd0->size()); } Loading
media/libstagefright/include/media/stagefright/MetaDataBase.h +5 −1 Original line number Diff line number Diff line Loading @@ -67,7 +67,6 @@ enum { kKeyOpusHeader = 'ohdr', // raw data kKeyOpusCodecDelay = 'ocod', // uint64_t (codec delay in ns) kKeyOpusSeekPreRoll = 'ospr', // uint64_t (seek preroll in ns) kKeyFlacMetadata = 'flMd', // raw data kKeyVp9CodecPrivate = 'vp9p', // raw data (vp9 csd information) kKeyIsSyncFrame = 'sync', // int32_t (bool) kKeyIsCodecConfig = 'conf', // int32_t (bool) Loading Loading @@ -234,6 +233,11 @@ enum { // AC-4 AudioPresentationInfo kKeyAudioPresentationInfo = 'audP', // raw data // opaque codec specific data being passed from extractor to codec kKeyOpaqueCSD0 = 'csd0', kKeyOpaqueCSD1 = 'csd1', kKeyOpaqueCSD2 = 'csd2', }; enum { Loading