diff --git a/drm/mediacas/plugins/clearkey/ClearKeyCasPlugin.cpp b/drm/mediacas/plugins/clearkey/ClearKeyCasPlugin.cpp index bf352243ca..af7c367c45 100644 --- a/drm/mediacas/plugins/clearkey/ClearKeyCasPlugin.cpp +++ b/drm/mediacas/plugins/clearkey/ClearKeyCasPlugin.cpp @@ -97,7 +97,8 @@ status_t ClearKeyDescramblerFactory::createPlugin( /////////////////////////////////////////////////////////////////////////////// ClearKeyCasPlugin::ClearKeyCasPlugin( void *appData, CasPluginCallback callback) - : mCallback(callback), mCallbackExt(NULL), mAppData(appData) { + : mCallback(callback), mCallbackExt(NULL), mStatusCallback(NULL), + mAppData(appData) { ALOGV("CTOR"); } @@ -112,6 +113,13 @@ ClearKeyCasPlugin::~ClearKeyCasPlugin() { ClearKeySessionLibrary::get()->destroyPlugin(this); } +status_t ClearKeyCasPlugin::setStatusCallback( + CasPluginStatusCallback callback) { + ALOGV("setStatusCallback"); + mStatusCallback = callback; + return OK; +} + status_t ClearKeyCasPlugin::setPrivateData(const CasData &/*data*/) { ALOGV("setPrivateData"); @@ -135,6 +143,19 @@ status_t ClearKeyCasPlugin::openSession(CasSessionId* sessionId) { return ClearKeySessionLibrary::get()->addSession(this, sessionId); } +status_t ClearKeyCasPlugin::openSession(uint32_t intent, uint32_t mode, + CasSessionId* sessionId) { + ALOGV("openSession with intent=%d, mode=%d", intent, mode); + // Echo the received information to the callback. + // Clear key plugin doesn't use any event, echo'ing for testing only. + if (mStatusCallback != NULL) { + mStatusCallback((void*)mAppData, intent, mode); + } + + // Clear key plugin doesn't use intent and mode. + return ClearKeySessionLibrary::get()->addSession(this, sessionId); +} + status_t ClearKeyCasPlugin::closeSession(const CasSessionId &sessionId) { ALOGV("closeSession: sessionId=%s", sessionIdToString(sessionId).string()); std::shared_ptr session = diff --git a/drm/mediacas/plugins/clearkey/ClearKeyCasPlugin.h b/drm/mediacas/plugins/clearkey/ClearKeyCasPlugin.h index f48d5b1d13..c6938e6812 100644 --- a/drm/mediacas/plugins/clearkey/ClearKeyCasPlugin.h +++ b/drm/mediacas/plugins/clearkey/ClearKeyCasPlugin.h @@ -71,11 +71,17 @@ public: ClearKeyCasPlugin(void *appData, CasPluginCallbackExt callback); virtual ~ClearKeyCasPlugin(); + virtual status_t setStatusCallback( + CasPluginStatusCallback callback) override; + virtual status_t setPrivateData( const CasData &data) override; virtual status_t openSession(CasSessionId *sessionId) override; + virtual status_t openSession(uint32_t intent, uint32_t mode, + CasSessionId *sessionId) override; + virtual status_t closeSession( const CasSessionId &sessionId) override; @@ -105,6 +111,7 @@ private: std::unique_ptr mKeyFetcher; CasPluginCallback mCallback; CasPluginCallbackExt mCallbackExt; + CasPluginStatusCallback mStatusCallback; void* mAppData; }; diff --git a/drm/mediacas/plugins/mock/MockCasPlugin.cpp b/drm/mediacas/plugins/mock/MockCasPlugin.cpp index 2964791413..f8bab0a0a0 100644 --- a/drm/mediacas/plugins/mock/MockCasPlugin.cpp +++ b/drm/mediacas/plugins/mock/MockCasPlugin.cpp @@ -111,6 +111,12 @@ MockCasPlugin::~MockCasPlugin() { MockSessionLibrary::get()->destroyPlugin(this); } +status_t MockCasPlugin::setStatusCallback( + CasPluginStatusCallback /*callback*/) { + ALOGV("setStatusCallback"); + return OK; +} + status_t MockCasPlugin::setPrivateData(const CasData& /*data*/) { ALOGV("setPrivateData"); return OK; @@ -121,6 +127,13 @@ status_t MockCasPlugin::openSession(CasSessionId* sessionId) { return MockSessionLibrary::get()->addSession(this, sessionId); } +status_t MockCasPlugin::openSession(uint32_t intent, uint32_t mode, + CasSessionId* sessionId) { + ALOGV("openSession with intent=%d, mode=%d", intent, mode); + // Clear key plugin doesn't use intent and mode. + return MockSessionLibrary::get()->addSession(this, sessionId); +} + status_t MockCasPlugin::closeSession(const CasSessionId &sessionId) { ALOGV("closeSession: sessionId=%s", arrayToString(sessionId).string()); Mutex::Autolock lock(mLock); diff --git a/drm/mediacas/plugins/mock/MockCasPlugin.h b/drm/mediacas/plugins/mock/MockCasPlugin.h index 74b540cc82..660fd44be9 100644 --- a/drm/mediacas/plugins/mock/MockCasPlugin.h +++ b/drm/mediacas/plugins/mock/MockCasPlugin.h @@ -65,11 +65,17 @@ public: MockCasPlugin(); virtual ~MockCasPlugin(); + virtual status_t setStatusCallback( + CasPluginStatusCallback callback) override; + virtual status_t setPrivateData( const CasData &data) override; virtual status_t openSession(CasSessionId *sessionId) override; + virtual status_t openSession(uint32_t intent, uint32_t mode, + CasSessionId *sessionId) override; + virtual status_t closeSession( const CasSessionId &sessionId) override; diff --git a/media/libstagefright/include/media/stagefright/MediaErrors.h b/media/libstagefright/include/media/stagefright/MediaErrors.h index 09639e2cef..6f48c5d45c 100644 --- a/media/libstagefright/include/media/stagefright/MediaErrors.h +++ b/media/libstagefright/include/media/stagefright/MediaErrors.h @@ -99,7 +99,13 @@ enum { ERROR_CAS_DEVICE_REVOKED = CAS_ERROR_BASE - 9, ERROR_CAS_RESOURCE_BUSY = CAS_ERROR_BASE - 10, ERROR_CAS_INSUFFICIENT_OUTPUT_PROTECTION = CAS_ERROR_BASE - 11, - ERROR_CAS_LAST_USED_ERRORCODE = CAS_ERROR_BASE - 11, + ERROR_CAS_NEED_ACTIVATION = CAS_ERROR_BASE - 12, + ERROR_CAS_NEED_PAIRING = CAS_ERROR_BASE - 13, + ERROR_CAS_NO_CARD = CAS_ERROR_BASE - 14, + ERROR_CAS_CARD_MUTE = CAS_ERROR_BASE - 15, + ERROR_CAS_CARD_INVALID = CAS_ERROR_BASE - 16, + ERROR_CAS_BLACKOUT = CAS_ERROR_BASE - 17, + ERROR_CAS_LAST_USED_ERRORCODE = CAS_ERROR_BASE - 17, ERROR_CAS_VENDOR_MAX = CAS_ERROR_BASE - 500, ERROR_CAS_VENDOR_MIN = CAS_ERROR_BASE - 999,