Skip to content

RDKEMW-21174 [Develop] - Revert RDKEMW-16484 ticket due to regression issue#189

Open
rekhap2kandhavelan wants to merge 8 commits into
mainfrom
feature/RDKEMW-21174
Open

RDKEMW-21174 [Develop] - Revert RDKEMW-16484 ticket due to regression issue#189
rekhap2kandhavelan wants to merge 8 commits into
mainfrom
feature/RDKEMW-21174

Conversation

@rekhap2kandhavelan

Copy link
Copy Markdown
Contributor

Revert RDKEMW-16484 ticket due to seek regression

Deepikasri1234 and others added 7 commits June 12, 2026 11:49
DELIA-70524: [Glass G1 UK -R40.23][Dhruv -40.11]observed "com.comcast.viper" crash on VIPA enabled devices contributing BERR/TECHFAULTOTT with fingerprint 61111371
RDKEMW-20330: [Glass G1 UK -R40.23][Dhruv -40.11]observed "com.comcast.viper" crash on VIPA enabled devices contributing BERR/TECHFAULTOTT with fingerprint 61111371
RDKEMW-20220:  Fix for the crash in "WPEWebProcess" during Deepsleep scenario
revert RDKEMW-16484 ticket due to regression
revert this RDKEMW-16484 due to regression
Copilot AI review requested due to automatic review settings July 8, 2026 06:35
@rekhap2kandhavelan
rekhap2kandhavelan requested a review from a team as a code owner July 8, 2026 06:35

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 primarily reverts the previously introduced “seek-with-keepPaused” gating (seekPausedState) to address a seek regression, while also including additional behavioral changes in DRM caps handling and HDMI/IARM event processing.

Changes:

  • Removed seekPausedState and all related logic that deferred PLAYING transitions during seek/buffering.
  • Added DRM decryptor synchronization to wait briefly for negotiated sink caps before attempting decrypt.
  • Modified HDMI/HDCP event handling to add power-transition gating and move HDMI status updates to a background thread, plus tightened caps validation in the OCDM adapter.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
InterfacePlayerRDK.cpp Reverts seek-paused gating and related buffering/PLAYING-transition logic.
InterfacePlayerPriv.h Removes seekPausedState from GstPlayerPriv.
gst-plugins/drm/gst/gstcdmidecryptor.h Adds a new condition variable for sink caps availability.
gst-plugins/drm/gst/gstcdmidecryptor.cpp Initializes/clears/signals the new condvar; waits for sink caps and guards decrypt paths.
externals/rdk/PlayerExternalsRdkInterface.h Adds a mutex member for HDMI status updates.
externals/rdk/PlayerExternalsRdkInterface.cpp Uses try-lock to prevent concurrent SetHDMIStatus(); adds cleanup attempt on unknown exceptions.
externals/rdk/IIarm/DeviceIARMInterface.cpp Adds power-transition gating and dispatches HDMI status updates asynchronously.
drm/ocdm/OcdmGstSessionAdapter.cpp Adds a null check before caps type/emptiness checks.

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

Comment on lines 447 to +452
pInstance->SetHDMIStatus();

// Dispatch to detached worker thread — do NOT block IARM dispatch thread
std::thread([pInstance]() {
pInstance->SetHDMIStatus();
}).detach();
Comment on lines 463 to +466
pInstance->SetHDMIStatus();
std::thread([pInstance]() {
pInstance->SetHDMIStatus();
}).detach();
Comment on lines 309 to 315
catch (const std::exception& e) {
MW_LOG_WARN("DeviceSettings exception caught: %s\n", e.what());
}
catch (...) {
MW_LOG_WARN("DeviceSettings unknown exception caught\n");
try { device::Manager::DeInitialize(); } catch (...) {}
}
Comment thread InterfacePlayerRDK.cpp
Comment on lines 1611 to 1616
if (interfacePlayerPriv->gstPrivateContext->bufferingTimeoutTimerId)
{
MW_LOG_MIL("InterfacePlayerRDK: Remove bufferingTimeoutTimerId %d", interfacePlayerPriv->gstPrivateContext->bufferingTimeoutTimerId);
g_source_remove(interfacePlayerPriv->gstPrivateContext->bufferingTimeoutTimerId);
interfacePlayerPriv->gstPrivateContext->bufferingTimeoutTimerId = PLAYER_TASK_ID_INVALID;
// Reset buffering state to prevent stale timeout_cnt from triggering error after seek
interfacePlayerPriv->gstPrivateContext->buffering_in_progress = false;
interfacePlayerPriv->gstPrivateContext->buffering_timeout_cnt = DEFAULT_BUFFERING_MAX_CNT;


}
// If rate indicates playback (not paused seek), clear seekPausedState
if (rate > 0 && !interfacePlayerPriv->gstPrivateContext->paused)
{
interfacePlayerPriv->gstPrivateContext->seekPausedState = false;
MW_LOG_MIL("InterfacePlayerRDK: rate indicates playback, clearing seekPausedState");
}
Comment on lines +249 to +257
std::shared_ptr<PlayerExternalsRdkInterface> pInstance =
PlayerExternalsRdkInterface::GetPlayerExternalsRdkInterfaceInstance();
if (newState != POWER_STATE_ON) {
pInstance->SetPowerEvent(true);
MW_LOG_INFO(" Power transition to non-ON state, blocking HDMI events\n");
} else {
pInstance->SetPowerEvent(false);
MW_LOG_INFO(" Power transition to ON, allowing HDMI events\n");
}
Comment on lines +449 to +452
// Dispatch to detached worker thread — do NOT block IARM dispatch thread
std::thread([pInstance]() {
pInstance->SetHDMIStatus();
}).detach();
Comment thread InterfacePlayerRDK.cpp
Comment on lines 531 to +535
else
{
MW_LOG_INFO("Setting state to GST_STATE_PLAYING");
/* If a seek-with-keepPaused is active we must not race into PLAYING.
* Defer the PLAYING transition and leave pipeline in PAUSED until
* an explicit resume (Pause(false)) clears `seekPausedState`.
*/
if (interfacePlayerPriv->gstPrivateContext->seekPausedState)

if (SetStateWithWarnings(interfacePlayerPriv->gstPrivateContext->pipeline, GST_STATE_PLAYING) == GST_STATE_CHANGE_FAILURE)
Copilot AI review requested due to automatic review settings July 8, 2026 06:46

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 6 comments.

Comment on lines 447 to +452
pInstance->SetHDMIStatus();

// Dispatch to detached worker thread — do NOT block IARM dispatch thread
std::thread([pInstance]() {
pInstance->SetHDMIStatus();
}).detach();
Comment on lines 463 to +466
pInstance->SetHDMIStatus();
std::thread([pInstance]() {
pInstance->SetHDMIStatus();
}).detach();
Comment on lines +431 to +435
if (pInstance->GetPowerEvent())
{
MW_LOG_WARN(" Skipping HDMI event processing during power transition\n");
return;
}
Comment on lines 309 to 311
catch (const std::exception& e) {
MW_LOG_WARN("DeviceSettings exception caught: %s\n", e.what());
}
Comment on lines +657 to +661
if (cdmidecryptor->sinkCaps == NULL) {
GST_WARNING_OBJECT(cdmidecryptor, "sinkCaps is NULL, skipping decrypt");
result = GST_FLOW_NOT_SUPPORTED;
goto free_resources;
}
Comment on lines 1956 to 1958
EXPECT_CALL(*g_mockGStreamer, gst_element_get_state(_, NotNull(), NotNull(), _))
.WillRepeatedly(DoAll(
SetArgPointee<1>(GST_STATE_PAUSED),
SetArgPointee<2>(GST_STATE_NULL),
Return(GST_STATE_CHANGE_SUCCESS)));
.WillRepeatedly(Return(GST_STATE_CHANGE_SUCCESS));

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.

5 participants