diff options
author | Shivaprasad Hongal <shongal@codeaurora.org> | 2015-10-26 19:05:35 -0700 |
---|---|---|
committer | Shivaprasad Hongal <shongal@codeaurora.org> | 2015-10-26 19:05:35 -0700 |
commit | dcd760385776f0e4176cf763c8042d56af7e4503 (patch) | |
tree | 1521f07411d1a26906fad15ac826d5ce3ea7926a /media/libstagefright | |
parent | 04fdb627d164cc81c8fa2830db1b20cf1261aea4 (diff) | |
download | frameworks_av-dcd760385776f0e4176cf763c8042d56af7e4503.zip frameworks_av-dcd760385776f0e4176cf763c8042d56af7e4503.tar.gz frameworks_av-dcd760385776f0e4176cf763c8042d56af7e4503.tar.bz2 |
Stagefright: use set buffers mode.
Use set buffers mode if parser supports it.
Change-Id: Ia3d12f15fa28f25e1ccb724158cc91ce26fc81ed
Diffstat (limited to 'media/libstagefright')
-rw-r--r-- | media/libstagefright/MediaExtractor.cpp | 7 | ||||
-rw-r--r-- | media/libstagefright/avc_utils.cpp | 18 |
2 files changed, 18 insertions, 7 deletions
diff --git a/media/libstagefright/MediaExtractor.cpp b/media/libstagefright/MediaExtractor.cpp index 0f656a1..bfb2a16 100644 --- a/media/libstagefright/MediaExtractor.cpp +++ b/media/libstagefright/MediaExtractor.cpp @@ -54,7 +54,8 @@ uint32_t MediaExtractor::flags() const { // static sp<MediaExtractor> MediaExtractor::Create( - const sp<DataSource> &source, const char *mime) { + const sp<DataSource> &source, const char *mime, + const uint32_t flags) { sp<AMessage> meta; String8 tmp; @@ -94,7 +95,7 @@ sp<MediaExtractor> MediaExtractor::Create( } sp<MediaExtractor> ret = NULL; - if ((ret = AVFactory::get()->createExtendedExtractor(source, mime, meta)) != NULL) { + if ((ret = AVFactory::get()->createExtendedExtractor(source, mime, meta, flags)) != NULL) { } else if (!strcasecmp(mime, MEDIA_MIMETYPE_CONTAINER_MPEG4) || !strcasecmp(mime, "audio/mp4")) { ret = new MPEG4Extractor(source); @@ -124,7 +125,7 @@ sp<MediaExtractor> MediaExtractor::Create( ret = new MidiExtractor(source); } - ret = AVFactory::get()->updateExtractor(ret, source, mime, meta); + ret = AVFactory::get()->updateExtractor(ret, source, mime, meta, flags); if (ret != NULL) { if (isDrm) { ret->setDrmFlag(true); diff --git a/media/libstagefright/avc_utils.cpp b/media/libstagefright/avc_utils.cpp index 8c371ba..98b5c0e 100644 --- a/media/libstagefright/avc_utils.cpp +++ b/media/libstagefright/avc_utils.cpp @@ -25,6 +25,7 @@ #include <media/stagefright/foundation/hexdump.h> #include <media/stagefright/MediaDefs.h> #include <media/stagefright/MediaErrors.h> +#include <media/stagefright/MediaBuffer.h> #include <media/stagefright/MetaData.h> #include <utils/misc.h> @@ -443,25 +444,34 @@ bool IsIDR(const sp<ABuffer> &buffer) { } bool IsAVCReferenceFrame(const sp<ABuffer> &accessUnit) { - const uint8_t *data = accessUnit->data(); + MediaBuffer *mediaBuffer = + (MediaBuffer *)(accessUnit->getMediaBufferBase()); + const uint8_t *data = + (mediaBuffer != NULL) ? (uint8_t *) mediaBuffer->data() : accessUnit->data(); size_t size = accessUnit->size(); const uint8_t *nalStart; size_t nalSize; + bool bIsReferenceFrame = true; while (getNextNALUnit(&data, &size, &nalStart, &nalSize, true) == OK) { CHECK_GT(nalSize, 0u); unsigned nalType = nalStart[0] & 0x1f; if (nalType == 5) { - return true; + bIsReferenceFrame = true; + break; } else if (nalType == 1) { unsigned nal_ref_idc = (nalStart[0] >> 5) & 3; - return nal_ref_idc != 0; + bIsReferenceFrame = (nal_ref_idc != 0); + break; } } - return true; + if (mediaBuffer != NULL) { + mediaBuffer->release(); + } + return bIsReferenceFrame; } sp<MetaData> MakeAACCodecSpecificData( |