Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
ff6014a
RDKEMW-18059 : Notified the key status notification to player
varatharajan568 May 5, 2026
d881a95
RDKEMW-18059 : Removed the interface added to retrieve the key status
varatharajan568 May 5, 2026
aa7da6a
Update AampDRMLicManager.cpp
varatharajan568 May 5, 2026
aee6dc3
Update AampDRMLicManager.h
varatharajan568 May 5, 2026
11fd423
Removed the GetKeyStatus api from DRM
varatharajan568 May 5, 2026
1a14a3c
Update AampDRMLicManager.h
varatharajan568 May 6, 2026
0e42b88
Update Fakeopencdmsessionadapter.cpp
varatharajan568 May 6, 2026
c5f8f24
Update AampConfig.cpp
varatharajan568 May 6, 2026
75ad1cb
Update aampMocks.cpp
varatharajan568 May 6, 2026
ee95b90
Potential fix for pull request finding
varatharajan568 May 7, 2026
14d05bc
Update opencdmsessionadapter.cpp
varatharajan568 May 7, 2026
a0f2e06
Addressed review comment
varatharajan568 May 7, 2026
2a36017
Modified the player status enum name
varatharajan568 May 7, 2026
7b88cdf
Merge branch 'dev_sprint_25_2' into feature/RDKEMW-18059
varatharajan568 May 8, 2026
6bdf5e0
Update AampConfig.cpp
varatharajan568 May 8, 2026
4a1f6e1
Update opencdmsessionadapter.cpp
varatharajan568 May 8, 2026
52974bf
Merge branch 'dev_sprint_25_2' into feature/RDKEMW-18059
varatharajan568 May 11, 2026
90add06
Added an var in-order to maintain the session key status
varatharajan568 May 11, 2026
2dad9e4
Merge branch 'dev_sprint_25_2' into feature/RDKEMW-18059
varatharajan568 May 12, 2026
3afbb3f
Merge branch 'dev_sprint_25_2' into feature/RDKEMW-18059
varatharajan568 May 14, 2026
254b86e
Removed the debug logs
varatharajan568 May 14, 2026
5336a69
Merge branch 'dev_sprint_25_2' into feature/RDKEMW-18059
varatharajan568 May 15, 2026
9a0dbc4
Potential fix for pull request finding
varatharajan568 May 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions middleware/drm/DrmCallbacks.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
*/

#include <string>
#include "DrmSession.h"

/**
* @class DrmCallbacks
Expand All @@ -36,6 +37,7 @@ class DrmCallbacks
public:
virtual void Individualization(const std::string& payload) = 0;
virtual void LicenseRenewal(DrmHelperPtr drmHelper, void* userData) = 0;
virtual void NotifyKeyStatus(PlayerKeyStatus keyStatus) = 0;
virtual ~DrmCallbacks() {};
Comment thread
varatharajan568 marked this conversation as resolved.
Comment thread
varatharajan568 marked this conversation as resolved.
};

Expand Down
16 changes: 16 additions & 0 deletions middleware/drm/DrmSession.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,22 @@
#include "DrmUtils.h"
#include "ContentSecurityManagerSession.h"

/**
* @enum PlayerKeyStatus
* @brief DRM key status values, independent of OCDM.
*/
typedef enum {
Comment thread
Vinish100 marked this conversation as resolved.
PLAYER_KEY_USABLE = 0,
PLAYER_KEY_EXPIRED,
PLAYER_KEY_RELEASED,
PLAYER_KEY_OUTPUT_RESTRICTED,
PLAYER_KEY_OUTPUT_RESTRICTED_HDCP22,
PLAYER_KEY_OUTPUT_DOWNSCALED,
PLAYER_KEY_STATUS_PENDING,
PLAYER_KEY_INTERNAL_ERROR,
PLAYER_KEY_HW_ERROR
} PlayerKeyStatus;

Comment thread
varatharajan568 marked this conversation as resolved.
using namespace std;

#define PLAYREADY_KEY_SYSTEM_STRING "com.microsoft.playready"
Expand Down
57 changes: 56 additions & 1 deletion middleware/drm/ocdm/opencdmsessionadapter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
* @brief Handles operation with OCDM session to handle DRM License data
*/
#include "opencdmsessionadapter.h"

#include "DrmHelper.h"
#include "PlayerUtils.h"

Expand All @@ -44,6 +43,44 @@
#include <set>
#define LICENSE_RENEWAL_MESSAGE_TYPE "1"

/**
* @fn toPlayerKeyStatus
* @brief Convert OCDM KeyStatus to PlayerKeyStatus.
* @param ocdmStatus The KeyStatus from OCDM.
* @return The corresponding PlayerKeyStatus.
*/
static PlayerKeyStatus toPlayerKeyStatus(KeyStatus ocdmStatus) {
switch (ocdmStatus) {
case Usable: return PLAYER_KEY_USABLE;
case Expired: return PLAYER_KEY_EXPIRED;
case Released: return PLAYER_KEY_RELEASED;
case OutputRestricted: return PLAYER_KEY_OUTPUT_RESTRICTED;
case OutputRestrictedHDCP22: return PLAYER_KEY_OUTPUT_RESTRICTED_HDCP22;
case OutputDownscaled: return PLAYER_KEY_OUTPUT_DOWNSCALED;
case StatusPending: return PLAYER_KEY_STATUS_PENDING;
case HWError: return PLAYER_KEY_HW_ERROR;
case InternalError: default: return PLAYER_KEY_INTERNAL_ERROR;
}
}

/**
* @fn ShouldNotifyKeyStatus
* @brief Determine if a given KeyStatus should trigger a key status notification to the player.
* @param status The KeyStatus to evaluate.
* @return true if the status should trigger a notification, false otherwise.
*/
bool ShouldNotifyKeyStatus(KeyStatus status)
{
switch (status)
{
case OutputRestricted:
case Usable:
return true;
default:
return false;
}
}

/**
* @fn OCDMSessionAdapter
* @brief OCDMSessionAdapter constructor
Expand All @@ -61,6 +98,7 @@ OCDMSessionAdapter::OCDMSessionAdapter(DrmHelperPtr drmHelper, DrmCallbacks *cal
m_challengeReady(),
m_challengeSize(0),
m_keyStatus(InternalError),
m_sessionKeyStatus(Usable),
m_keyStateIndeterminate(false),
m_keyStatusReady(),
m_OCDMSessionCallbacks(),
Expand Down Expand Up @@ -224,7 +262,12 @@ void OCDMSessionAdapter::keyUpdateOCDM(const uint8_t key[], const uint8_t keySiz
if (m_pOpenCDMSession)
{
m_keyStatus = opencdm_session_status(m_pOpenCDMSession, key, keySize);
MW_LOG_INFO("Key status from OCDM: %d", m_keyStatus);
m_keyStateIndeterminate = false;
if (m_keyStatus != Usable)
{
m_sessionKeyStatus = m_keyStatus;
}
}
else
{
Expand All @@ -248,6 +291,17 @@ void OCDMSessionAdapter::keyUpdateOCDM(const uint8_t key[], const uint8_t keySiz
void OCDMSessionAdapter::keysUpdatedOCDM() {
MW_LOG_INFO("at %p, with %p, %p", this , m_pOpenCDMSystem, m_pOpenCDMSession);
m_keyStatusReady.signal();
const KeyStatus notifyStatus = m_sessionKeyStatus;
m_sessionKeyStatus = Usable; // reset for next burst
if (m_drmCallbacks && (ShouldNotifyKeyStatus(notifyStatus) == true))
{
MW_LOG_INFO("keysUpdatedOCDM notifying key status %d", notifyStatus);
m_drmCallbacks->NotifyKeyStatus(toPlayerKeyStatus(notifyStatus));
}
else
{
MW_LOG_INFO("Key status %d does not trigger a notification to the player", notifyStatus);
}
}


Expand Down Expand Up @@ -423,6 +477,7 @@ void OCDMSessionAdapter:: clearDecryptContext()
std::lock_guard<std::mutex> keyLock(m_usableKeysMutex);
m_usableKeys.clear();
}
m_sessionKeyStatus = Usable;

m_eKeyState = KEY_INIT;
}
Expand Down
1 change: 1 addition & 0 deletions middleware/drm/ocdm/opencdmsessionadapter.h
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ class OCDMSessionAdapter : public DrmSession

std::string m_destUrl;
KeyStatus m_keyStatus;
KeyStatus m_sessionKeyStatus; // tracks any non-Usable key status received in a callback burst
bool m_keyStateIndeterminate;
std::vector<uint8_t> m_keyStored;
std::vector<std::vector<uint8_t>> m_usableKeys; // Store usable key IDs from ocdm_update_callback
Expand Down
8 changes: 8 additions & 0 deletions priv_aamp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11462,6 +11462,14 @@ void PrivateInstanceAAMP::Individualization(const std::string& payload)
SendEvent(event,AAMP_EVENT_ASYNC_MODE);
}

/**
* @brief DRM key status notification callback
*/
void PrivateInstanceAAMP::NotifyKeyStatus(PlayerKeyStatus keyStatus)
{
AAMPLOG_WARN("NotifyKeyStatus: keyStatus=%d", static_cast<int>(keyStatus));
}
Comment on lines +11468 to +11471
Comment on lines +11465 to +11471

/**
* @brief Get current initial buffer duration in seconds
*/
Expand Down
7 changes: 7 additions & 0 deletions priv_aamp.h
Original file line number Diff line number Diff line change
Expand Up @@ -1336,6 +1336,13 @@ class PrivateInstanceAAMP : public DrmCallbacks, public std::enable_shared_from_
* @return void
*/
void LicenseRenewal(DrmHelperPtr drmHelper,void* userData) override;
/**
* @fn NotifyKeyStatus
*
* @param[in] keyStatus - Key status received from OCDM
* @return void
*/
void NotifyKeyStatus(PlayerKeyStatus keyStatus) override;
/**
* @fn CurlTerm
*
Expand Down
5 changes: 5 additions & 0 deletions test/utests/drm/mocks/aampMocks.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -545,6 +545,11 @@ void PrivateInstanceAAMP::UnlockGetPositionMilliseconds()
{
}

void PrivateInstanceAAMP::NotifyKeyStatus(PlayerKeyStatus keyStatus)
{
(void)keyStatus;
}

void PrivateInstanceAAMP::SetPreferredLanguages(const char *, const char *, const char *,
const char *, const char *, const Accessibility *,
const char *)
Expand Down
7 changes: 6 additions & 1 deletion test/utests/fakes/FakePrivateInstanceAAMP.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -688,6 +688,11 @@ void PrivateInstanceAAMP::UnlockGetPositionMilliseconds()
{
}

void PrivateInstanceAAMP::NotifyKeyStatus(PlayerKeyStatus keyStatus)
{
Comment thread
varatharajan568 marked this conversation as resolved.
(void) keyStatus;
}

void PrivateInstanceAAMP::SetPreferredLanguages(char const*, char const*, char const*, char const*, char const*, const Accessibility*, char const*)
{
}
Expand Down Expand Up @@ -1913,4 +1918,4 @@ bool PrivateInstanceAAMP::CheckForChunkEarlyAbort(CurlCallbackContext *context)

void PrivateInstanceAAMP::EnableLatencyMonitor(bool enabled)
{
}
}
Loading