summaryrefslogtreecommitdiffstats
path: root/media/libstagefright
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2012-06-15 13:56:18 -0700
committerColin Cross <ccross@android.com>2012-06-15 17:08:48 -0700
commitbea455c8e4a230cc5aedc9df33e1ba97c64cec5f (patch)
treedf728643d29e66431b4d768887c55ce5bbf09e93 /media/libstagefright
parentfea3699c6921f50f404b6285d588894cee63d85f (diff)
downloadframeworks_av-bea455c8e4a230cc5aedc9df33e1ba97c64cec5f.zip
frameworks_av-bea455c8e4a230cc5aedc9df33e1ba97c64cec5f.tar.gz
frameworks_av-bea455c8e4a230cc5aedc9df33e1ba97c64cec5f.tar.bz2
libstagefright: dynamically load libstagefright_chromium_http
dlopen libstagefright_chromium_http to allow it to be on the platform side of the pdk without getting overwritten during a pdk fusion build. Change-Id: I391e81d98beab165c3313bc8a71bb370ebb8584d
Diffstat (limited to 'media/libstagefright')
-rw-r--r--media/libstagefright/Android.mk10
-rw-r--r--media/libstagefright/DataSource.cpp4
-rw-r--r--media/libstagefright/HTTPBase.cpp7
-rw-r--r--media/libstagefright/chromium_http/Android.mk17
-rw-r--r--media/libstagefright/chromium_http/chromium_http_stub.cpp33
-rw-r--r--media/libstagefright/chromium_http_stub.cpp81
-rw-r--r--media/libstagefright/include/chromium_http_stub.h30
7 files changed, 170 insertions, 12 deletions
diff --git a/media/libstagefright/Android.mk b/media/libstagefright/Android.mk
index 8ad1cb9..8a68036 100644
--- a/media/libstagefright/Android.mk
+++ b/media/libstagefright/Android.mk
@@ -97,12 +97,12 @@ LOCAL_STATIC_LIBRARIES := \
libstagefright_id3 \
libFLAC \
-ifneq ($(TARGET_BUILD_PDK), true)
-LOCAL_STATIC_LIBRARIES += \
- libstagefright_chromium_http
-LOCAL_SHARED_LIBRARIES += \
- libchromium_net
+LOCAL_SRC_FILES += \
+ chromium_http_stub.cpp
LOCAL_CPPFLAGS += -DCHROMIUM_AVAILABLE=1
+
+ifneq ($(TARGET_BUILD_PDK), true)
+LOCAL_REQUIRED_MODULES := libstagefright_chromium_http
endif
LOCAL_SHARED_LIBRARIES += libstlport
diff --git a/media/libstagefright/DataSource.cpp b/media/libstagefright/DataSource.cpp
index c75f100..1de808e 100644
--- a/media/libstagefright/DataSource.cpp
+++ b/media/libstagefright/DataSource.cpp
@@ -17,7 +17,7 @@
#include "include/AMRExtractor.h"
#if CHROMIUM_AVAILABLE
-#include "include/DataUriSource.h"
+#include "include/chromium_http_stub.h"
#endif
#include "include/MP3Extractor.h"
@@ -173,7 +173,7 @@ sp<DataSource> DataSource::CreateFromURI(
# if CHROMIUM_AVAILABLE
} else if (!strncasecmp("data:", uri, 5)) {
- source = new DataUriSource(uri);
+ source = createDataUriSource(uri);
#endif
} else {
// Assume it's a filename.
diff --git a/media/libstagefright/HTTPBase.cpp b/media/libstagefright/HTTPBase.cpp
index d7eea3f..40bfc55 100644
--- a/media/libstagefright/HTTPBase.cpp
+++ b/media/libstagefright/HTTPBase.cpp
@@ -21,7 +21,7 @@
#include "include/HTTPBase.h"
#if CHROMIUM_AVAILABLE
-#include "include/ChromiumHTTPDataSource.h"
+#include "include/chromium_http_stub.h"
#endif
#include <media/stagefright/foundation/ADebug.h>
@@ -46,7 +46,10 @@ HTTPBase::HTTPBase()
// static
sp<HTTPBase> HTTPBase::Create(uint32_t flags) {
#if CHROMIUM_AVAILABLE
- return new ChromiumHTTPDataSource(flags);
+ HTTPBase *dataSource = createChromiumHTTPDataSource(flags);
+ if (dataSource) {
+ return dataSource;
+ }
#endif
{
TRESPASS();
diff --git a/media/libstagefright/chromium_http/Android.mk b/media/libstagefright/chromium_http/Android.mk
index 6ab2a00..2c6d84c 100644
--- a/media/libstagefright/chromium_http/Android.mk
+++ b/media/libstagefright/chromium_http/Android.mk
@@ -6,7 +6,8 @@ include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
DataUriSource.cpp \
ChromiumHTTPDataSource.cpp \
- support.cpp
+ support.cpp \
+ chromium_http_stub.cpp
LOCAL_C_INCLUDES:= \
$(TOP)/frameworks/av/media/libstagefright \
@@ -16,10 +17,20 @@ LOCAL_C_INCLUDES:= \
LOCAL_CFLAGS += -Wno-multichar
-LOCAL_SHARED_LIBRARIES += libstlport
+LOCAL_SHARED_LIBRARIES += \
+ libstlport \
+ libchromium_net \
+ libutils \
+ libcutils \
+ libstagefright_foundation \
+ libstagefright \
+ libdrmframework
+
include external/stlport/libstlport.mk
LOCAL_MODULE:= libstagefright_chromium_http
-include $(BUILD_STATIC_LIBRARY)
+LOCAL_MODULE_TAGS := optional
+
+include $(BUILD_SHARED_LIBRARY)
endif
diff --git a/media/libstagefright/chromium_http/chromium_http_stub.cpp b/media/libstagefright/chromium_http/chromium_http_stub.cpp
new file mode 100644
index 0000000..560a61f
--- /dev/null
+++ b/media/libstagefright/chromium_http/chromium_http_stub.cpp
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <dlfcn.h>
+
+#include <include/chromium_http_stub.h>
+#include <include/ChromiumHTTPDataSource.h>
+#include <include/DataUriSource.h>
+
+namespace android {
+
+HTTPBase *createChromiumHTTPDataSource(uint32_t flags) {
+ return new ChromiumHTTPDataSource(flags);
+}
+
+DataSource *createDataUriSource(const char *uri) {
+ return new DataUriSource(uri);
+}
+
+}
diff --git a/media/libstagefright/chromium_http_stub.cpp b/media/libstagefright/chromium_http_stub.cpp
new file mode 100644
index 0000000..cbd8796
--- /dev/null
+++ b/media/libstagefright/chromium_http_stub.cpp
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <dlfcn.h>
+
+#include <media/stagefright/DataSource.h>
+
+#include "include/chromium_http_stub.h"
+#include "include/HTTPBase.h"
+
+namespace android {
+
+static bool gFirst = true;
+static void *gHandle;
+static Mutex gLibMutex;
+
+HTTPBase *(*gLib_createChromiumHTTPDataSource)(uint32_t flags);
+DataSource *(*gLib_createDataUriSource)(const char *uri);
+
+static bool load_libstagefright_chromium_http() {
+ Mutex::Autolock autoLock(gLibMutex);
+ void *sym;
+
+ if (!gFirst) {
+ return (gHandle != NULL);
+ }
+
+ gFirst = false;
+
+ gHandle = dlopen("libstagefright_chromium_http.so", RTLD_NOW);
+ if (gHandle == NULL) {
+ return false;
+ }
+
+ sym = dlsym(gHandle, "createChromiumHTTPDataSource");
+ if (sym == NULL) {
+ gHandle = NULL;
+ return false;
+ }
+ gLib_createChromiumHTTPDataSource = (HTTPBase *(*)(uint32_t))sym;
+
+ sym = dlsym(gHandle, "createDataUriSource");
+ if (sym == NULL) {
+ gHandle = NULL;
+ return false;
+ }
+ gLib_createDataUriSource = (DataSource *(*)(const char *))sym;
+
+ return true;
+}
+
+HTTPBase *createChromiumHTTPDataSource(uint32_t flags) {
+ if (!load_libstagefright_chromium_http()) {
+ return NULL;
+ }
+
+ return gLib_createChromiumHTTPDataSource(flags);
+}
+
+DataSource *createDataUriSource(const char *uri) {
+ if (!load_libstagefright_chromium_http()) {
+ return NULL;
+ }
+
+ return gLib_createDataUriSource(uri);
+}
+
+}
diff --git a/media/libstagefright/include/chromium_http_stub.h b/media/libstagefright/include/chromium_http_stub.h
new file mode 100644
index 0000000..869d4ac
--- /dev/null
+++ b/media/libstagefright/include/chromium_http_stub.h
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef CHROMIUM_HTTP_STUB_H_
+#define CHROMIUM_HTTP_STUB_H_
+
+#include <include/HTTPBase.h>
+#include <media/stagefright/DataSource.h>
+
+namespace android {
+extern "C" {
+HTTPBase *createChromiumHTTPDataSource(uint32_t flags);
+DataSource *createDataUriSource(const char *uri);
+}
+}
+
+#endif