summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/NuMediaExtractor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'media/libstagefright/NuMediaExtractor.cpp')
-rw-r--r--media/libstagefright/NuMediaExtractor.cpp24
1 files changed, 22 insertions, 2 deletions
diff --git a/media/libstagefright/NuMediaExtractor.cpp b/media/libstagefright/NuMediaExtractor.cpp
index 8758c93..a1d95e6 100644
--- a/media/libstagefright/NuMediaExtractor.cpp
+++ b/media/libstagefright/NuMediaExtractor.cpp
@@ -21,6 +21,7 @@
#include <media/stagefright/NuMediaExtractor.h>
#include "include/ESDS.h"
+#include "include/WVMExtractor.h"
#include <media/stagefright/foundation/ABuffer.h>
#include <media/stagefright/foundation/ADebug.h>
@@ -58,13 +59,32 @@ status_t NuMediaExtractor::setDataSource(
return -EINVAL;
}
- sp<DataSource> dataSource = DataSource::CreateFromURI(path, headers);
+ sp<DataSource> dataSource =
+ DataSource::CreateFromURI(path, headers);
if (dataSource == NULL) {
return -ENOENT;
}
- mImpl = MediaExtractor::Create(dataSource);
+ if (!strncasecmp("widevine://", path, 11)) {
+ String8 mimeType;
+ float confidence;
+ sp<AMessage> dummy;
+ bool success = SniffWVM(dataSource, &mimeType, &confidence, &dummy);
+
+ if (!success
+ || strcasecmp(
+ mimeType.string(), MEDIA_MIMETYPE_CONTAINER_WVM)) {
+ return ERROR_UNSUPPORTED;
+ }
+
+ sp<WVMExtractor> extractor = new WVMExtractor(dataSource);
+ extractor->setAdaptiveStreamingMode(true);
+
+ mImpl = extractor;
+ } else {
+ mImpl = MediaExtractor::Create(dataSource);
+ }
if (mImpl == NULL) {
return ERROR_UNSUPPORTED;