summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2011-08-16 09:34:26 -0700
committerMarco Nelissen <marcone@google.com>2012-08-03 13:57:32 -0700
commit840667883fd09d44015716d79bc3ac4d60edc0f0 (patch)
treecb55492dbe3ca64b2ab9ba2f5a3bb6d0a0bcf650 /media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp
parent9cb20d4a41eb84bfab7f9f0d0829393f378583f4 (diff)
downloadframeworks_av-840667883fd09d44015716d79bc3ac4d60edc0f0.zip
frameworks_av-840667883fd09d44015716d79bc3ac4d60edc0f0.tar.gz
frameworks_av-840667883fd09d44015716d79bc3ac4d60edc0f0.tar.bz2
experimental support for fragmented mp4 playback in nuplayer
cherry picked from change 170999 Change-Id: I407775f0290154ad4961134839a15c9f296424c0
Diffstat (limited to 'media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp')
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp41
1 files changed, 13 insertions, 28 deletions
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp
index 0e53662..22f699e 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.cpp
@@ -20,15 +20,11 @@
#include "NuPlayerDecoder.h"
-#include "ESDS.h"
-
#include <media/stagefright/foundation/ABuffer.h>
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/AMessage.h>
#include <media/stagefright/ACodec.h>
#include <media/stagefright/MediaDefs.h>
-#include <media/stagefright/MetaData.h>
-#include <media/stagefright/Utils.h>
namespace android {
@@ -42,16 +38,24 @@ NuPlayer::Decoder::Decoder(
NuPlayer::Decoder::~Decoder() {
}
-void NuPlayer::Decoder::configure(const sp<MetaData> &meta) {
+void NuPlayer::Decoder::configure(const sp<AMessage> &format) {
CHECK(mCodec == NULL);
- const char *mime;
- CHECK(meta->findCString(kKeyMIMEType, &mime));
+ AString mime;
+ CHECK(format->findString("mime", &mime));
sp<AMessage> notifyMsg =
new AMessage(kWhatCodecNotify, id());
- sp<AMessage> format = makeFormat(meta);
+ mCSDIndex = 0;
+ for (size_t i = 0;; ++i) {
+ sp<ABuffer> csd;
+ if (!format->findBuffer(StringPrintf("csd-%d", i).c_str(), &csd)) {
+ break;
+ }
+
+ mCSD.push(csd);
+ }
if (mNativeWindow != NULL) {
format->setObject("native-window", mNativeWindow);
@@ -61,7 +65,7 @@ void NuPlayer::Decoder::configure(const sp<MetaData> &meta) {
// quickly, violating the OpenMAX specs, until that is remedied
// we need to invest in an extra looper to free the main event
// queue.
- bool needDedicatedLooper = !strncasecmp(mime, "video/", 6);
+ bool needDedicatedLooper = !strncasecmp(mime.c_str(), "video/", 6);
mCodec = new ACodec;
@@ -100,25 +104,6 @@ void NuPlayer::Decoder::onMessageReceived(const sp<AMessage> &msg) {
}
}
-sp<AMessage> NuPlayer::Decoder::makeFormat(const sp<MetaData> &meta) {
- CHECK(mCSD.isEmpty());
-
- sp<AMessage> msg;
- CHECK_EQ(convertMetaDataToMessage(meta, &msg), (status_t)OK);
-
- mCSDIndex = 0;
- for (size_t i = 0;; ++i) {
- sp<ABuffer> csd;
- if (!msg->findBuffer(StringPrintf("csd-%d", i).c_str(), &csd)) {
- break;
- }
-
- mCSD.push(csd);
- }
-
- return msg;
-}
-
void NuPlayer::Decoder::onFillThisBuffer(const sp<AMessage> &msg) {
sp<AMessage> reply;
CHECK(msg->findMessage("reply", &reply));