diff options
author | Harish Mahendrakar <harish.mahendrakar@ittiam.com> | 2014-05-20 09:30:59 -0700 |
---|---|---|
committer | Lajos Molnar <lajos@google.com> | 2014-06-06 15:31:35 -0700 |
commit | 3b5a6b9fa6c6825a1d0b441429e2bb365b259827 (patch) | |
tree | b278ff5feff55889024d9fd398aaeee9640e3e0c /media/libstagefright/Utils.cpp | |
parent | 26594add1ec0b6255c96b39e43ccdc95b2c480aa (diff) | |
download | frameworks_av-3b5a6b9fa6c6825a1d0b441429e2bb365b259827.zip frameworks_av-3b5a6b9fa6c6825a1d0b441429e2bb365b259827.tar.gz frameworks_av-3b5a6b9fa6c6825a1d0b441429e2bb365b259827.tar.bz2 |
stagefright: added support, and SoftOMX decoder, for HEVC
also fixed QuerySupportedProfileLevels in
SoftVideoDecoderOMXComponent.cpp
Bug: 14571712
Change-Id: Ifa3793f7c1b18ac5e8c0a096848c998cabd9e777
Diffstat (limited to 'media/libstagefright/Utils.cpp')
-rw-r--r-- | media/libstagefright/Utils.cpp | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/media/libstagefright/Utils.cpp b/media/libstagefright/Utils.cpp index 047fac7..7ff31a1 100644 --- a/media/libstagefright/Utils.cpp +++ b/media/libstagefright/Utils.cpp @@ -217,6 +217,56 @@ status_t convertMetaDataToMessage( buffer->meta()->setInt32("csd", true); buffer->meta()->setInt64("timeUs", 0); msg->setBuffer("csd-1", buffer); + } else if (meta->findData(kKeyHVCC, &type, &data, &size)) { + const uint8_t *ptr = (const uint8_t *)data; + + CHECK(size >= 7); + CHECK_EQ((unsigned)ptr[0], 1u); // configurationVersion == 1 + uint8_t profile = ptr[1] & 31; + uint8_t level = ptr[12]; + ptr += 22; + size -= 22; + + + size_t numofArrays = (char)ptr[0]; + ptr += 1; + size -= 1; + size_t j = 0, i = 0; + + sp<ABuffer> buffer = new ABuffer(1024); + buffer->setRange(0, 0); + + for (i = 0; i < numofArrays; i++) { + ptr += 1; + size -= 1; + + //Num of nals + size_t numofNals = U16_AT(ptr); + + ptr += 2; + size -= 2; + + for (j = 0; j < numofNals; j++) { + CHECK(size >= 2); + size_t length = U16_AT(ptr); + + ptr += 2; + size -= 2; + + CHECK(size >= length); + + memcpy(buffer->data() + buffer->size(), "\x00\x00\x00\x01", 4); + memcpy(buffer->data() + buffer->size() + 4, ptr, length); + buffer->setRange(0, buffer->size() + 4 + length); + + ptr += length; + size -= length; + } + } + buffer->meta()->setInt32("csd", true); + buffer->meta()->setInt64("timeUs", 0); + msg->setBuffer("csd-0", buffer); + } else if (meta->findData(kKeyESDS, &type, &data, &size)) { ESDS esds((const char *)data, size); CHECK_EQ(esds.InitCheck(), (status_t)OK); |