diff options
author | Colin Cross <ccross@android.com> | 2012-06-15 13:56:18 -0700 |
---|---|---|
committer | Keun young Park <keunyoung@google.com> | 2012-07-02 16:13:31 -0700 |
commit | faa5bdd1efff301962537a7b271bd31c78ec13dc (patch) | |
tree | f53ae4ed0c39ffa726eeb3c2145d23e747a87423 | |
parent | fb3aacec395d5917e29244fbef4b200ac8d08d07 (diff) | |
download | frameworks_av-faa5bdd1efff301962537a7b271bd31c78ec13dc.zip frameworks_av-faa5bdd1efff301962537a7b271bd31c78ec13dc.tar.gz frameworks_av-faa5bdd1efff301962537a7b271bd31c78ec13dc.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.
Bug: 6772533
Change-Id: I391e81d98beab165c3313bc8a71bb370ebb8584d
-rw-r--r-- | media/libstagefright/Android.mk | 10 | ||||
-rw-r--r-- | media/libstagefright/DataSource.cpp | 4 | ||||
-rw-r--r-- | media/libstagefright/HTTPBase.cpp | 7 | ||||
-rw-r--r-- | media/libstagefright/chromium_http/Android.mk | 17 | ||||
-rw-r--r-- | media/libstagefright/chromium_http/chromium_http_stub.cpp | 33 | ||||
-rw-r--r-- | media/libstagefright/chromium_http_stub.cpp | 81 | ||||
-rw-r--r-- | media/libstagefright/include/chromium_http_stub.h | 30 |
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 |