Skip to content

RDKEMW-18010: Player Interface:Feature Additions, Metrics, Test Cases, and Quality Improvements - #173

Open
dp0000 wants to merge 209 commits into
feature/dev_sprint_plifrom
develop
Open

dp0000 wants to merge 209 commits into
feature/dev_sprint_plifrom
develop

Conversation

@dp0000

@dp0000 dp0000 commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

This ticket tracks all feature development, integration, bug fixes, and quality improvements associated with the feature/dev_sprint_pli branch of the middleware-player-interface repository. Key activities include:

Addition of new player interface features and public APIs
Implementation of metrics collection for API usage
Integration and migration of new L1 test cases
Resolution of native build-related issues and other reported bugs
Coverity scan fixes and automated code quality improvements
All changes targeting this branch aim to enhance the robustness, test coverage, and maintainability of the player interface.

nrames759 and others added 12 commits June 3, 2026 14:40
Signed-off-by: nrames759 <Naren_Ramesh@comcast.com>
Signed-off-by: nrames759 <Naren_Ramesh@comcast.com>
…rash & LLAMA freeze issue

Reason for change : Addressing the above changes in middleware-player-interface
Test Steps : E2E testing to check regression .
Signed-off by: Deepikasri Natarajan
RDKEMW-18010  Middleware-player-interface feature development and inalign with dev_sprint
…_pli

Revert "RDKEMW-18010  Middleware-player-interface feature development and inalign with dev_sprint"
Copilot AI lite review requested due to automatic review settings June 11, 2026 12:26
@dp0000
dp0000 requested a review from a team as a code owner June 11, 2026 12:26
Comment thread drm/DrmSessionManager.cpp Fixed
Comment thread drm/aes/Aes.cpp Fixed
Comment thread drm/aes/Aes.cpp Fixed
Comment thread drm/aes/Aes.cpp Fixed
Comment thread externals/PlayerExternalsInterfaceBase.h Fixed
Comment thread externals/contentsecuritymanager/PlayerMemoryUtils.cpp Fixed

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR is a broad refactor/cleanup across the middleware player interface, focused on consolidating/reshaping unit tests (including DRM/OCDM coverage and CMake/coverage wiring), simplifying some vendor SoC abstraction code paths (notably video PTS handling), and removing or relocating several legacy test suites and helpers.

Changes:

  • Simplifies/adjusts SoC vendor interfaces (e.g., GetVideoPts) and related fake implementations.
  • Restructures unit tests: removes multiple legacy utest suites/runners, adds a new DrmOcdm utest suite, and updates many utest CMake/coverage/link settings.
  • Refactors/adjusts DRM and plugin code paths (GStreamer decryptors, session manager behavior) and moves MediaSample definition into DemuxDataTypes.h.

Reviewed changes

Copilot reviewed 84 out of 184 changed files in this pull request and generated 15 comments.

Show a summary per file
File Description
vendor/SocInterface.h Removes video-pts property probing helpers and updates GetVideoPts API comment.
vendor/SocInterface.cpp Simplifies GetVideoPts implementation to directly query video-pts.
vendor/realtek/RealtekSocInterface.h Removes Realtek overrides related to property discovery; updates GetVideoPts comment.
vendor/realtek/RealtekSocInterface.cpp Changes Realtek GetVideoPts implementation to direct g_object_get.
test/utests/tests/WebVttSubtecParserTests/WebVttSubtecParserPlayer.cpp Removes standalone utest runner main for this suite.
test/utests/tests/WebVttSubtecParserTests/CMakeLists.txt Removes CMake target for this suite.
test/utests/tests/WebvttSubtecDevInterfaceTests/WebvttSubtecDevInterfacePlayer.cpp Removes standalone utest runner main for this suite.
test/utests/tests/WebvttSubtecDevInterfaceTests/CMakeLists.txt Removes CMake target for this suite.
test/utests/tests/VendorTests/PlayerVendorRun.cpp Removes standalone utest runner main for this suite.
test/utests/tests/VendorTests/CMakeLists.txt Removes CMake target for vendor unit tests suite.
test/utests/tests/TtmlSubtecParser/TtmlSubtecParserPlayer.cpp Removes standalone utest runner main for this suite.
test/utests/tests/TtmlSubtecParser/CMakeLists.txt Removes CMake target for this suite.
test/utests/tests/TextStyleAttributes/CMakeLists.txt Updates include/source/link/coverage wiring for this utest target.
test/utests/tests/SubtitleTests/SubtitleRun.cpp Removes standalone utest runner main for this suite.
test/utests/tests/SubtitleTests/CMakeLists.txt Removes CMake target for this suite.
test/utests/tests/SubtecTests/PlayerSubtecTests.cpp Removes standalone utest runner main for this suite.
test/utests/tests/SubtecTests/CMakeLists.txt Removes CMake target for this suite.
test/utests/tests/PluginsTests/CMakeLists.txt Refactors plugin utest build to compile gst decryptor sources directly and adjusts linking/coverage.
test/utests/tests/PlayerUtilsTests/CMakeLists.txt Adjusts include paths (including casing changes) and keeps utest target wiring.
test/utests/tests/PlayerLogManagerTests/PlayerLogManagerRun.cpp Removes standalone utest runner main for this suite.
test/utests/tests/PlayerLogManagerTests/CMakeLists.txt Removes CMake target for this suite.
test/utests/tests/PlayerJsonObjectTests/PlayerJsonObjectRun.cpp Removes standalone utest runner main for this suite.
test/utests/tests/PlayerJsonObjectTests/CMakeLists.txt Removes CMake target for this suite.
test/utests/tests/PlayerIsoBmffTests/PlayerIsoBmffTestRunner.cpp Removes standalone utest runner main for this suite.
test/utests/tests/PlayerIsoBmffTests/CMakeLists.txt Removes CMake target for this suite.
test/utests/tests/PlayerExternalsTests/PlayerRFCFun.cpp Removes RFC externals unit tests source.
test/utests/tests/PlayerExternalsTests/PlayerMacros.h Removes custom EXPECT_NO_THROW macro header.
test/utests/tests/PlayerExternalsTests/PlayerExternalUtilsFun.cpp Removes externals utils unit tests source.
test/utests/tests/PlayerExternalsTests/PlayerExternalsRun.cpp Removes standalone utest runner main for this suite.
test/utests/tests/PlayerExternalsTests/CMakeLists.txt Removes CMake target for this suite.
test/utests/tests/PlayerCommonTests/PlayerCommonRun.cpp Removes standalone utest runner main for this suite.
test/utests/tests/PlayerCommonTests/gstPlayerTaskPoolFun.cpp Removes task-pool unit test source.
test/utests/tests/PlayerCommonTests/CMakeLists.txt Removes CMake target for this suite.
test/utests/tests/OCDMSessionAdapter/CMakeLists.txt Updates coverage wiring and target link libraries.
test/utests/tests/OcdmBasicSessionAdapterTests/FunctionalTests.cpp Fixes mock setup ordering and minor matcher/expectation issues.
test/utests/tests/OcdmBasicSessionAdapterTests/CMakeLists.txt Simplifies/normalizes include paths and updates coverage wiring.
test/utests/tests/GstPluginsTests/GstwidevinedecryptorFun.cpp Removes gst plugin L1 test source.
test/utests/tests/GstPluginsTests/GstverimatrixdecryptorFun.cpp Removes gst plugin L1 test source.
test/utests/tests/GstPluginsTests/GstPlugingRun.cpp Removes standalone utest runner main for this suite.
test/utests/tests/GstPluginsTests/GstplayreadydecryptorFun.cpp Removes gst plugin L1 test source.
test/utests/tests/GstPluginsTests/GstclearkeydecryptorFun.cpp Removes gst plugin L1 test source.
test/utests/tests/GstPluginsTests/GstcdmidecryptorFun.cpp Removes gst plugin L1 test source.
test/utests/tests/GstPluginsTests/CMakeLists.txt Removes CMake target for this suite.
test/utests/tests/GstPlugingSubtecTests/GstvipertransformFun.cpp Removes gst subtec plugin L1 test source.
test/utests/tests/GstPlugingSubtecTests/GstsubtecsinkFun.cpp Removes gst subtec plugin L1 test source.
test/utests/tests/GstPlugingSubtecTests/Gstsubtecmp4transformFun.cpp Removes gst subtec plugin L1 test source.
test/utests/tests/GstPlugingSubtecTests/GstsubtecbinFun.cpp Removes gst subtec plugin L1 test source.
test/utests/tests/GstPlugingSubtecTests/GstPlugingSubtecRun.cpp Removes standalone utest runner main for this suite.
test/utests/tests/GstPlugingSubtecTests/CMakeLists.txt Removes CMake target for this suite.
test/utests/tests/GstPlayer/PauseOnPlaybackTests.cpp Updates tests to match new ConfigurePipeline signature; adjusts frame-step property test setup.
test/utests/tests/GstPlayer/FunctionalTests.cpp Updates tests to match new ConfigurePipeline signature.
test/utests/tests/GstPlayer/CMakeLists.txt Refactors GstPlayer utest target build; updates coverage/linking and sources list.
test/utests/tests/GstHandlerControlTests/CMakeLists.txt Removes unused includes and updates coverage wiring.
test/utests/tests/FireBoltTests/FireBoltRun.cpp Removes standalone utest runner main for this suite.
test/utests/tests/FireBoltTests/CMakeLists.txt Removes CMake target for this suite.
test/utests/tests/DrmUrlTests/CMakeLists.txt Updates include roots and coverage/link wiring.
test/utests/tests/DrmTests/DrmTestsRun.cpp Removes standalone utest runner main for this suite.
test/utests/tests/DrmTests/DrmMemorySystemTests.cpp Removes DRM memory system L1 tests source.
test/utests/tests/DrmTests/CMakeLists.txt Removes CMake target for this suite.
test/utests/tests/DrmSessionManagerTests/CMakeLists.txt Updates include path casing and retains target wiring.
test/utests/tests/DrmSecureClient/CMakeLists.txt Updates include path casing and simplifies link options/coverage wiring.
test/utests/tests/DrmOcdmTests/DrmOcdmTestsRun.cpp Removes standalone utest runner main for this suite.
test/utests/tests/DrmOcdmTests/CMakeLists.txt Removes CMake target for this suite.
test/utests/tests/DrmOcdm/DrmUtilsTests.cpp Adds new DrmOcdm unit tests for URL resolution behavior.
test/utests/tests/DrmOcdm/DrmTestsRun.cpp Adds new DrmOcdm utest runner main.
test/utests/tests/DrmOcdm/DrmHLSTests.cpp Adds new DrmOcdm tests for HLS content protection parsing behavior.
test/utests/tests/DrmOcdm/CMakeLists.txt Renames/repurposes suite target to DrmOcdm; adjusts sources, defs, and linking.
test/utests/tests/DrmHelperTests/DrmHelperTestsRun.cpp Removes standalone utest runner main for this suite.
test/utests/tests/DrmHelperTests/CMakeLists.txt Removes CMake target for this suite.
test/utests/tests/ContentsecuritymanagerTests/PlayerContentSecurityRun.cpp Removes standalone utest runner main for this suite.
test/utests/tests/ContentsecuritymanagerTests/CMakeLists.txt Removes CMake target for this suite.
test/utests/tests/CMakeLists.txt Updates utests directory list: adds DrmOcdm and removes many retired suites.
test/utests/tests/ClosedCaptionsTests/PlayerCCTrackInfoTests.cpp Removes closed captions L1 test source.
test/utests/tests/ClosedCaptionsTests/PlayerCCManagerTests.cpp Removes standalone utest runner main for this suite.
test/utests/tests/ClosedCaptionsTests/CMakeLists.txt Removes CMake target for this suite.
test/utests/tests/Base64PLAYER/CMakeLists.txt Updates coverage wiring and link line normalization.
test/utests/run.sh Adjusts lcov invocation (removes --ignore-errors mismatch).
test/utests/mocks/MockPacketSender.h Removes mock packet sender header.
test/utests/mocks/MockHlsDrmSession.h Removes mock HLS DRM session header.
test/utests/mocks/MockDrmSession.h Adjusts mock DRM session API surface (constructor, methods).
test/utests/mocks/MockDrmCallbacks.h Removes mock DRM callbacks header.
test/utests/fakes/FakeSubtecConnecter.cpp Removes fake Subtec connector implementation.
test/utests/fakes/FakeSocUtils.cpp Removes isGstSubtecEnabled() fake implementation.
test/utests/fakes/FakeSocInterface.cpp Updates fake SoC interface PTS/master logic and string prefix helper behavior.
test/utests/fakes/FakeGStreamer.cpp Removes several gst get_type stubs for subtec/verimatrix helpers.
test/utests/fakes/FakeGstHandlerControl.cpp Simplifies fake waitForDone behavior.
test/utests/fakes/FakeCrypto.cpp Removes OpenSSL fake shim.
test/utests/fakes/FakeContentProtectionFireBolt.cpp Removes Firebolt content protection fake implementation.
test/utests/CMakeLists.txt Removes player_utest_add_cov() helper function.
playerLogManager/PlayerLogManager.cpp Adjusts Ethan logger formatting behavior around newline stripping.
playerisobmff/playerisobmffbuffer.h Removes multiple buffer accessors and getChunkedBox() API; keeps only getChunkedfBox().
playerisobmff/playerisobmffbuffer.cpp Removes several accessors; changes getChunkedfBox() implementation.
playerisobmff/playerisobmffbox.cpp Refactors SencIsoBmffBox::truncate() implementation.
MediaSample.h Removes standalone MediaSample transport header.
InterfacePlayerRDK.h Removes MediaSample.h include, removes live-latency flag from ConfigurePipeline, and removes GetVideoPosition().
GstHandlerControl.cpp Removes negative-delay early return/logging.
gst-plugins/drm/gst/gstwidevinedecryptor.cpp Removes AC4 caps entries from Widevine decryptor templates.
gst-plugins/drm/gst/gstverimatrixdecryptor.cpp Removes AC4 caps entries from Verimatrix decryptor templates.
gst-plugins/drm/gst/gstplayreadydecryptor.cpp Removes AC4 caps entries from PlayReady decryptor templates.
gst-plugins/drm/gst/gstclearkeydecryptor.cpp Removes AC4 caps entries from ClearKey decryptor templates.
gst-plugins/drm/gst/gstcdmidecryptor.cpp Adjusts initialization locking and sink-event resource management behavior.
externals/rdk/PlayerExternalsRdkInterface.cpp Simplifies exception handling/logging in device settings interactions.
externals/PlayerExternalsInterfaceBase.h Changes base constructor initialization list.
externals/PlayerExternalsInterface.h Removes many inline getters/setters from the fake externals interface.
externals/IFirebolt/FireboltInterface.cpp Removes explicit initialization of connection fields in FIREBOLT_ENDPOINT error path.
externals/contentsecuritymanager/SecManagerThunder.cpp Refactors license decode allocation/log/free ordering.
externals/contentsecuritymanager/PlayerMemoryUtils.cpp Changes shared memory key generation approach.
externals/contentsecuritymanager/IFirebolt/ContentProtectionFirebolt.cpp Fixes license request variable usage and refactors decode/free ordering.
externals/contentsecuritymanager/ContentSecurityManagerSession.h Refactors locking in copy ctor/assignment.
drm/ocdm/OcdmGstSessionAdapter.cpp Adjusts SEI extraction buffer mapping logic.
drm/HlsOcdmBridge.h Inlines GetState() implementation.
drm/HlsOcdmBridge.cpp Removes mutex-protected GetState() implementation from .cpp.
drm/HlsDrmSessionManager.h Removes in-class nullptr initialization of mDrmSession.
drm/helper/VerimatrixHelper.cpp Removes null guard and changes setData() argument casting style.
drm/DrmSessionManager.cpp Refactors failed-session cleanup logic and lock usage.
drm/aes/Aes.cpp Refactors logging/state access patterns and constructor init ordering.
DemuxDataTypes.h Adds MediaSample definition (vector-backed) and includes <cstring>.
CMakeLists.txt Removes global COVERAGE_ENABLED compiler/linker flag injection; removes MediaSample install entries.
baseConversion/_base64.cpp Removes input guards in base64 encode/decode.
aamp_sync_cid.txt Updates sync CID value.
.gitignore Removes sync artifacts ignore rules.
.github/workflows/L1-tests.yml Adjusts install script invocation arguments for native build step.
Comments suppressed due to low confidence (1)

gst-plugins/drm/gst/gstcdmidecryptor.cpp:779

  • sinkpad was changed from g_autoptr(GstPad) to a raw pointer, but there are multiple early break; paths in this case block (e.g., when sessionManager is NULL or gst_buffer_map fails). These paths now leak sinkpad (and potentially other resources) because gst_object_unref(sinkpad) is only reached at the end.
		GstPad * sinkpad = gst_element_get_static_pad(
				reinterpret_cast<GstElement*>(cdmidecryptor), "sink");

		if(cdmidecryptor->sessionManager == NULL)
		{

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread test/utests/tests/GstPlayer/CMakeLists.txt Outdated
Comment thread test/utests/tests/PluginsTests/CMakeLists.txt Outdated
Comment thread test/utests/tests/PluginsTests/CMakeLists.txt
Comment thread baseConversion/_base64.cpp
Comment thread baseConversion/_base64.cpp
Comment thread playerisobmff/playerisobmffbox.cpp Outdated
Comment thread externals/contentsecuritymanager/ContentSecurityManagerSession.h Outdated
Comment thread drm/ocdm/OcdmGstSessionAdapter.cpp
Comment thread gst-plugins/drm/gst/gstcdmidecryptor.cpp Outdated
Comment thread externals/PlayerExternalsInterfaceBase.h Outdated
nrames759 and others added 8 commits June 11, 2026 19:44
…/dev_sprint_pli

Revert "Revert "RDKEMW-18010  Middleware-player-interface feature development and inalign with dev_sprint""
RDKEMW-19919 : No WebVTT subtitles shown on some channels when PTS restamping enabled
Copilot AI review requested due to automatic review settings June 11, 2026 16:33
RDKEMW-19686 [Develop]Bringing RKDEMW-19683 , RDKEMW-19684, RDKEMW-19685 to middleware-player-interface

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 9 out of 9 changed files in this pull request and generated 3 comments.

Comment thread subtitle/subtitleParser.h
Comment thread subtitle/subtitleParser.h
Comment thread subtec/subtecparser/WebVttSubtecParser.cpp
Deepikasri1234 and others added 27 commits September 11, 2026 20:57
Signed-off-by: Deepikasri N <deepikasri_n@comcast.com>
Signed-off-by: Deepikasri N <deepikasri_n@comcast.com>
Signed-off-by: Deepikasri N <deepikasri_n@comcast.com>
InvalidateHandle() relied on an atomic compare_exchange to clear the
control/handle pointer, but the atomic only protects the pointer value,
not the lifetime of the object it points to. A concurrent SetTrack() /
StartRendering() / StopRendering() call could load the pointer before
the CAS and dereference it after the owner destroyed the object.

- PlayerDirectRialtoCCManager: replace std::atomic<IDirectRialtoCC*>
  with a mutex (m_controlMutex) shared by InvalidateHandle() and all
  accessors, so invalidation blocks until any in-flight call on the old
  handle completes.
- PlayerRialtoCCManager: apply the same mutex-guard fix for
  mSubtitleControlHandle.
- PlayerDirectRialtoCCManager::SetTrack(): return the actual result of
  setTextTrackIdentifier() (0/-1) instead of always returning 0, per
  the base class contract.
- Add SetTrack_ControlRejectsIdentifier_ReturnsFailure L1 test covering
  the failure path.

Testing: PlayerDirectRialtoCCManagerTests (10/10) pass.
…nCDM sessions

DrmSessionManager::getDrmSession() called setKeyId() only inside
already made unconditional. Non-OpenCDM backends (e.g. Direct-Rialto)
never received the key ID. Move the call inside the existing
drmSession != NULL check and drop the guard; setKeyId() defaults to
a no-op, so calling it unconditionally is safe for every backend.
Remove the matching stale #ifdef around the setKeyId mock in
MockDrmSession.h so it stays in sync with the base class.

PlayerDirectRialtoCCManager::Initialize() discarded the return value
of SetTrack() for both the default "CC1" track and the cached-track
re-apply path, always returning 0 even when the control rejected the
identifier. Propagate the failure as -1 in both cases so
PlayerCCManagerBase::Init() correctly reports failure.

Add Initialize_ControlRejectsDefaultTrack_ReturnsFailure and
Initialize_ControlRejectsCachedTrack_ReturnsFailure to cover the new
failure paths.
drm/DrmSessionManager.h and closedcaptions/PlayerCCManager.h added a
default argument to an existing constructor/static method
(DrmSessionManager's 4th param, SetRialto's 2nd param). Since both are
installed public headers, this silently changed the mangled symbol,
breaking binaries linked against the previous release. Restore the
old symbols by keeping a distinct overload that delegates to the new
one:
  - DrmSessionManager(int, void*, callback) delegates to
    DrmSessionManager(int, void*, callback, creator).
  - PlayerCCManager::SetRialto(bool) delegates to
    SetRialto(bool, bool).

PlayerDirectRialtoCCManager::Initialize() left m_control pointing at
the new handle even when SetTrack() failed to apply the track. A
later Initialize() retry with the same handle then saw
changedHandle == false and returned success without ever configuring
the control. Clear the control via a new clearControlOnFailure()
helper whenever SetTrack() fails during Initialize(), so a retry is
treated as a handle change and reattempts SetTrack().

mTrack/mTrackFormat were written in SetTrack() outside m_controlMutex
and read/cleared in Initialize()/ResetState() without any lock. Move
all three accesses under m_controlMutex; Initialize() takes a local
snapshot before releasing the lock to avoid recursive-lock deadlock
when it subsequently calls SetTrack().

Add Initialize_RetryAfterRejectedDefaultTrack_ReappliesTrack to cover
the retry fix.
PlayerDirectRialtoCCManager:
- Fix deadlock in ResetState(): PlayerCCManagerBase::ResetState() calls
  Stop() -> StopRendering(), which re-enters m_controlMutex. Run the
  base call before acquiring the lock instead of wrapping the whole
  function, matching the original (pre-mutex) call order.
- Update m_controlMutex's doc comment to reflect that ResetState()
  clears mTrack/mTrackFormat via the base class before taking the lock.
- Strengthen the test double: PlayerCCManagerBase::ResetState() in
  PlayerDirectRialtoCCManagerBaseStubs.cpp now calls Stop(), mirroring
  the real base class, so ResetState_ClearsControlHandle actually
  exercises the mutex re-entrancy this fix avoids instead of masking it.

DrmSessionManager:
- Revert the 3-arg constructor overload added to preserve the old
  mangled symbol. m_sessionCreator already changed this class's size,
  so a prebuilt binary compiled before that member existed would still
  link successfully against the restored 3-arg symbol, then heap-
  corrupt: operator new sizes the allocation from the caller's old
  (smaller) layout, while the constructor initializes an object sized
  for the new (larger) one. Collapsing back to a single constructor
  with creator defaulted to nullptr forces such callers to fail at
  compile time instead of silently corrupting memory at runtime.

Verified: PlayerDirectRialtoCCManagerTests (13/13), DrmSessionManagerTests
(29/29), DrmAes (33/34, 1 pre-existing skip), DrmHelperTests (160/160),
DrmOcdmTests (96/96).
- PlayerCCManager.h: move InvalidateHandle() to the end of
  PlayerCCManagerBase's virtual interface. It was previously declared
  between Release() and SetStatus(), which shifts every subsequent
  vtable slot and silently mis-dispatches calls from binaries built
  against an older header.

- PlayerCCManager.h/.cpp: split ResetState() into Stop() + a new
  ResetTrackState() helper that only resets the cached track/rendering
  fields, without acquiring any lock itself. PlayerDirectRialtoCCManager
  and PlayerRialtoCCManager's ResetState() now call Stop() unlocked
  (still required to avoid deadlocking through StopRendering()'s
  re-entrant lock), then call ResetTrackState() and clear their handle
  while holding their own control mutex, instead of invoking
  PlayerCCManagerBase::ResetState() directly - removing a race between
  ResetState() and concurrent SetTrack()/Initialize() calls on those
  fields. Updated PlayerDirectRialtoCCManagerBaseStubs.cpp with a
  matching ResetTrackState() stub.

- PlayerRialtoCCManager.cpp/.h: move mTrack/mTrackFormat writes inside
  mControlMutex in SetTrack(), and snapshot them under the same lock as
  mSubtitleControlHandle in Initialize(), removing a data race with
  concurrent SetTrack()/Initialize() calls. Mirrors the fix already
  applied to PlayerDirectRialtoCCManager. Updated the mControlMutex doc
  comment to reflect the additional state it now guards.

- PlayerDirectRialtoCCManager.cpp: only update the cached mTrack/
  mTrackFormat once setTextTrackIdentifier() confirms success. A
  rejected track previously still updated the cache, so a later
  Initialize() with the same handle would see changedHandle == false
  and skip reapplying the last-accepted track. Added
  SetTrack_ControlRejectsIdentifier_CacheKeepsPreviousTrack to cover it.

- DrmSessionManagerTestCases.cpp: add coverage for the DrmSessionCreator
  injection path in getDrmSession(), which previously had no test
  exercising it. Extend TestableDrmSessionManager with a constructor
  overload forwarding a DrmSessionCreator, and add tests verifying (a)
  the creator is invoked and its returned session's ownership is
  transferred into the selected slot, and (b) a null creator result is
  reported as MW_DRM_INIT_FAILED.
PlayerCCManager::SetRialto() had a two-argument version plus a
one-argument overload kept only to preserve a "pre-existing mangled
symbol for binaries linked against older releases." That reasoning
doesn't hold: like DrmSessionManager's DrmSessionCreator parameter,
this library is always rebuilt from source with its consumers, so
there's no stable ABI symbol to preserve. Replace the two overloads
with a single SetRialto(bool bIsRialto, bool bIsDirectRialto = false),
matching the pattern already used for DrmSessionManager. Existing
single-argument call sites continue to compile unchanged.
…sing AcquireLicenseCb

PlayerRialtoCCManager and PlayerDirectRialtoCCManager released their
control mutex between assigning the new handle and applying the cached
track via SetTrack(), letting a concurrent Initialize()/SetTrack() call
interleave and configure the wrong handle. Add a private SetTrackLocked()
in each and hold the mutex for Initialize()'s entire body so handle
assignment and configuration happen atomically. This lets
PlayerDirectRialtoCCManager drop clearControlOnFailure() in favor of an
inline reset, since the lock is now held continuously from handle
assignment through configuration.

Also set err = MW_DRM_INIT_FAILED in DrmSessionManager::createDrmSession()
when AcquireLicenseCb isn't registered, matching sibling failure paths;
previously err was left unset and callers' `if (err != -1)` check
silently swallowed the failure.
RDKEMW-23999 Direct Rialto - Add changes required for Direct Rialto integration
…y caps setting in mp4demux

Reason for change:Use codec info from the manifest rather than lazy caps setting in mp4demux
Risks: p1

Signed-off-by: varshnie <varshniblue14@gmail.com>
…y caps setting in mp4demux

Reason for change:Use codec info from the manifest rather than lazy caps setting in mp4demux without cfg
Risks: p1

Signed-off-by: varshnie <varshniblue14@gmail.com>
VPAAMP-959:[MP4DEMUX]Use codec info from the manifest rather than laz…
VPAAMP-1341: Fix MP4 demux unknown-format stream setup
Copilot AI lite review requested due to automatic review settings October 9, 2026 06:37

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Critical build, ABI, lifecycle-safety, and platform-configuration issues remain unresolved.

28 open findings

And 8 more that still need to be addressed.

2 resolved since last review

🧠 Review effort: Lite

Comment thread PlayerUtils.cpp
#include <utility>
#include <cstdio>

#include "version.h"
* @return void
*/
static void SetRialto(bool bIsRialto);
static void SetRialto(bool bIsRialto, bool bIsDirectRialto = false);
Comment thread drm/DrmSession.cpp
Comment on lines +89 to +93
mLifecycleCV.wait_for(lock, std::chrono::milliseconds(timeoutMs), [this]() { return mActiveOperations == 0; });
if (mActiveOperations > 0)
{
MW_LOG_ERR("DrmSession::PrepareForDestruction : timed out waiting for in-flight decrypt operation(s); proceeding with destruction");
}
Comment thread drm/DrmSession.h
* independent copy and need not hold any external lock.
*/
virtual const std::vector<std::vector<uint8_t>>& getUsableKeys() const;
virtual std::vector<std::vector<uint8_t>> getUsableKeys() const { return {}; }
Comment thread drm/DrmSessionManager.h

void initializeDrmSessions();

DrmSessionManager(int maxDrmSessions, void *player, std::function<void(uint32_t, uint32_t, const std::string&)> watermarkSessionUpdateCallback, DrmSessionCreator creator = nullptr);
Comment thread externals/CMakeLists.txt
Comment on lines +202 to 205
if(CMAKE_USE_SECCLIENT OR CMAKE_USE_SECMANAGER OR CMAKE_USE_FIREBOLT OR CMAKE_IARM_MGR)
find_package(FireboltAamp CONFIG REQUIRED)
target_link_libraries(playerfbinterface FireboltAamp::FireboltAamp)
endif()
Comment on lines +690 to +694
if (!cdmidecryptor->drmSession->AcquireForUse())
{
GST_ERROR_OBJECT(cdmidecryptor, "drmSession is being destroyed, aborting decrypt");
result = GST_FLOW_NOT_SUPPORTED;
goto free_resources;
Comment on lines +56 to 57
${PLAYER_ROOT}/PlayerUtils.cpp
${PLAYER_ROOT}/baseConversion/_base64.cpp)

//remove-start
const bool useFireboltInContainer = IsContainerEnvironment();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.