Merge "Add option to stagefright for writing decoded PCM" into jb-dev
diff --git a/media/libstagefright/NuMediaExtractor.cpp b/media/libstagefright/NuMediaExtractor.cpp
index 5f3f63f..78b2469 100644
--- a/media/libstagefright/NuMediaExtractor.cpp
+++ b/media/libstagefright/NuMediaExtractor.cpp
@@ -98,6 +98,20 @@
return ERROR_UNSUPPORTED;
}
+ sp<MetaData> fileMeta = mImpl->getMetaData();
+ const char *containerMime;
+ if (fileMeta != NULL
+ && fileMeta->findCString(kKeyMIMEType, &containerMime)
+ && !strcasecmp(containerMime, "video/wvm")) {
+ // We always want to use "cryptoPluginMode" when using the wvm
+ // extractor. We can tell that it is this extractor by looking
+ // at the container mime type.
+ // The cryptoPluginMode ensures that the extractor will actually
+ // give us data in a call to MediaSource::read(), unlike its
+ // default mode that we use from AwesomePlayer.
+ static_cast<WVMExtractor *>(mImpl.get())->setCryptoPluginMode(true);
+ }
+
mDataSource = dataSource;
updateDurationAndBitrate();
diff --git a/media/libstagefright/WVMExtractor.cpp b/media/libstagefright/WVMExtractor.cpp
index effe336..08d2ae2 100644
--- a/media/libstagefright/WVMExtractor.cpp
+++ b/media/libstagefright/WVMExtractor.cpp
@@ -127,6 +127,12 @@
}
}
+void WVMExtractor::setCryptoPluginMode(bool cryptoPluginMode) {
+ if (mImpl != NULL) {
+ mImpl->setCryptoPluginMode(cryptoPluginMode);
+ }
+}
+
void WVMExtractor::setUID(uid_t uid) {
if (mImpl != NULL) {
mImpl->setUID(uid);
diff --git a/media/libstagefright/include/WVMExtractor.h b/media/libstagefright/include/WVMExtractor.h
index 3c3ca89..2b952e2 100644
--- a/media/libstagefright/include/WVMExtractor.h
+++ b/media/libstagefright/include/WVMExtractor.h
@@ -34,6 +34,7 @@
virtual int64_t getCachedDurationUs(status_t *finalStatus) = 0;
virtual void setAdaptiveStreamingMode(bool adaptive) = 0;
+ virtual void setCryptoPluginMode(bool cryptoPluginMode) = 0;
virtual void setUID(uid_t uid) = 0;
};
@@ -61,6 +62,12 @@
// is used.
void setAdaptiveStreamingMode(bool adaptive);
+ // setCryptoPluginMode(true) to select crypto plugin mode.
+ // In this mode, the extractor returns encrypted data for use
+ // with the MediaCodec model, which handles the decryption in the
+ // codec.
+ void setCryptoPluginMode(bool cryptoPluginMode);
+
void setUID(uid_t uid);
static bool getVendorLibHandle();
diff --git a/media/libstagefright/timedtext/TimedTextPlayer.cpp b/media/libstagefright/timedtext/TimedTextPlayer.cpp
index dc5f6b8..f855d90 100644
--- a/media/libstagefright/timedtext/TimedTextPlayer.cpp
+++ b/media/libstagefright/timedtext/TimedTextPlayer.cpp
@@ -112,15 +112,14 @@
break;
}
sp<RefBase> obj;
- msg->findObject("subtitle", &obj);
- if (obj != NULL) {
+ if (msg->findObject("subtitle", &obj)) {
sp<ParcelEvent> parcelEvent;
parcelEvent = static_cast<ParcelEvent*>(obj.get());
notifyListener(&(parcelEvent->parcel));
+ doRead();
} else {
notifyListener();
}
- doRead();
break;
}
case kWhatSetSource: {