summaryrefslogtreecommitdiffstats
path: root/media/libstagefright
diff options
context:
space:
mode:
authorShivaprasad Hongal <shongal@codeaurora.org>2015-10-26 19:05:35 -0700
committerShivaprasad Hongal <shongal@codeaurora.org>2015-10-26 19:05:35 -0700
commitdcd760385776f0e4176cf763c8042d56af7e4503 (patch)
tree1521f07411d1a26906fad15ac826d5ce3ea7926a /media/libstagefright
parent04fdb627d164cc81c8fa2830db1b20cf1261aea4 (diff)
downloadframeworks_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.cpp7
-rw-r--r--media/libstagefright/avc_utils.cpp18
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(