summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/DataSource.cpp
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2012-04-13 14:54:36 -0700
committerAndreas Huber <andih@google.com>2012-04-17 11:22:11 -0700
commit1608735ef488ecd8c3c012a3b0d4b1d4ef3d93c7 (patch)
treec77756706095cdb6852e56392e8365bcaa7d9232 /media/libstagefright/DataSource.cpp
parenta98db787397633155fd71b06ecaa765a7ad20cf2 (diff)
downloadframeworks_av-1608735ef488ecd8c3c012a3b0d4b1d4ef3d93c7.zip
frameworks_av-1608735ef488ecd8c3c012a3b0d4b1d4ef3d93c7.tar.gz
frameworks_av-1608735ef488ecd8c3c012a3b0d4b1d4ef3d93c7.tar.bz2
Support widevine:// URLs in NuMediaExtractor / java MediaExtractor.
Allow anyone to talk to drm services. Change-Id: I5c2f3c419d01de30c3d6e2bc85b1fe5c9c37b392 related-to-bug: 6276111
Diffstat (limited to 'media/libstagefright/DataSource.cpp')
-rw-r--r--media/libstagefright/DataSource.cpp40
1 files changed, 29 insertions, 11 deletions
diff --git a/media/libstagefright/DataSource.cpp b/media/libstagefright/DataSource.cpp
index aba95bc..3400724 100644
--- a/media/libstagefright/DataSource.cpp
+++ b/media/libstagefright/DataSource.cpp
@@ -133,27 +133,45 @@ void DataSource::RegisterDefaultSniffers() {
// static
sp<DataSource> DataSource::CreateFromURI(
const char *uri, const KeyedVector<String8, String8> *headers) {
+ bool isWidevine = !strncasecmp("widevine://", uri, 11);
+
sp<DataSource> source;
if (!strncasecmp("file://", uri, 7)) {
source = new FileSource(uri + 7);
} else if (!strncasecmp("http://", uri, 7)
- || !strncasecmp("https://", uri, 8)) {
+ || !strncasecmp("https://", uri, 8)
+ || isWidevine) {
sp<HTTPBase> httpSource = HTTPBase::Create();
+
+ String8 tmp;
+ if (isWidevine) {
+ tmp = String8("http://");
+ tmp.append(uri + 11);
+
+ uri = tmp.string();
+ }
+
if (httpSource->connect(uri, headers) != OK) {
return NULL;
}
- String8 cacheConfig;
- bool disconnectAtHighwatermark;
- if (headers != NULL) {
- KeyedVector<String8, String8> copy = *headers;
- NuCachedSource2::RemoveCacheSpecificHeaders(
- &copy, &cacheConfig, &disconnectAtHighwatermark);
- }
+ if (!isWidevine) {
+ String8 cacheConfig;
+ bool disconnectAtHighwatermark;
+ if (headers != NULL) {
+ KeyedVector<String8, String8> copy = *headers;
+ NuCachedSource2::RemoveCacheSpecificHeaders(
+ &copy, &cacheConfig, &disconnectAtHighwatermark);
+ }
- source = new NuCachedSource2(
- httpSource,
- cacheConfig.isEmpty() ? NULL : cacheConfig.string());
+ source = new NuCachedSource2(
+ httpSource,
+ cacheConfig.isEmpty() ? NULL : cacheConfig.string());
+ } else {
+ // We do not want that prefetching, caching, datasource wrapper
+ // in the widevine:// case.
+ source = httpSource;
+ }
# if CHROMIUM_AVAILABLE
} else if (!strncasecmp("data:", uri, 5)) {