Skip to content

Feature/xre 19922 - #83

Open
varatharajan568 wants to merge 29 commits into
mainfrom
feature/XRE-19922
Open

varatharajan568 wants to merge 29 commits into
mainfrom
feature/XRE-19922

Conversation

@varatharajan568

Copy link
Copy Markdown
Contributor

No description provided.

@varatharajan568
varatharajan568 requested a review from a team as a code owner February 23, 2026 09:59
Copilot AI review requested due to automatic review settings February 23, 2026 09:59
@github-actions

github-actions Bot commented Feb 23, 2026 •

Copy link
Copy Markdown

All contributors have signed the CLA ✍️ ✅
Posted by the CLA Assistant Lite bot.

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 appears to consolidate and modernize the middleware build/test setup while refactoring some platform-specific behavior into shared implementations (notably AC4 track selection), adding new media/demux data types, and extending DRM + externals interfaces.

Changes:

  • Move SetAC4Tracks from per-SoC implementations to a default SocInterface implementation.
  • Update unit test infrastructure (new tests, mocks/fakes expansion, coverage wiring changes, run script updates).
  • Introduce new interfaces/types and build packaging improvements (e.g., DemuxDataTypes.h, multiple pkg-config .pc.in templates, various CMake updates).

Reviewed changes

Copilot reviewed 127 out of 140 changed files in this pull request and generated 11 comments.

Show a summary per file
File Description
vendor/realtek/RealtekSocInterface.h Removes SoC-specific AC4 track API override.
vendor/realtek/RealtekSocInterface.cpp Removes SoC-specific AC4 track setter implementation.
vendor/default/DefaultSocInterface.h Removes DefaultSoC AC4 track API override.
vendor/default/DefaultSocInterface.cpp Removes DefaultSoC AC4 track setter; doc tweak.
vendor/brcm/BrcmSocInterface.h Removes BRCM AC4 stub override; whitespace tweak.
vendor/brcm/BrcmSocInterface.cpp Trailing newline change.
vendor/amlogic/AmlogicSocInterface.h Removes Amlogic AC4 override; minor whitespace cleanup.
vendor/amlogic/AmlogicSocInterface.cpp Removes Amlogic AC4 setter; whitespace cleanup.
vendor/SocInterface.h Makes SetAC4Tracks non-pure virtual (defaultable).
vendor/SocInterface.cpp Adds default SocInterface::SetAC4Tracks implementation.
test/utests/tests/base16Tests/CMakeLists.txt Coverage handling changed to CodeCoverage module usage.
test/utests/tests/TextStyleAttributes/CMakeLists.txt Coverage wiring modified (currently conditional changed).
test/utests/tests/PluginsTests/CMakeLists.txt Major CMake simplification + fake source inclusion (currently has variable issues).
test/utests/tests/PlayerUtilsTests/PlayerUtilsTests.cpp Adds gtest main for PlayerUtils test suite.
test/utests/tests/PlayerUtilsTests/CMakeLists.txt Adds new PlayerUtils test target.
test/utests/tests/PlayerExternalsRdkTests/PlayerExternalsRdkInterfaceTests.cpp Adds gtest main for externals RDK interface tests.
test/utests/tests/PlayerExternalsRdkTests/CMakeLists.txt Renames/reworks externals RDK tests target + sources and linkage.
test/utests/tests/OcdmBasicSessionAdapterTests/FunctionalTests.cpp Test robustness/ordering tweaks for OCDM basic session tests.
test/utests/tests/OcdmBasicSessionAdapterTests/CMakeLists.txt Include path + coverage wiring changes.
test/utests/tests/OCDMSessionAdapter/KeyUpdateTests.cpp Adds new unit tests for usable-key tracking in OCDM session adapter.
test/utests/tests/OCDMSessionAdapter/CMakeLists.txt Adds new key update test source + coverage wiring changes.
test/utests/tests/InterfacePlayerTests/InterfacePlayerTests.cpp Adds gtest main for InterfacePlayer tests.
test/utests/tests/InterfacePlayerTests/CMakeLists.txt New InterfacePlayer test target configuration and linkage.
test/utests/tests/GstUtilsTests/GstUtilsTests.cpp Adds AAC RAW caps test and expands format list test.
test/utests/tests/GstUtilsTests/CMakeLists.txt Coverage wiring changes.
test/utests/tests/GstPlayer/PauseOnPlaybackTests.cpp Test adjustments around frame-step property and sink naming.
test/utests/tests/GstPlayer/FunctionalTests.cpp Removes commented-out legacy configure call; minor commentary.
test/utests/tests/GstPlayer/CMakeLists.txt Simplifies dependencies and fake sources list (currently has a bad path).
test/utests/tests/GstHandlerControlTests/CMakeLists.txt Coverage wiring changes.
test/utests/tests/DrmUrlTests/CMakeLists.txt Updates include paths (middleware layout) + coverage + simulator define.
test/utests/tests/DrmSessionManagerTests/DrmSessionManagerTests.cpp Copyright year bump.
test/utests/tests/DrmSessionManagerTests/CMakeLists.txt Adds new DrmSessionManager test target.
test/utests/tests/DrmSecureClient/CMakeLists.txt Simplifies coverage + link logic.
test/utests/tests/DrmOcdm/DrmSessionFactoryTests.cpp Removes large test file.
test/utests/tests/DrmOcdm/DrmMemorySystemTests.cpp Removes large test file.
test/utests/tests/DrmOcdm/DrmHelperTests.cpp Removes additional tests (mostly verbose/console-driven).
test/utests/tests/DrmOcdm/CMakeLists.txt Reduces test list/sources; adds HLS DRM define; coverage wiring changes.
test/utests/tests/DrmAes/CMakeLists.txt Removes DrmAes test target configuration.
test/utests/tests/CMakeLists.txt Updates test subdirectory list (adds new targets, removes old).
test/utests/tests/Base64PLAYER/CMakeLists.txt Coverage wiring changes.
test/utests/tests/Base64PLAYER/Base64Tests.cpp Updates base64 decode calls to new signature with input length.
test/utests/run.sh Updates build env var naming and adds USE_DS_EVENT_SUPPORTED cmake option.
test/utests/mocks/MockSocInterface.h Adds a new SocInterface-related mock header.
test/utests/mocks/MockPlayerConfig.h Fixes header guard naming to PLAYER_* variant.
test/utests/mocks/MockPacketSender.h Removes mock packet sender header.
test/utests/mocks/MockOpenCdmSessionAdapter.h Adds methods/state to OCDM session adapter mock.
test/utests/mocks/MockHlsDrmSession.h Removes HLS DRM session mock header.
test/utests/mocks/MockGstUtils.h Extends GstUtils mock interface with buffer creation API.
test/utests/mocks/MockGStreamer.h Adds extra mocked functions and formatting tweaks.
test/utests/mocks/MockGLib.h Adds more GLib mock surface area (signals + g_object_get/set overloads).
test/utests/mocks/MockDrmSessionManager.h Replaces incorrect content with an actual mock class header.
test/utests/mocks/MockDrmSessionFactory.h Adds a DrmSessionFactory mock interface/header.
test/utests/mocks/MockDrmSession.h Updates mock DrmSession class (currently introduces a compile issue).
test/utests/mocks/MockDrmHelper.h Renames header guard and adjusts mock method qualifiers.
test/utests/fakes/Fakeopencdmsessionadapter.cpp Delegates more behavior to mock; returns global empty usable-keys vector.
test/utests/fakes/FakeSocInterface.cpp Updates fake implementations to align with moved AC4 behavior and other stubs.
test/utests/fakes/FakePlayerExternalsRdkInterface.cpp Adds a standalone fake PlayerExternalsRdkInterface implementation for tests.
test/utests/fakes/FakePacketSender.cpp Removes fake PacketSender implementation.
test/utests/fakes/FakeGstUtils.cpp Adds mock delegation for new GstUtils APIs.
test/utests/fakes/FakeGStreamer.cpp Adds mock delegation for additional gstreamer APIs.
test/utests/fakes/FakeGLib.cpp Adds mock delegation for more properties/signals/g_object_get.
test/utests/fakes/FakeDrmSessionFactory.cpp Adds fake DrmSessionFactory delegating to mock (currently symbol mismatch).
test/utests/fakes/FakeDRMSessionManager.cpp Adds fake DrmSessionManager delegating select calls to a mock.
test/utests/fakes/FakeCrypto.cpp Removes OpenSSL EVP stubs.
test/utests/fakes/FakeContentSecurityManagerSession.cpp Adds fake ContentSecurityManagerSession implementation.
test/utests/fakes/FakeContentSecurityManager.cpp Adds fake ContentSecurityManager implementation.
test/utests/fakes/FakeBase64.cpp Replaces an incorrect gtest main with a base64 stub implementation.
test/utests/fakes/CMakeLists.txt Adds externals/rdk include dir; minor formatting.
test/utests/drm/mocks/MockOpenCdm.h Renames header guard to PLAYER_* variant.
test/utests/cmake_exclude_file.list Adds a shared coverage exclude list file for utests.
test/utests/ReadMe.md Updates microtests documentation and coverage/run instructions.
test/utests/CMakeLists.txt Updates utests deps (adds OpenSSL); adjusts pkg-config modules (currently incorrect mapping).
subtec/subtecparser/TextStyleAttributes.h Introduces Doxygen tag typos (@patam).
scripts/taglib_compat.h Adds TagLib 2.x compatibility header for build integration.
scripts/install_subtec.sh Improves gdbus-codegen handling and robustness across OSes.
scripts/install_options.sh Updates default branch name.
scripts/install_gstreamer.sh Adjusts gst-plugins-good build dir logic and injects TagLib compat include.
playerLogManager/CMakeLists.txt Adds project versioning, default install prefix, and pkg-config generation/install.
playerJsonObject/PlayerJsonObject.cpp Updates base64 URL decode padding handling to call new decode signature.
playerJsonObject/CMakeLists.txt Adds project versioning, default install prefix, and pkg-config generation/install.
pkgconfig/libsubtec_connector.pc.in Adds new pkg-config template for subtec_connector.
pkgconfig/libsubtec.pc.in Adds new pkg-config template for subtec.
pkgconfig/libplayerlogmanager.pc.in Adds new pkg-config template for playerlogmanager.
pkgconfig/libplayerjsonobject.pc.in Adds new pkg-config template for playerjsonobject.
pkgconfig/libplayergstinterface.pc.in Adds new pkg-config template for playergstinterface.
pkgconfig/libplayerfbinterface.pc.in Adds new pkg-config template for playerfbinterface.
pkgconfig/libbaseconversion.pc.in Adds new pkg-config template for baseconversion.
install-middleware.sh Adds glib install step and minor cleanup.
gst-plugins/gstinit.cpp Removes version strings from plugin registration logging.
gst-plugins/gst_subtec/CMakeLists.txt Updates C++ standard and simplifies platform linking logic.
gst-plugins/CMakeLists.txt Updates gstreamer deps and flags (currently incorrect pkg-config module mapping).
externals/rdk/PlayerExternalsRdkInterface.h Adds DS event support hooks and new power/fake-tune callback API.
externals/rdk/PlayerExternalsRdkInterface.cpp Implements DS event registration/unregistration and new power/fake-tune APIs.
externals/rdk/IIarm/DeviceIARMInterface.h Formatting/cleanup.
externals/rdk/IIarm/DeviceIARMInterface.cpp Adds optional pre-init decoding + power controller integration; updates base64 decode calls.
externals/contentsecuritymanager/SecManagerThunder.cpp Fixes license header typo; updates base64 decode call signature.
externals/contentsecuritymanager/IFirebolt/ContentProtectionFirebolt.cpp Fixes license header typo; updates base64 decode call signature.
externals/contentsecuritymanager/ContentSecurityManagerSession.cpp Fixes license header typo.
externals/contentsecuritymanager/ContentSecurityManager.cpp Fixes license header typo.
externals/PlayerExternalsInterfaceBase.h Adds power/fake-tune callback API.
externals/PlayerExternalsInterface.h Implements new API stubs for fake externals; adds IsDevicePropertiesPresent().
externals/PlayerExternalsInterface.cpp Implements new power/fake-tune API forwarding and IsDevicePropertiesPresent().
externals/CMakeLists.txt Adds versioning, default install prefix, pkg-config generation; renames RFC option var.
drm/processProtectionHls.cpp Updates base64 decode call signature.
drm/ocdm/opencdmsessionadapter.h Marks getUsableKeys() as override.
drm/ocdm/opencdmsessionadapter.cpp Improves key update handling, usable key tracking, and adds new error state on session create.
drm/helper/WidevineDrmHelper.cpp Avoids logging raw input; adds debug logging of stored key IDs.
drm/DrmUtils.h Adds MW_DRM_SESSION_CREATE_FAILED error code.
drm/DrmUtils.cpp Fixes spelling in comment (“Destructor”).
drm/DrmSessionManager.h Adjusts member visibility and mutex placement; removes inline test helper.
drm/DrmSessionManager.cpp Deletes m_drmConfigParam in destructor; adds better error logging and key normalization.
drm/DrmSession.h Adds KEY_ERROR_SESSION_CREATE_FAILED state.
drm/DrmSession.cpp Fixes double semicolon.
closedcaptions/rialto/PlayerRialtoCCManager.cpp Preserves CC track format and prefixes numeric tracks for Rialto.
closedcaptions/PlayerCCManager.h Updates RestoreCC signature and stores track format.
closedcaptions/PlayerCCManager.cpp Tracks CC format and restores correct default behavior.
baseConversion/_base64.h Removes old 2-arg decode declaration (keeps length-explicit API).
baseConversion/_base64.cpp Removes old 2-arg decode wrapper implementation.
baseConversion/CMakeLists.txt Adds versioning, default install prefix, and pkg-config generation/install.
aamp_sync_cid.txt Adds sync CID marker file.
PlayerUtils.cpp Updates base64 URL decode padding handling to call new decode signature.
OSX/OSxSetup.md Updates clone instructions/branch name.
InterfacePlayerRDK.h Introduces demux sample-based SendHelper, adds stream caps setter, removes useMp4Demux.
InterfacePlayerPriv.h Adds mp4demux playback semantics flag; removes obsolete comment block.
GstUtils.h Adds AAC RAW output format and buffer creation helper declaration.
GstUtils.cpp Adds AAC RAW caps + newline in logs + implements CreateGstBufferWithData.
DemuxDataTypes.h Adds new demux/media structures (samples, codec/protection metadata) with move-only semantics.
CMakeLists.txt Adds versioning, default install prefix, installs new header, and generates multiple pkg-config files.

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

Comment thread test/utests/CMakeLists.txt
Comment thread test/utests/tests/PluginsTests/CMakeLists.txt Outdated
Comment thread test/utests/fakes/FakeDrmSessionFactory.cpp
Comment thread test/utests/tests/TextStyleAttributes/CMakeLists.txt Outdated
Comment thread subtec/subtecparser/TextStyleAttributes.h
Comment thread subtec/subtecparser/TextStyleAttributes.h
Comment thread gst-plugins/CMakeLists.txt
Comment thread test/utests/mocks/MockDrmSession.h Outdated
Comment thread test/utests/tests/GstPlayer/CMakeLists.txt Outdated
Comment thread scripts/install_gstreamer.sh
varatharajan568 and others added 24 commits February 24, 2026 14:45
Reason for Change: Changes required for DirectRialto

Test Procedure: Build and run AAMP with DirectRialto enabled

Priority: P1

Risks: Medium
Reason for Change: Fix AAMP compilation failure after rebase

Summary of Changes:
- Restore the file DrmSession.cpp
- Revert some of the changes made to DrmSession.h
- Restore fakes, CMake files and references to DrmSession.cpp

Test Procedure: Build AAMP-CLI and AAMP L1 tests

Priority: P1

Risks: Low
IsKeyIdProcessed() only held cachedKeyMutex, so it could observe a slot
another thread had just claimed (before createDrmSession() finished
acquiring the license) and report it as already succeeded. It also only
checked the per-entry isFailedKeyId flag, missing whole-slot failures
tracked in isFailedKeyEntries.

Now also takes mDrmSessionLock (same order createDrmSession() already
uses) so it blocks until any in-flight session creation for that key
has resolved, and checks isFailedKeyEntries too.

Add regression tests to DrmSessionManagerTestCases.cpp.
True when NAL units are length-prefixed (AVCC/HVCC, e.g. avcC/hvcC
sample entries per ISO/IEC 14496-15); false for Annex-B (start-code
delimited) bitstreams such as HLS-TS ES output. Meaningless for
non-NAL-unit codecs (audio/subtitle), where it stays false.
PlayerCCManagerBase::GetId()/Release() implements a usage-counter
pattern that is correct for PlayerSubtecCCManager's shared,
out-of-process connection, but was reused as-is for the Rialto and
direct-Rialto backends, where the "handle" is actually a per-pipeline
object owned by a single playback session. In multi-pipeline mode this
can leave a dangling handle in the singleton after its owning session
is destroyed, since the refcount only tracks session count, not the
validity of a specific handle.

- Add PlayerCCManagerBase::InvalidateHandle(void*), a no-op by default,
  that a handle owner can call to clear its handle from the singleton
  ahead of Release(), independent of the GetId()/Release() count.
- Add PlayerCCManager::HasInstance() so callers can check for an
  existing singleton without creating one.
- Override InvalidateHandle() in PlayerDirectRialtoCCManager and
  PlayerRialtoCCManager to clear m_control/mSubtitleControlHandle only
  when it matches the given handle.

This is a minimal mitigation (Option A); wiring InvalidateHandle() into
PlayerRialtoCCManager's GStreamer-side handle owner, and a larger
structural fix (shared preferences singleton + per-session state), are
tracked separately as follow-up work.
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…
Vinish100 and others added 4 commits October 8, 2026 22:46
VPAAMP-1341: Fix MP4 demux unknown-format stream setup
Reason for change:
EOS only fires when both audio and video have resumed data flow for a normal discontinuity — never for just one side
Test Procedure: Refere ticket
Risks: low
Priority: P1

Co-authored-by: rekha kandhavelan <rekha_kandhavelan@comcast.com>
Copilot AI balanced review requested due to automatic review settings October 27, 2026 08:32

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

Unresolved encryption-state and subtitle EOS regressions can disrupt playback, and container-caps coverage misses configured-DRM behavior.

3 open issues

Review effort: Balanced

Comment thread InterfacePlayerRDK.cpp
Comment on lines +339 to +342
StreamCodecInfo streamInfo;
streamInfo.video.mCodecFormat = static_cast<GstStreamOutputFormat>(format);
streamInfo.audio.mCodecFormat = static_cast<GstStreamOutputFormat>(audioFormat);
streamInfo.subtitle.mCodecFormat = static_cast<GstStreamOutputFormat>(subFormat);
Comment thread InterfacePlayerRDK.cpp
Comment on lines +3814 to +3817
//If we have an audio discontinuity, signal subtec as well
if ((type == eGST_MEDIATYPE_AUDIO) && (interfacePlayerPriv->gstPrivateContext->stream[eGST_MEDIATYPE_SUBTITLE].source))
{
GstPlayer_SignalEOS(interfacePlayerPriv->gstPrivateContext->stream[eGST_MEDIATYPE_SUBTITLE]);
Comment on lines +3263 to +3265
MediaCodecInfo codecInfo;
codecInfo.mCodecFormat = GST_FORMAT_ISO_BMFF;
codecInfo.mIsEncrypted = true;
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.

9 participants