Repository navigation
Player: a terminal playback error lets go of the pipeline and the video plane - #937
Merged
GLinnik21 merged 3 commits intoOct 25, 2026
Merged
Conversation
…eo plane The failure read-out stood on a loaded Engine: the native pipeline and the video window stayed up behind it, which the television reads as playback still going, so its screen manager reset the screensaver timer every 30 s for as long as the read-out was shown and the screensaver never came on (it does on Home, where no pipeline is loaded). An Engine that put a picture up and then failed for good is now released the frame after, with the teardown an app switch uses (suspend_bufferfeed: the session, URL and transcode session stay, nothing is reported as stopped). What the read-out and its actions need stays in the session, as the engine-less refusals already do: the cause (PlaybackSession::engine_failure, which player::state derives Error from and error_now reads), and the playhead a retry resumes from (the unpresented resume slot retry_failed_playback already reads). Try again, Play automatically and a quality pick start a new playback from scratch and end the standing error with their request; Back ends the session with a real stop that still reports the position the Engine stopped at, once. An Engine-less pump frame now also discards a stale recovery landing, so a replacement encoder a worker registered for a flight that ended is stopped without waiting for the next playback. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Signed-off-by: Tiago Pereira <1698241+tiper@users.noreply.github.com>
…ease guards Behaviour unchanged. - player/mod.rs: the four-signal `runtime_failure(...)` read that `error_now` did inline is now `live_runtime_failure(ps)`, which `error_now` and `release_failed_engine` both call, so the cause a released Engine freezes into the session cannot drift from the one the read-out derives while an Engine is up. - player/pump.rs: the two sites that fail an Engine for good repeated `fail_current_engine(); set_state(Error); arm_failed_engine_release();`; they call one `fail_engine_for_good()`. - player/engine.rs `release_failed_engine`: the "Engine already replaced" case (disarm and return) is its own early return instead of a second `is_live()` check inside the combined guard; the remaining conditions keep their order. - player/engine.rs `teardown`: the Engine-less real-stop branch reads duration, playhead and rating key only when a released Engine's failure stands, and builds `final_report` inside that branch. - route/decision_plan_tests.rs: pass the new `version` argument (`None`) to `request_play`, which main gained after this branch was cut, so the PR's test compiles against the merged tree. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Owner
|
Thanks @tiper, nice catch on the screensaver. Merged. What I changed on the branch before merging, behaviour the same:
|
GLinnik21
added a commit
to tiper/fin-native
that referenced
this pull request
Oct 25, 2026
…21#937's shared step GLinnik21#937 made fail_engine_for_good (fail the Engine, enter Error, arm the pipeline release) the one place an Engine ends for good. The two sites this branch adds, the learned Load refusal and the learned native-audio stall, open-coded the old fail-and-Error pair and so skipped arming the release; they call the shared step. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Oct 26, 2026
tiper
added a commit
to tiper/fin-native
that referenced
this pull request
Oct 26, 2026
The maintainer pushed "Simplify:" commits onto every PR of ours he merged (GLinnik21#839, GLinnik21#937, GLinnik21#1018, GLinnik21#1034), behaviour unchanged each time. The skill writes down what he changed (reuse the existing path, one owner per state, values over globals, one named step for a repeated sequence, no redundant guards, docs kept true) and the steps to take before opening an upstream PR so he does not have to. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Before: After a terminal playback error the failure read-out stood on a loaded Engine, so the native pipeline and video window stayed up. webOS read that as playback still going and reset the screensaver timer every 30 s, so the screensaver never came on over the error screen.
After: An Engine that failed for good is released the frame after, using the same teardown an app switch uses. The read-out keeps its cause and the playhead in the session. Try again, Play automatically, a quality pick and Back behave as before; Back still reports the stop position once.
How:
release_failed_engineruns in pump after a terminal failure and callssuspend_bufferfeed.PlaybackSession::engine_failurekeeps the Error state and cause, and the unpresented resume slot keeps the retry position. An Engine-less pump frame now also discards a stale recovery landing. Tests cover the release, a retry after it, and Back after it.Verified on an LG C1: the screensaver now comes on over the error screen and Try again resumes.