diff --git a/proprietary/drmwvmplugin/Android.mk b/proprietary/drmwvmplugin/Android.mk index f9ef171c..1ee3fb37 100644 --- a/proprietary/drmwvmplugin/Android.mk +++ b/proprietary/drmwvmplugin/Android.mk @@ -30,7 +30,9 @@ LOCAL_MODULE := libdrmwvmplugin LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/drm LOCAL_STATIC_LIBRARIES := \ - libdrmframeworkcommon + libdrmframeworkcommon \ + libwvocs \ + liboemcrypto LOCAL_SHARED_LIBRARIES := \ libutils \ @@ -40,6 +42,12 @@ LOCAL_SHARED_LIBRARIES := \ libwvdrm \ libWVStreamControlAPI +ifeq ($(TARGET_DEVICE),stingray) +LOCAL_SHARED_LIBRARIES += \ + libtpa \ + libtpa_core +endif + ifeq ($(TARGET_SIMULATOR),true) LOCAL_LDLIBS += -ldl else diff --git a/proprietary/drmwvmplugin/lib/libwvdrm.so b/proprietary/drmwvmplugin/lib/libwvdrm.so index ca24df1b..a0a9ef7e 100644 Binary files a/proprietary/drmwvmplugin/lib/libwvdrm.so and b/proprietary/drmwvmplugin/lib/libwvdrm.so differ diff --git a/proprietary/drmwvmplugin/src/WVMDrmPlugin.cpp b/proprietary/drmwvmplugin/src/WVMDrmPlugin.cpp index 13d0d7e4..67bd38d2 100644 --- a/proprietary/drmwvmplugin/src/WVMDrmPlugin.cpp +++ b/proprietary/drmwvmplugin/src/WVMDrmPlugin.cpp @@ -66,7 +66,8 @@ WVMDrmPlugin::~WVMDrmPlugin() { */ status_t WVMDrmPlugin::onInitialize(int uniqueId) { //LOGD("WVMDrmPlugin::onInitialize : %d", uniqueId); - AndroidSetLogCallout(android_printbuf); + _ah006(android_printbuf); + libocs_setup(); return DRM_NO_ERROR; } diff --git a/proprietary/drmwvmplugin/test/Android.mk b/proprietary/drmwvmplugin/test/Android.mk index eac23d3e..791c4acf 100644 --- a/proprietary/drmwvmplugin/test/Android.mk +++ b/proprietary/drmwvmplugin/test/Android.mk @@ -7,6 +7,7 @@ LOCAL_SRC_FILES:= \ LOCAL_C_INCLUDES+= \ bionic \ + vendor/widevine/proprietary/include \ vendor/widevine/proprietary/drmwvmplugin/include \ vendor/widevine/proprietary/streamcontrol/include \ external/stlport/stlport \ diff --git a/proprietary/streamcontrol/include/AndroidHooks.h b/proprietary/streamcontrol/include/AndroidHooks.h index d775e1e5..3625ba23 100644 --- a/proprietary/streamcontrol/include/AndroidHooks.h +++ b/proprietary/streamcontrol/include/AndroidHooks.h @@ -1,35 +1,13 @@ -/* - * Copyright (C) 2011 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 ANDROID_HOOKS_H -#define ANDROID_HOOKS_H - -typedef void (*AndroidEcmCallout)(char* ecm, unsigned long size); - -void AndroidSetEcmCallout(AndroidEcmCallout callout); -void AndroidProcessEcm(char* ecm, unsigned long size); - -typedef int (*AndroidDecryptCallout)(char *in, char *out, int length, char *iv); - -void AndroidSetDecryptCallout(AndroidDecryptCallout callout); -int AndroidDecrypt(char *in, char *out, int length, char *iv); -bool AndroidHaveKey(); - -typedef void (*AndroidLogCallout)(const char *msg); -void AndroidSetLogCallout(AndroidLogCallout callout); -void AndroidLogDebug(const char *msg); - -#endif // ANDROID_HOOKS_H +typedef void (*_ah001)(char* , unsigned long ); +void _ah002(_ah001 ); +void _ah007(char* , unsigned long ); +typedef int (*_ah003)(char * , char * , int , char * ); +void _ah004(_ah003 ); +void _ah008(char * , char * , int , char * ); +bool _ah009(); +typedef void (*_ah005)(const char * ); +void _ah006(_ah005 ); +void AndroidLogDebug(const char * ); +typedef void (*_ah011)(int ); +void _ah010(_ah011 ); +void libocs_setup(); diff --git a/proprietary/streamcontrol/lib/Android.mk b/proprietary/streamcontrol/lib/Android.mk index 65861665..ec48d023 100644 --- a/proprietary/streamcontrol/lib/Android.mk +++ b/proprietary/streamcontrol/lib/Android.mk @@ -11,3 +11,12 @@ LOCAL_MODULE_CLASS := SHARED_LIBRARIES LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES) OVERRIDE_BUILT_MODULE_PATH := $(TARGET_OUT_INTERMEDIATE_LIBRARIES) include $(BUILD_PREBUILT) + +include $(CLEAR_VARS) +LOCAL_MODULE := libwvocs +LOCAL_SRC_FILES := \ + libwvocs.a +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE_SUFFIX := .a +LOCAL_MODULE_CLASS := STATIC_LIBRARIES +include $(BUILD_PREBUILT) diff --git a/proprietary/streamcontrol/lib/libWVStreamControlAPI.so b/proprietary/streamcontrol/lib/libWVStreamControlAPI.so index 1bc15132..a3adbbc5 100644 Binary files a/proprietary/streamcontrol/lib/libWVStreamControlAPI.so and b/proprietary/streamcontrol/lib/libWVStreamControlAPI.so differ diff --git a/proprietary/streamcontrol/lib/libwvocs.a b/proprietary/streamcontrol/lib/libwvocs.a new file mode 100644 index 00000000..58b2370c Binary files /dev/null and b/proprietary/streamcontrol/lib/libwvocs.a differ diff --git a/proprietary/streamcontrol/test/Android.mk b/proprietary/streamcontrol/test/Android.mk index a125254b..dc1d70ef 100644 --- a/proprietary/streamcontrol/test/Android.mk +++ b/proprietary/streamcontrol/test/Android.mk @@ -2,10 +2,11 @@ LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES:= \ - TestPlayer.cpp + TestPlayer.cpp LOCAL_C_INCLUDES+= \ bionic \ + vendor/widevine/proprietary/include \ external/stlport/stlport \ vendor/widevine/proprietary/streamcontrol/include \ vendor/widevine/proprietary/drmwvmplugin/include @@ -17,7 +18,8 @@ LOCAL_SHARED_LIBRARIES := \ libwvdrm \ liblog \ libutils \ - libz + libz \ + libcutils LOCAL_MODULE:=test-wvplayer diff --git a/proprietary/streamcontrol/test/TestPlayer.cpp b/proprietary/streamcontrol/test/TestPlayer.cpp index 69083a60..2d998f05 100644 --- a/proprietary/streamcontrol/test/TestPlayer.cpp +++ b/proprietary/streamcontrol/test/TestPlayer.cpp @@ -200,8 +200,7 @@ int main( int argc, char *argv[] ) bool ptsToMediaTime = false; string drmUrl = DEFAULT_DRM_URL; - // Set up callouts - AndroidSetLogCallout(PrintMessage); + _ah006(PrintMessage); // Create DRM plugin object sDrmPlugin = WVDRMPluginAPI::create(); diff --git a/proprietary/wvm/WVMExtractorImpl.cpp b/proprietary/wvm/WVMExtractorImpl.cpp index 81060336..01ebf443 100644 --- a/proprietary/wvm/WVMExtractorImpl.cpp +++ b/proprietary/wvm/WVMExtractorImpl.cpp @@ -36,16 +36,15 @@ static sp sDecryptHandle; static DrmManagerClient *sDrmManagerClient; -// Android integration callout hooks -static void HandleEcmCallout(char *ecm, unsigned long size) +static void _cb1(char *data, unsigned long size) { - DrmBuffer buf(ecm, size); + DrmBuffer buf(data, size); if (sDrmManagerClient != NULL) { sDrmManagerClient->initializeDecryptUnit(sDecryptHandle, 0, &buf); } } -static int HandleDecryptCallout(char *in, char *out, int length, char *iv) +static int _cb2(char *in, char *out, int length, char *iv) { int status = -1; @@ -71,7 +70,6 @@ static int HandleDecryptCallout(char *in, char *out, int length, char *iv) return status; } - namespace android { // DLL entry - construct an extractor and return it @@ -88,10 +86,9 @@ WVMExtractorImpl::WVMExtractorImpl(sp dataSource) { dataSource->getDrmInfo(sDecryptHandle, &sDrmManagerClient); - // Set up callouts - AndroidSetLogCallout(android_printbuf); - AndroidSetEcmCallout(HandleEcmCallout); - AndroidSetDecryptCallout(HandleDecryptCallout); + _ah006(android_printbuf); + _ah002(_cb1); + _ah004(_cb2); if (sDecryptHandle != NULL) { if (sDecryptHandle->status != RightsStatus::RIGHTS_VALID) { diff --git a/proprietary/wvm/WVMMediaSource.cpp b/proprietary/wvm/WVMMediaSource.cpp index 6f69c9ed..3b236905 100644 --- a/proprietary/wvm/WVMMediaSource.cpp +++ b/proprietary/wvm/WVMMediaSource.cpp @@ -23,11 +23,19 @@ #include "media/stagefright/MediaErrors.h" #include "media/stagefright/MediaDefs.h" #include "media/stagefright/MediaDebug.h" +#include "AndroidHooks.h" namespace android { +static void _cb(int code) +{ + WVMMediaSource::sLastError = (status_t)code; +} + extern DrmManagerClient *gDrmManagerClient; +status_t WVMMediaSource::sLastError = NO_ERROR; + WVMMediaSource::WVMMediaSource(WVSession *session, WVEsSelector esSelector, const sp &metaData) : mSession(session), @@ -38,6 +46,7 @@ WVMMediaSource::WVMMediaSource(WVSession *session, WVEsSelector esSelector, mDts(0), mPts(0) { + _ah010(_cb); } // Since the WVMExtractor lifetime is short, we delegate ownership of some resources @@ -81,6 +90,7 @@ status_t WVMMediaSource::start(MetaData *) allocBufferGroup(); mStarted = true; + mLogOnce = true; // Let video stream control play/pause if (mESSelector == WV_EsSelector_Video) { @@ -192,13 +202,21 @@ status_t WVMMediaSource::read(MediaBuffer **buffer, const ReadOptions *options) if (result != WV_Status_Warning_Need_Key && result != WV_Status_Warning_Download_Stalled) { - LOGE("WV_GetEsData returned ERROR %d in WVMMediaSource::read\n", result); + if (mLogOnce) { + LOGE("WV_GetEsData returned ERROR %d in WVMMediaSource::read\n", result); + mLogOnce = false; + } mediaBuf->release(); return ERROR_IO; - } else - LOGW("WV_GetEsData returned WARNING %d in WVMMediaSource::read\n", result); + } } + if (sLastError != NO_ERROR) { + mediaBuf->release(); + status_t status = sLastError; + sLastError = NO_ERROR; + return status; + } if (bytesRead == 0) { // Didn't get anything, sleep a bit so we don't hog the CPU then diff --git a/proprietary/wvm/include/WVMMediaSource.h b/proprietary/wvm/include/WVMMediaSource.h index 5f311b48..b016f41d 100644 --- a/proprietary/wvm/include/WVMMediaSource.h +++ b/proprietary/wvm/include/WVMMediaSource.h @@ -45,6 +45,8 @@ public: virtual status_t read(MediaBuffer **buffer, const ReadOptions *options = NULL); + static int sLastError; + protected: virtual ~WVMMediaSource(); @@ -57,6 +59,7 @@ private: sp mTrackMetaData; bool mStarted; + bool mLogOnce; MediaBufferGroup *mGroup; diff --git a/proprietary/wvm/test/Android.mk b/proprietary/wvm/test/Android.mk index 8c7ad396..dc237def 100644 --- a/proprietary/wvm/test/Android.mk +++ b/proprietary/wvm/test/Android.mk @@ -6,7 +6,7 @@ LOCAL_SRC_FILES:= \ LOCAL_C_INCLUDES+= \ bionic \ - vendor/widevine/proprietary/wvm/include \ + vendor/widevine/proprietary/include \ external/stlport/stlport \ frameworks/base/media/libstagefright diff --git a/proprietary/wvm/test/Testlibwvm.cpp b/proprietary/wvm/test/Testlibwvm.cpp index 2cd6040a..88f7d921 100644 --- a/proprietary/wvm/test/Testlibwvm.cpp +++ b/proprietary/wvm/test/Testlibwvm.cpp @@ -53,7 +53,7 @@ void TestLibWVM::Load() const char *path = "/system/lib/libwvm.so"; void *handle = dlopen(path, RTLD_NOW); if (handle == NULL) { - fprintf(stderr, "Can't open plugin: %s\n", path); + fprintf(stderr, "Can't open plugin: %s: %s\n", path, dlerror()); exit(-1); }