diff --git a/middleware/drm/DrmSessionFactory.cpp b/middleware/drm/DrmSessionFactory.cpp index b5bf0179c0..1e5c1c69d8 100644 --- a/middleware/drm/DrmSessionFactory.cpp +++ b/middleware/drm/DrmSessionFactory.cpp @@ -32,7 +32,7 @@ /** * @brief Creates an appropriate DRM session based on the given DrmHelper */ -DrmSession* DrmSessionFactory::GetDrmSession(DrmHelperPtr drmHelper, DrmCallbacks *drmCallbacks) +std::shared_ptr DrmSessionFactory::GetDrmSession(DrmHelperPtr drmHelper, DrmCallbacks *drmCallbacks) { const std::string systemId = drmHelper->ocdmSystemId(); @@ -42,23 +42,23 @@ DrmSession* DrmSessionFactory::GetDrmSession(DrmHelperPtr drmHelper, DrmCallback #if defined(USE_CLEARKEY) if (systemId == CLEAR_KEY_SYSTEM_STRING) { - return new ClearKeySession(); + return std::make_shared(); } else #endif { - return new OCDMBasicSessionAdapter(drmHelper, drmCallbacks); + return std::make_shared(drmHelper, drmCallbacks); } } else { - return new OCDMGSTSessionAdapter(drmHelper, drmCallbacks); + return std::make_shared(drmHelper, drmCallbacks); } #else // No form of OCDM support. Attempt to fallback to hardcoded session classes if (systemId == CLEAR_KEY_SYSTEM_STRING) { #if defined(USE_CLEARKEY) - return new ClearKeySession(); + return std::make_shared(); #endif // USE_CLEARKEY } #endif // Not USE_OPENCDM_ADAPTER diff --git a/middleware/drm/DrmSessionFactory.h b/middleware/drm/DrmSessionFactory.h index 483c90001a..29bbf22ffc 100644 --- a/middleware/drm/DrmSessionFactory.h +++ b/middleware/drm/DrmSessionFactory.h @@ -43,6 +43,6 @@ class DrmSessionFactory * @param[in] drmHelper - DrmHelper instance * @return Pointer to DrmSession. */ - static DrmSession* GetDrmSession(DrmHelperPtr drmHelper, DrmCallbacks *drmCallbacks); + static std::shared_ptr GetDrmSession(DrmHelperPtr drmHelper, DrmCallbacks *drmCallbacks); }; #endif diff --git a/middleware/drm/DrmSessionManager.cpp b/middleware/drm/DrmSessionManager.cpp index 61c8f404be..9c1cc87362 100755 --- a/middleware/drm/DrmSessionManager.cpp +++ b/middleware/drm/DrmSessionManager.cpp @@ -106,7 +106,8 @@ void DrmSessionManager::clearSessionData() { if (drmSessionContexts != NULL && drmSessionContexts[i].drmSession != NULL) { - MW_SAFE_DELETE(drmSessionContexts[i].drmSession); + + drmSessionContexts[i].drmSession.reset(); drmSessionContexts[i] = DrmSessionContext(); } @@ -198,7 +199,8 @@ void DrmSessionManager::clearDrmSession(bool forceClearSession) if (drmSessionContexts[i].drmSession != NULL) { MW_LOG_WARN("DrmSessionManager:: Clearing failed Session Data Slot : %d", i); - MW_SAFE_DELETE(drmSessionContexts[i].drmSession); + + drmSessionContexts[i].drmSession.reset(); } } } @@ -359,7 +361,7 @@ int DrmSessionManager::getSlotIdForSession(DrmSession* session) { for (int i = 0; i < mMaxDRMSessions; i++) { - if (drmSessionContexts[i].drmSession == session) + if (drmSessionContexts[i].drmSession.get() == session) { MW_LOG_INFO("DRM Session found at slot:%d", i); slot = i; @@ -473,7 +475,7 @@ DrmSession* DrmSessionManager::createDrmSession(int &responseCode, int &err, std mCustomData = ContentUpdateCb(drmHelper, streamType, std::move(keyId), isContentProcess); if (code == KEY_READY) { - return drmSessionContexts[selectedSlot].drmSession; + return drmSessionContexts[selectedSlot].drmSession.get(); } if ((code != KEY_INIT) || (selectedSlot == INVALID_SESSION_SLOT)) @@ -523,7 +525,7 @@ DrmSession* DrmSessionManager::createDrmSession(int &responseCode, int &err, std drmSessionContexts[selectedSlot].drmSession->setSecManagerSession(localSession); } - return drmSessionContexts[selectedSlot].drmSession; + return drmSessionContexts[selectedSlot].drmSession.get(); } /** @@ -703,7 +705,8 @@ KeyState DrmSessionManager::getDrmSession(int &err, std::shared_ptr d MW_LOG_WARN("existing DRM session for %s has different key in slot %d", drmSessionContexts[sessionSlot].drmSession->getKeySystem().c_str(), sessionSlot); } MW_LOG_WARN("deleting existing DRM session for %s ", drmSessionContexts[sessionSlot].drmSession->getKeySystem().c_str()); - MW_SAFE_DELETE(drmSessionContexts[sessionSlot].drmSession); + + drmSessionContexts[sessionSlot].drmSession.reset(); } this->ProfileUpdateCb(); diff --git a/middleware/drm/DrmSessionManager.h b/middleware/drm/DrmSessionManager.h index 0bd8a71714..e353409f26 100644 --- a/middleware/drm/DrmSessionManager.h +++ b/middleware/drm/DrmSessionManager.h @@ -50,7 +50,7 @@ struct DrmSessionContext { std::vector data; std::mutex sessionMutex; - DrmSession * drmSession; + std::shared_ptr drmSession; DrmSessionContext() : sessionMutex(), drmSession(NULL),data() {