Conversation
… (869fa89uh) loop_videoCue sent /loop 1 for every video cue, play-once ones included. The videocomposer runs its display latency (33 ms) ahead of MTC, so with wraparound on it reached end of file before the engine hid the layer and showed the first frame again for a frame or two at the end of the cue. Send /loop 1 only when cue.loop != 1, and on the last pass of a counted loop send /loop 0 after the new offset, so the end holds the last frame.
This branch has not been deployed
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.
Problem
At the end of a play-once video cue the first frame of the video is shown again for a frame or two before the layer goes black. Reported at Medina del Campo sala1 (ClickUp 869fa89uh).
Cause
loop_videoCuesent/videocomposer/layer/<id>/loop 1for every video cue, includingloop=1. With wraparound on, the videocomposer wraps to frame 0 at end of file instead of holding the last frame.The videocomposer runs its display latency (33 ms) ahead of MTC, and the engine ends the body on a 25 fps frame boundary and sends
/visible 0a few ms later. So whenever the real file is less than about 40 ms longer than the engine's body length, the layer reaches end of file first and wraps.Change
/loop 1only whencue.loop != 1./loop 0right after the new offset, so the end of that pass holds the last frame like a play-once cue.run_videoCuestill enables wraparound early for them).Testing
tests/test_loop_video_wraparound.py: play-once sends no/loop; a counted loop sends/loop 1then/loop 0after its last offset; an infinite loop never sends/loop 0. Run on test2 withtests/test_loop_rebase.pyandtests/test_loop_fade_cue.py: 14 passed. Againstrc_1'sloop_cue.pythe new file fails 2 of 3./loop 1is sent and the cue ends and hides normally.loop > 1) path. The full suite was not run.Not in this PR
Half the durations in the sala1 project are stored short by the old zero-padding bug (
cuems-editor-repair-durationsnot yet run there); those cues are cut early instead. Separate issue.