Skip to content

RDK-61583: AAMP Federated 2606 release#1505

Merged
paulpandian25 merged 149 commits into
developfrom
feature/RDK-61583_federated_2606
Jun 12, 2026
Merged

RDK-61583: AAMP Federated 2606 release#1505
paulpandian25 merged 149 commits into
developfrom
feature/RDK-61583_federated_2606

Conversation

@psiva01

@psiva01 psiva01 commented May 22, 2026

Copy link
Copy Markdown
Contributor

No description provided.

Anurag Krishnan and others added 30 commits March 31, 2026 22:44
Reason for change: Deadlock chain -
        1. SetRateInternal() holds StreamLock and then waits for the GStreamer lock inside gst_omx_video_dec_sink_event().
        2. The decoder first-frame callback holds the GStreamer lock and then calls PrivateInstanceAAMP::IsAtLivePoint(), which waits for StreamLock.
        This creates a circular wait
        Removing the streamlock from PrivateInstanceAAMP::IsAtLivePoint() breaks this circular dependency.
Test Procedure: updated in ticket
Risks: Low

Signed-off-by: Anurag Krishnan <akrish513@cable.comcast.com>
Reason for change:
Update the default configurations for LLD as part of LLD and ABR hardening changes.
Migrate latency to float to get millisecond precision.
Enable AAMP underflow monitor by default and set 0.2s as the underflow threshold.
Test Procedure: Sanity testing LLD playback
Risks: Medium

Signed-off-by: Vinish100 <vinish.balan@gmail.com>
Reason for change: Reapply configuration updates -
Update the default configurations for LLD as part of LLD and ABR hardening changes.
Migrate latency to float to get millisecond precision.
Test Procedure: Sanity testing LLD playback
Risks: Medium

Signed-off-by: Vinish100 <vinish.balan@gmail.com>
#1246)

* VPLAY-12062 framework allowing l3 tests involving JavaScript and UVE-JS control of AAMP to be run on OSX (and/or Ubuntu)

Reason for change: To allow L3 tests running on Mac
Risks: Low
Priority: P1

Signed-off-by: Rajat <emailofrajatyadav@gmail.com>

* expanded Javascript functions implementation added to UVEBinding.cpp

---------

Signed-off-by: Rajat <emailofrajatyadav@gmail.com>
…nts (#1264)

Reason for change: SendBufferChangeEvent bufferingStop bool is changed to bufferingStart
Test Procedure: No regression with buffering reporting
Risks: Medium

Signed-off-by: varshnie <varshniblue14@gmail.com>
Co-authored-by: Vinish K B <vinish.balan@gmail.com>
Reason for change: Use init config underflowDetectThresholdSec to
determine if its a true buffer underflow or false alarm when an
underflow signal is received from sink
Test Procedure: Delay manifest download to cause a buffer underflow
and ensure buffering is started
Risks: Low

Signed-off-by: Vinish100 <vinish.balan@gmail.com>
…hile performing Trick Play/Seek (#1265)

Reason for change: Progress Bar Point jumping to the End/beginning
 While performing Trick Play/Seek in Linear channels.
 In the problematic scenario, aamp is getting a wrong position from rialto.
 So modifying aamp to perform seek even when the seek position is 0.

Test Procedure: Refer JIRA ticket

Risks: low
Reason for change: Added L1 tests for possible scenarios for validating Early return functionality
Test Procedure: L1 should pass
Risks: Low

Signed-off-by: lashminthaj <lashminthaj17@gmail.com>
…intermittent (#1200)

* VPLAY-13060 ABR rejecting outliers for bandwidth calcualtion L2 2034 intermittent

Reason for Change: updates AAMP’s Rolling Median Outlier (RMO) bandwidth estimator to avoid rejecting both samples during initial tune when only two bandwidth samples exist and they differ significantly, which could lead to “bandwidth unavailable” despite having usable data.
- Adjust RMO outlier rejection logic to only reject samples above the median when exactly 2 samples are present.
- Add a unit test covering the 2-sample “reject only higher outlier” scenario.
- Minor test clarification comment update (annotating the rejected sample).

Test Guidance: L2 2034 passing more reliably
Risk: Low
---------

Co-authored-by: Patrick Conduit <pconduit@synamedia.com>
#1273)

Reason for Change: Adds reusable GitHub Copilot prompt files to support two common engineering workflows in this AAMP repo: (1) evidence-based defect localization from run logs and (2) consistent cyclomatic complexity measurement of functions/methods.
Changes:
Adds an AAMP log analysis prompt that enforces a timeline-first, evidence-based debugging approach.
Adds a cyclomatic complexity measurement prompt with explicit McCabe counting rules and a required reporting format.
Updates Copilot repository instructions to reference the new AAMP log debugging prompt.
* Create Copilot prompts for debug & complexity analysis
* Update instructions to reference cyclomatic complexity prompt
* Added reference to AAMP_BUILD_INFO for debug use

Risk: Low-impacts copilot quality only, not current code functionality
* VPAAMP-48 EWMA algorithm (new default) over RMO

Reason for Change: flip network bandwith estimation algorithm to modern EWMA for testing in sprint

Test Guidance: monitor for any improvement or regression with ABR behavior

Risk: Medium - this has been dev tested, and believed to give better results

---------

Signed-off-by: Philip Stroffolino <philip_stroffolino@cable.comcast.com>
Reason for change: Change aamp ABR code to log less often (only on changes)
Test Procedure: See ticket
Risks: low

Signed-off-by: James Lofthouse <james_lofthouse@comcast.com>
Co-authored-by: pstroffolino <Philip_Stroffolino@cable.comcast.com>
…#1281)

Reason for Change: give developers feedback for prompts that are vague or lack context, with aim to help them improve and create more precise useful prompts.

Add measurement of prompt quality for completeness, assumptions and clarity.  Display the score and suggest improvements at the end of the prompt if the score is below threshold.

Test Guidance: no impact on core AAMP - developers should see additional feedback while interacting with copilot.

Risk: None
* VPAAMP-47 Add AAMP config to include the filename in log lines

Reason for Change: Help filter logs and identify methods in the log.
Summary of Changes:
- Add new config logFilename, set to false by default
- Add the filename to every log line if logFilename is true
- Update the prototype of logprintf to include the filename
Test Procedure: Enable logFilename and confirm logs
Priority: P2
Risks: Low
…not resume at the correct segment. (#1172)

VPAAMP-67 AAMP SkipFragments() not locating correct position with 30Sec manifest TSB

Reason for Change: Fixes DASH (MPD) seek/skip alignment in StreamAbstractionAAMP_MPD::SkipFragments() for cases where presentationTimeOffset (PTO) and the SegmentTimeline’s start time diverge (e.g., after TSB culling), so resume/seek lands on the intended base-period segment.
- Add handling for pto <= startTime when aligning skipTime against SegmentTimeline start time.
- Add diagnostic logging for computed PTO/startTime offset.
- Change an EOS log from INFO to WARN.

Test Guidance: refer ticket
Risk: Low
---------

Co-authored-by: Patrick Conduit <pconduit@synamedia.com>
Reason for change: Fix ad break fragment scheduling for live stream
if split period ad is placed and in progress.
Risks: Low
Test Procedure: Test with Early return stream
Priority: P1

Signed-off-by: Nandakishor U M <nu641001@gmail.com>
* VPLAY-13176 underflow detection refactoring

Reason for Change: Refactors video underflow detection to a timer/deadline-driven monitor, removing steady-state polling and introducing explicit notifications from fragment download and buffering transitions to improve consistency across devices/simulators.
Changes:
Replace polling-based underflow detection with a deadline-based AampUnderflowMonitor that arms/disarms on fragment and buffering notifications.
Wire underflow-monitor notifications into fragment download/chunk caching and buffering state transitions.
Update unit-test fakes to match the new monitor API and stream-abstraction notification surface.

Test Guidance: 6002 L2 test and general regression

Risk: High

Signed-off-by: Philip Stroffolino <philip_stroffolino@cable.comcast.com>

---------

Signed-off-by: Philip Stroffolino <philip_stroffolino@cable.comcast.com>
…#1279)

* VPLAY-13258  Add aamp config to dump network CSV data (AAMP_NET_TRACE)

Reason for change: To add run time aamp config to enable AAMP net traces csv dumps
Risks: Low
Priority: P1

Signed-off-by: Rajat <emailofrajatyadav@gmail.com>

* Apply suggestions from code review

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Signed-off-by: Rajat <emailofrajatyadav@gmail.com>
Co-authored-by: pstroffolino <Philip_Stroffolino@cable.comcast.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Reason for change: On processing a gst HDCP error, flush with teardown is called without
                   stopping stream injection leading to an abort
Test Procedure: See ticket
Risks: low

Signed-off-by: James Lofthouse <james_lofthouse@comcast.com>
* VPLAY-12908 - Code improvement in TsbReader

Reason for change: - A follow up change to VPLAY-11126. Some
edge cases are addressed here.
Test Procedure: - Refer to Ticket
Risks: low

---------

Signed-off-by: Philip Stroffolino <philip_stroffolino@cable.comcast.com>
VPLAY-12242: create l1 or l2 tests reflecting app expectations
related to player state changes

Reason for Change: make it easier (via l1 tests) to detect changes that risk breaking current app assumptions about player state changes, to avoid regressions.  Some of these were previously caught only in l3 tests.

Test Guidance: l1 tests passing

Risk: Low (test only changes)

---------

Signed-off-by: psiva01 <sivasubramanian.patchaiperumal@ltts.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
* VPLAY-13143 frequent stuttering while playing clear multi-codec test stream

Reason for Change: test hevc/ave filtering with multi-codec streams

Test Guidance: see ticket - includes a test stream that sufferes gstreamer pipeline errors without this.  new l1/l2 tests added

Risk: Medium

---------

Signed-off-by: Philip Stroffolino <philip_stroffolino@cable.comcast.com>
* VPAAMP-76 default-enable eAAMPConfig_EnableAampUnderflowMonitor

Reason for Change: This PR default-enables the new AampUnderflowMonitor subsystem and adds additional notifications/guards to reduce false underflow detection during trickplay rate changes and pipeline discontinuity flush sequences.
Changes:
Default-enable eAAMPConfig_EnableAampUnderflowMonitor in config defaults.
Add an explicit rate-change notification path from SetRateInternal() into the underflow monitor.
Add a “false alarm” guard in the underflow monitor run loop and disarm logic during codec-change discontinuity flushing.

Other changes to avoid test regressions:
aampgstplayer.cpp — codec-change flush disarm; Fixes: AAMP-AUDIO-13006 ×2
In AAMPGstPlayer::Discontinuity(), after StopBuffering(true) in the shouldHaltBuffering branch (codec change + PTS-restamp path), NotifyPipelinePausedToUnderflowMonitor() is now called. This disarms the monitor's deadline during the GstPlayer_SignalEOS → flush → GST_MESSAGE_EOS sequence. Without it, the monitor fired during the injection gap, paused the pipeline, and AAMP_EVENT_STATE_CHANGED: COMPLETE never appeared.
AampUnderflowMonitor.h/.cpp — NotifyRateChange(float rate); Fixes: AAMP-TSB-5016, AAMP-CDAI-8003[4]
New method that updates mCurrentPlayRate under the mutex and, if the new rate is trickplay (non-normal, non-pause, non-slo-mo), disarms the current deadline immediately. This closes the race window between aamp->rate = <trickplay> being set and the first trickplay fragment arriving via NotifyVideoFragment — during that gap, the old normal-play deadline could fire with mCurrentPlayRate still at 1.0, making isTrickplay = false and falsely declaring underflow.
StreamAbstractionAAMP.h + streamabstraction.cpp — forwarding method
NotifyRateChangeToUnderflowMonitor(float rate) follows the same pattern as the existing NotifyPipelinePausedToUnderflowMonitor(), operating under mUnderflowMonitorMutex.
main_aamp.cpp — call site
Immediately after aamp->rate = rate in the trickplay aamp_SetRate path, NotifyRateChangeToUnderflowMonitor(rate) is called before TuneHelper triggers new downloads.


Risk: Medium

Test Guidance: no impact on l1/l2 tests and no regressions in this area

---------

Signed-off-by: Philip Stroffolino <philip_stroffolino@cable.comcast.com>
)

* Revert "Revert "VPAAMP-48 EWMA algorithm (new default) over RMO (#1283)" (#1288)"

Reason for Change: 0=ROLLING_MEDIAN_OUTLIER, 1=HARMONIC_EWMA (new default)
- support for ResetCurrentlyAvailableBandwidth which exists to prevent the ABR manager from immediately re-switching profiles the moment it evaluates bandwidth again after a forced profile change. When a ramp-down is triggered by a download failure or buffer exhaustion, the player has already committed to a new (lower) profile — if the estimator still reports the pre-failure throughput, getProfileIndexByBitrateRampUpOrDown would see network bandwidth well above the new profile's bitrate and attempt to ramp back up on the very next evaluation cycle, causing a flip-flop.
- new l1 test for same
---------

Signed-off-by: Philip Stroffolino <philip_stroffolino@cable.comcast.com>
…inning W…" (#1314)

This reverts commit 2624fb3.

Reason for Change: Reverting for now, as this change is increasing the random failure rate of 7001 L2 test.  Also the original issue is still randomly seen.

Risk: Low
Reason for change: avoid logging bogus negative decode time value for failed tune s
Test Procedure: See ticket
Risks: low

Signed-off-by: James Lofthouse <james_lofthouse@comcast.com>
Co-authored-by: pstroffolino <Philip_Stroffolino@cable.comcast.com>
Reason for change: To add Ubuntu support to L3 tests
Risks: Low
Priority: P1

Signed-off-by: Rajat Yadav <ryadav819@cable.comcast.com>
Co-authored-by: Rajat Yadav <ryadav819@cable.comcast.com>
Co-authored-by: pstroffolino <Philip_Stroffolino@cable.comcast.com>
psiva01 and others added 2 commits May 20, 2026 11:54
…1442)

* VPAAMP-245: Negative Latency value logged while HLS linear playback
w/o TSB

Test Guidance: refer ticket
Risk: Low

Reason for change: EndPos is set to -1 for TSB-less playback before
latency calculation. This caused latency to be negative, since HLS
latency is calculated as EndPos - CurrPos. So, moved this tsbless
block after latency calculation. Also, fixed start and end values
in aamp pos logging.

* Rename format_pos lambda to formatPos and val parameter to valMs for camelCase consistency
* Add regression test for VPAAMP-245: TSB-less linear HLS latency non-negative

Replace (valMs == -1.0) with (valMs < 0) in formatPos lambda: direct
floating-point equality against a sentinel is fragile, and culledSeconds
can legitimately go negative via the HLS PDT path in UpdateCullingState
(negative culledSec values are explicitly allowed there), so < 0 is both
safer and more correct.

Remove redundant explicit casts in AAMPLOG_MIL call: (double) casts on
videoBufferedDuration, audioBufferedDuration, and latency/1000.0 are
unnecessary (division by a double literal already produces double), and
the (long long) cast on videoPTS is redundant as it is already long long.

---------

Signed-off-by: psiva01 <sivasubramanian.patchaiperumal@ltts.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: psiva01 <214551386+psiva01@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: pstroffolino <Philip_Stroffolino@cable.comcast.com>
…ayback (…" (#1496)

This reverts commit b63bca4.
L2 1020 (and others) failing with this change.
We either need to change logging to be compatible with existing test frameworks, or update tests.
@psiva01 psiva01 requested a review from a team as a code owner May 22, 2026 16:04
psiva01 added 2 commits May 25, 2026 17:07
……" (#1496)" (#1497)

Reason for Change: Updates PrivateInstanceAAMP::MonitorProgress() to prevent negative
live-latency values during TSB-less linear HLS playback by deferring the start/end = -1
(XRE sentinel) assignment until after HLS latency is computed, and adds a unit regression
test to guard against recurrence.
Changes:
Move the TSB-less linear start/end = -1 override to after live latency calculation in MonitorProgress().
Add a regression unit test validating GetCurrentLatencyMs() is never negative for TSB-less linear HLS playback.
@psiva01 psiva01 requested a review from Copilot May 26, 2026 08:43

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.

Copilot wasn't able to review this pull request because it exceeds the maximum number of lines (20,000). Try reducing the number of changed lines and requesting a review from Copilot again.

DomSyna and others added 3 commits May 28, 2026 12:23
Reason for Change: Fixes subtitle rendering regressions after SSAI ad breaks for HLS/TS when eAAMPConfig_HlsTsEnablePTSReStamp is enabled by correcting how WebVTT timing is restamped and by resetting TS demuxer rollover state across discontinuities.

Fix RestampSubtitle LOCAL parsing for non-standard CDN VTT format

Some HLS CDN WebVTT segments place MPEGTS on a pseudo-cue settings
line rather than in the X-TIMESTAMP-MAP header:

  WEBVTT
  X-TIMESTAMP-MAP=LOCAL:00:00:00.000
  00:00:00.000 --> 00:00:00.420 ...,MPEGTS:3944266080

  00:00:00.000 --> ... (real cue with text)

The previous code used strchr(localPtr, ',') which searched past the
line-ending newline, finding the comma inside the pseudo-cue settings.
This caused localStr to absorb the pseudo-cue timing line (with an
embedded newline), placing MPEGTS at the end of a cue settings line in
the output instead of in the X-TIMESTAMP-MAP header:

  AFTER:  X-TIMESTAMP-MAP=LOCAL:00:00:00.000,MPEGTS:160347600

The fix: limit the comma search to the current line by also checking
for a preceding newline. If the comma comes after a newline (or there
is no comma on the LOCAL line), extract LOCAL up to the newline only.
MPEGTS is still found correctly via extractFieldPtr which scans the
full headerView (including the pseudo-cue content).

Fix RestampSubtitle test build: move to protected, expose via using

Use explicit wrapper in TestableMediaTrack for RestampSubtitle

- fragmentcollector_hls.cpp: fix misleading comment at SetSubtitlePtsOffset
  call site; ptsOffsetSecs is passed in seconds and the callee handles
  the unit conversion (ns for Rialto, ms for other sinks)
- tsprocessor.cpp: remove commented-out per-packet AAMPLOG_TRACE; dead
  code in a hot loop with no runtime path to re-enable it

Test Guidance: refer ticket

Risk: Medium
---------

Co-authored-by: pstroffolino <Philip_Stroffolino@cable.comcast.com>
…el Change

Reason for change: Added retry logic to AAMP downloads when curl returns error 55 (CURL_SEND_ERROR)
Risks: Low
Test Procedure: Refer jira ticket
Priority: P0

Signed-off-by: Gnanesha <gnaani82@gmail.com>
…ed_2606

RDKEMW-19029: Observed Video Freeze & Fast-Forward Effect After Chann…
Comment thread AampUnderflowMonitor.cpp
{
AAMPLOG_INFO("[video] underflow ended. buffered=%.3f (>= resume threshold %.3f)",
bufferSec, resumeThreshold);
mAamp->SetBufferingState(false);
Comment thread aampgstplayer.cpp
this->aamp = aamp;
// Initially set to this instance, can be changed by SetEncryptedAamp
this->mEncryptedAamp = aamp;
this->mEncryptedAampId = (aamp ? aamp->mPlayerId : -1);
const long long tActualCurlMs = NOW_STEADY_TS_MS - mDownloadStartTime;
const double predictedTransferMs =
AampNetworkPersona::Instance().SampleTransferMs(
mDownloadResponse ? mDownloadResponse->mDownloadData.size() : 0);
Comment thread fragmentcollector_mpd.cpp
mCdaiObject->mCurAdIdx >= static_cast<int>(mCdaiObject->mCurAds->size()) ||
mCdaiObject->mCurPlayingBreakId.empty())
{
return -1.0;
double resid = x[i + 1] - (result.c + result.rho * x[i]);
sumResidSq += resid * resid;
}
result.sigmaEps = (m > 1) ? std::sqrt(sumResidSq / static_cast<double>(m - 1)) : 0.0;
Comment thread aampgstplayer.h
* @brief Return encrypted player id
* @return ID of encrypted player else -1
*/
const int GetEncryptedAampId(void) const;
Comment thread fragmentcollector_mpd.cpp
mPeriodEndTime = savedPeriodEndTime;
mNumberOfTracks = savedNumberOfTracks;
mUpdateStreamInfo = savedUpdateStreamInfo;
mABRMode = savedABRMode;

if (reusedTtfbMs.size() >= 5 && freshTtfbMs.size() >= 3)
{
persona.newConnPenaltyMs = std::max(0.0, Median(freshTtfbMs) - Median(reusedTtfbMs));
}
if (!counts.empty())
{
persona.burstsPerSegment = static_cast<int>(std::round(Median(counts)));
}
if (!cvSeries.empty())
{
persona.burstBytesCv = Median(cvSeries);
psiva01 and others added 18 commits June 10, 2026 11:57
…1564)

Reason for change: underflow is now suppressed at VOD EOS boundary
so the monitor does not post an underflow anomaly while EOS completion
is in flight.

---------

Signed-off-by: psiva01 <sivasubramanian.patchaiperumal@ltts.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: pstroffolino <Philip_Stroffolino@cable.comcast.com>
… with "Please wait until the program is loaded" error (#1582)

* VPAAMP-529: Stop underflow monitor at VOD injection EOS instead of EOS boundary heuristic

Replace the position-based EOS boundary guard (eosEndToleranceSec config) with
a clean lifecycle fix: call StopUnderflowMonitor() from MediaTrack::InjectFragment()
immediately after the last VOD video fragment's EOS sentinel is signalled to the
pipeline.

At that point no further fragment arrivals are possible, so underflow detection
is meaningless and the monitor thread can be safely terminated before the
GStreamer EOS bubble drains and eSTATE_COMPLETE is reached.

Changes:
- streamabstraction.cpp: call pContext->StopUnderflowMonitor() in the VOD video
  EOS path of InjectFragment(), after EndOfStreamReached() is called.
- AampUnderflowMonitor.cpp: remove EOS boundary guard block (IsLive / duration
  / eosEndToleranceSec check).
- AampConfig.h: remove eAAMPConfig_UnderflowEosEndToleranceSec enum entry.
- AampConfig.cpp: remove underflowEosEndToleranceSec config table entry.
- AampDefine.h: remove DEFAULT_UNDERFLOW_EOS_END_TOLERANCE_SEC constant.

The eSTATE_COMPLETE exit guard added in VPAAMP-529 is retained as a safety net.

* VPAAMP-529: Add L1 regression tests for VOD EOS StopUnderflowMonitor

Two new tests in TrackInjectTests verify the VPAAMP-529-improved fix:

- InjectFragment_VodEos_StopsUnderflowMonitor: asserts that
  StopUnderflowMonitor() is called exactly once when the video
  track's EOS sentinel is injected on a VOD stream (IsLive=false).

- InjectFragment_LiveEos_DoesNotStopUnderflowMonitor: asserts that
  StopUnderflowMonitor() is NOT called when the same EOS sentinel
  path fires on a live stream, protecting that code path from
  regression.

Supporting changes:
- StreamAbstractionAAMP.h: make StopUnderflowMonitor() virtual so
  MockStreamAbstractionAAMP can intercept it via virtual dispatch.
- MockStreamAbstractionAAMP.h: add MOCK_METHOD for StopUnderflowMonitor
  with override specifier.
- TrackInjectTests.cpp: define g_mockStreamAbstractionAAMP locally to
  prevent FakeStreamAbstractionAamp.cpp.o from being loaded from
  libfakes.a, which would otherwise introduce 120 pre-existing
  duplicate symbols with the directly-compiled streamabstraction.cpp.

* Apply suggestions from code review

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* VPAAMP-529: Add StopUnderflowMonitor EXPECT_CALL to PreferredLanguages L1 tests

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
…ad start with "Please wait until the program is loaded" error (#1582)"

This reverts commit b5a332c.
Revert "VPLAY-12744:Handle static DASH DRM license rotation using EAP…
…s after ad start with "Please wait until the program is loaded" error (#1582)""

This reverts commit 9547701.
Reason for Change: Fixes HLS-TS PTS restamping across SSAI (server-side ad insertion) transitions to prevent video freeze when restamping is enabled. The core change avoids using a stale base_pts at the ad boundary and adds logic to suppress false rollover detection immediately after discontinuities/offset changes.

Changes:
Update Demuxer::UpdateSegmentInfo() to compute restamped PTS/DTS from raw encoder ticks plus ptsOffset (avoiding stale base_pts arithmetic).
Add suppress_rollover_detection and clear/suppress rollover handling around discontinuities via setPtsOffset() / init().
Add a new TsDemuxerTests L1 unit test suite covering restamp output and rollover suppression/correction.

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: pstroffolino <Philip_Stroffolino@cable.comcast.com>
…ping enabled, e.g. NBCNewsNOW (#1542)

Reason for Change: instead of the AAMP layer rewriting the MPEGTS field in the VTT byte stream (fragile header surgery), the PTS offset is pushed into the subtec channel as a signed time offset, matching the pattern already used on the DASH path.

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: dnfaulkner <115161165+dnfaulkner@users.noreply.github.com>
Co-authored-by: pstroffolino <Philip_Stroffolino@cable.comcast.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Reason for change: Handle ad breaks closed with NotifyReservationComplete and
invalidate empty ad breaks to prevent ad state issues during trickplay.
Risks: Low
Test Procedure: Test with various ad break scenarios during trickplay
Priority: P1
Change-Id: Ie25d404ec0edf9bed7ed0c9299fa8a0eda0d360e
Signed-off-by: Nandakishor U M <nu641001@gmail.com>
Signed-off-by: psiva01 <sivasubramanian.patchaiperumal@ltts.com>
Signed-off-by: psiva01 <sivasubramanian.patchaiperumal@ltts.com>
…S restamping enabled, e.g. NBCNewsNOW (#1542)"

This reverts commit c899792.
VPAAMP-256, VPAAMP-453 & VPAAMP-457 revert
…ack fails after ad start with "Please wait until the program is loaded" error (#1582)"""

This reverts commit 37adcd1.
@paulpandian25 paulpandian25 merged commit f6208c3 into develop Jun 12, 2026
6 of 8 checks passed
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.