Repository navigation
Conversation
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
…and inalign with dev_sprint"
…_pli Revert "RDKEMW-18010 Middleware-player-interface feature development and inalign with dev_sprint"
There was a problem hiding this comment.
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
DrmOcdmutest suite, and updates many utest CMake/coverage/link settings. - Refactors/adjusts DRM and plugin code paths (GStreamer decryptors, session manager behavior) and moves
MediaSampledefinition intoDemuxDataTypes.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
sinkpadwas changed fromg_autoptr(GstPad)to a raw pointer, but there are multiple earlybreak;paths in this case block (e.g., whensessionManageris NULL orgst_buffer_mapfails). These paths now leaksinkpad(and potentially other resources) becausegst_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.
…lopment and inalign with dev_sprint""
…/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
RDKEMW-19686 [Develop]Bringing RKDEMW-19683 , RDKEMW-19684, RDKEMW-19685 to middleware-player-interface
Reason for change : fix L1 failures
Signed-off-by: Deepikasri N <deepikasri_n@comcast.com>
Signed-off-by: Deepikasri N <deepikasri_n@comcast.com>
Reason: tag made 1.0.4
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>
… and minor cleanup
VPAAMP-959:[MP4DEMUX]Use codec info from the manifest rather than laz…
VPAAMP-1341: Fix MP4 demux unknown-format stream setup
There was a problem hiding this comment.
🟡 Changes recommended
Critical build, ABI, lifecycle-safety, and platform-configuration issues remain unresolved.
28 open findings
Test build fails because generated version.h is unavailable · New Default parameter breaks ABI for SetRialto · New Session deletion can race with active decryptor operations · New Changing virtual API signature breaks subclass compatibility · New Default creator parameter breaks constructor ABI · New Firebolt dependency incorrectly required for all IARM builds · New Raw session pointer can be freed before AcquireForUse · New Duplicate PlayerUtils.cpp entry causes linker errors · New The include path was changed to${PLAYER_ROOT}/playerjsonobject, but the repository directory is… The include path was changed to${PLAYER_ROOT}/playerjsonobject, but the actual source directory… The include path was changed to${PLAYER_ROOT}/playerjsonobject, but the repo directory is… Firebolt SDK selection ignores m_use_firebolt_sdk · New This timing assertion is very tight and can be flaky under scheduler contention (even if… HDMI hotplug handler calls SetHDMIStatus() synchronously and again via a detached worker thread.…audDatais passed by value, so pushing items into it here does not populate the caller’s vector… A destructor was added to deletem_pHlsDrmSessionManager, butgetInstance()still…gst-plugins/gst_subtec/CMakeLists.txtnow unconditionally uses*_LINK_LIBRARIES. Elsewhere in…PlayerHlsDrmSessionInterfacenow has a destructor that deletesFakeHlsDrmSessionManager, but…PlayerHlsDrmSessionInterfaceis allocated withnewingetInstance()and never deleted, so the…~PlayerHlsDrmSessionInterface()correctly deletes the fake DRM session manager, but the singleton…
And 8 more that still need to be addressed.
2 resolved since last review
🧠 Review effort: Lite
| #include <utility> | ||
| #include <cstdio> | ||
|
|
||
| #include "version.h" |
| * @return void | ||
| */ | ||
| static void SetRialto(bool bIsRialto); | ||
| static void SetRialto(bool bIsRialto, bool bIsDirectRialto = false); |
| 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"); | ||
| } |
| * 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 {}; } |
|
|
||
| void initializeDrmSessions(); | ||
|
|
||
| DrmSessionManager(int maxDrmSessions, void *player, std::function<void(uint32_t, uint32_t, const std::string&)> watermarkSessionUpdateCallback, DrmSessionCreator creator = nullptr); |
| 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() |
| if (!cdmidecryptor->drmSession->AcquireForUse()) | ||
| { | ||
| GST_ERROR_OBJECT(cdmidecryptor, "drmSession is being destroyed, aborting decrypt"); | ||
| result = GST_FLOW_NOT_SUPPORTED; | ||
| goto free_resources; |
| ${PLAYER_ROOT}/PlayerUtils.cpp | ||
| ${PLAYER_ROOT}/baseConversion/_base64.cpp) |
|
|
||
| //remove-start | ||
| const bool useFireboltInContainer = IsContainerEnvironment(); |



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.