Skip to content

VPLAY-12202 - [Linear] black screen in sequential channel change#783

Merged
pstroffolino merged 33 commits intodev_sprint_25_2from
feature/VPLAY-12202
Jan 13, 2026
Merged

VPLAY-12202 - [Linear] black screen in sequential channel change#783
pstroffolino merged 33 commits intodev_sprint_25_2from
feature/VPLAY-12202

Conversation

@anjali-syna
Copy link
Copy Markdown
Contributor

@anjali-syna anjali-syna commented Dec 22, 2025

Randomly black screen due to 'internal data stream error' is seen while doing sequential channel change

Reason for change: In the problematic sequential channel change scenario, stop is initiated just after DRMLicenseManager has initiated the license request through content security manager. Then the new session sends its content protecting data to PrefetchThread for initiating the license request. But PrefetchThread is still waiting for the license response of the previous session and this gets updated to CDM and the new session's license acquisition fails.

Changes:

  • Added a mutex lock in Prefetch thread for the createDrmSession flow, so that AampLicensePreFetcher::Term() can make sure that createDrmSession flow is finished before stop. Also, added license request abort check in AampDRMLicenseManager::acquireLicense after the license response is received, so that incorrect license won't be set to CDM.

Test Procedure: Refer JIRA ticket

Risks: low

@anjali-syna anjali-syna marked this pull request as ready for review December 22, 2025 18:09
@anjali-syna anjali-syna requested a review from a team as a code owner December 22, 2025 18:09
Copilot AI review requested due to automatic review settings December 22, 2025 18:09
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This pull request addresses a race condition that causes black screens during sequential channel changes. The issue occurs when a stop is initiated during license acquisition, potentially causing the previous session's license response to be incorrectly applied to a new session's CDM.

Key Changes:

  • Added mutex protection around createDrmSession to synchronize with stop flow
  • Added abort check after license response is received to prevent applying stale licenses
  • Added diagnostic logging for license fetcher operations

Reviewed changes

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

File Description
middleware/drm/DrmSessionManager.cpp Added logging to destructor for debugging session lifecycle
drm/AampDRMLicManager.cpp Added post-response abort check and logging to prevent stale license application
AampDRMLicPreFetcher.cpp Added mutex protection around createDrmSession and logging for license fetcher state

Copilot AI review requested due to automatic review settings December 24, 2025 03:08
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

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 5 out of 5 changed files in this pull request and generated 6 comments.

Copilot AI review requested due to automatic review settings December 24, 2025 07:53
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

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 5 out of 5 changed files in this pull request and generated 2 comments.

…e doing sequential channel change

Reason for change: In the problematic sequential channel change scenario,
  stop is initiated just after DRMLicenseManager has initiated the license
  request. Stop flow calls mDRMLicenseManager->setLicenseRequestAbort(true).
  Then as part of the new sessions start flow, this flag is again set back
  to false. The new session sends its content protecting data to PrefetchThread
  for initiating the license request. But PrefetchThread is still waiting for
  the license response of the previous session and when it receives the license,
  previous session's licence response gets updated to CDM and the new session's
  license acquisition fails.

Changes:
* Added a mutex lock in Prefetch thread for the createDrmSession flow, so that
  AampLicensePreFetcher::Term() or AampLicensePreFetcher::SetLicenseFetcher() can
  make sure that createDrmSession flow is finished before stop.
  Also, added license request abort check in AampDRMLicenseManager::acquireLicense
  after the license response is received, so that incorrect license won't be set to CDM.

Test Procedure: Refer JIRA ticket

Risks: low
Signed-off-by: anjali-syna <206662904+anjali-syna@users.noreply.github.com>
Signed-off-by: anjali-syna <206662904+anjali-syna@users.noreply.github.com>
Signed-off-by: anjali-syna <206662904+anjali-syna@users.noreply.github.com>
Signed-off-by: anjali-syna <206662904+anjali-syna@users.noreply.github.com>
Signed-off-by: anjali-syna <206662904+anjali-syna@users.noreply.github.com>
Signed-off-by: anjali-syna <206662904+anjali-syna@users.noreply.github.com>
Signed-off-by: anjali-syna <206662904+anjali-syna@users.noreply.github.com>
Signed-off-by: anjali-syna <206662904+anjali-syna@users.noreply.github.com>
Copilot AI review requested due to automatic review settings January 5, 2026 08:34
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

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 35 out of 35 changed files in this pull request and generated 13 comments.

…e doing sequential channel change

Reason for change: In the problematic sequential channel change scenario,
  stop is initiated just after DRMLicenseManager has initiated the license
  request. Stop flow calls mDRMLicenseManager->setLicenseRequestAbort(true).
  Then as part of the new sessions start flow, this flag is again set back
  to false. The new session sends its content protecting data to PrefetchThread
  for initiating the license request. But PrefetchThread is still waiting for
  the license response of the previous session and when it receives the license,
  previous session's licence response gets updated to CDM and the new session's
  license acquisition fails.

Changes:
* Added a mutex lock in Prefetch thread for the createDrmSession flow, so that
  AampLicensePreFetcher::Term() or AampLicensePreFetcher::SetLicenseFetcher() can
  make sure that createDrmSession flow is finished before stop.
  Also, added license request abort check in AampDRMLicenseManager::acquireLicense
  after the license response is received, so that incorrect license won't be set to CDM.

Test Procedure: Refer JIRA ticket

Risks: low
Signed-off-by: anjali-syna <206662904+anjali-syna@users.noreply.github.com>
Signed-off-by: anjali-syna <206662904+anjali-syna@users.noreply.github.com>
Signed-off-by: anjali-syna <206662904+anjali-syna@users.noreply.github.com>
Copilot AI review requested due to automatic review settings January 8, 2026 17:12
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

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 5 out of 5 changed files in this pull request and generated 9 comments.

Signed-off-by: anjali-syna <206662904+anjali-syna@users.noreply.github.com>
Copilot AI review requested due to automatic review settings January 9, 2026 16:02
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

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 5 out of 5 changed files in this pull request and generated 3 comments.

Copilot AI review requested due to automatic review settings January 12, 2026 07:26
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

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 5 out of 5 changed files in this pull request and generated 8 comments.

Signed-off-by: anjali-syna <206662904+anjali-syna@users.noreply.github.com>
Signed-off-by: anjali-syna <206662904+anjali-syna@users.noreply.github.com>
Copilot AI review requested due to automatic review settings January 12, 2026 09:21
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

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 5 out of 5 changed files in this pull request and generated no new comments.

@pstroffolino pstroffolino merged commit cf1c37f into dev_sprint_25_2 Jan 13, 2026
7 of 8 checks passed
@pstroffolino pstroffolino deleted the feature/VPLAY-12202 branch January 13, 2026 01:22
vinodkadungoth pushed a commit that referenced this pull request Feb 9, 2026
VPLAY-12202 - [Linear] black screen due to 'internal data error' while doing sequential channel change

Reason for change: In the problematic sequential channel change scenario,
  stop is initiated just after DRMLicenseManager has initiated the license
  request. Stop flow calls mDRMLicenseManager->setLicenseRequestAbort(true).
  Then as part of the new sessions start flow, this flag is again set back
  to false. The new session sends its content protecting data to PrefetchThread
  for initiating the license request. But PrefetchThread is still waiting for
  the license response of the previous session and when it receives the license,
  previous session's licence response gets updated to CDM and the new session's
  license acquisition fails.

Changes:
* Added a mutex lock in Prefetch thread for the createDrmSession flow, so that
  AampLicensePreFetcher::Term() or AampLicensePreFetcher::SetLicenseFetcher() can
  make sure that createDrmSession flow is finished before stop.
  Also, added license request abort check in AampDRMLicenseManager::acquireLicense
  after the license response is received, so that incorrect license won't be set to CDM.

Test Procedure: Refer JIRA ticket

Risks: low

Signed-off-by: anjali-syna <206662904+anjali-syna@users.noreply.github.com>
shripadbpersonal pushed a commit that referenced this pull request Feb 9, 2026
… (#1001)

VPLAY-12202 - [Linear] black screen due to 'internal data error' while doing sequential channel change

Reason for change: In the problematic sequential channel change scenario,
  stop is initiated just after DRMLicenseManager has initiated the license
  request. Stop flow calls mDRMLicenseManager->setLicenseRequestAbort(true).
  Then as part of the new sessions start flow, this flag is again set back
  to false. The new session sends its content protecting data to PrefetchThread
  for initiating the license request. But PrefetchThread is still waiting for
  the license response of the previous session and when it receives the license,
  previous session's licence response gets updated to CDM and the new session's
  license acquisition fails.

Changes:
* Added a mutex lock in Prefetch thread for the createDrmSession flow, so that
  AampLicensePreFetcher::Term() or AampLicensePreFetcher::SetLicenseFetcher() can
  make sure that createDrmSession flow is finished before stop.
  Also, added license request abort check in AampDRMLicenseManager::acquireLicense
  after the license response is received, so that incorrect license won't be set to CDM.

Test Procedure: Refer JIRA ticket

Risks: low

Signed-off-by: anjali-syna <206662904+anjali-syna@users.noreply.github.com>
Co-authored-by: anjali-syna <206662904+anjali-syna@users.noreply.github.com>
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