@vosjs/studio-core 0.11.0 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -3960,6 +3960,15 @@ var ON_FRAME = `(ctx, content, dt) => {
3960
3960
  // range); the paused/seek path needs nothing \u2014 mapTime already lands srcT.
3961
3961
  var srcRate = TL.rateAt ? TL.rateAt(d.segments || [], t) : 1
3962
3962
  var playRate = Math.min(16, Math.max(0.0625, srcRate))
3963
+ // Where the FOOTAGE ends in output seconds. The output may outlast it
3964
+ // (clips placed after the footage), and a hold is a freeze piece whose
3965
+ // rate is tiny: in both the element must stay PAUSED on its frame. An
3966
+ // ended element's play() rewinds it to zero and the drift guard then
3967
+ // seeks it back, which reads as frames jumping back and forth; a hold
3968
+ // crawling at the clamped 1/16 speed toward that same end was the same
3969
+ // bug in slow motion.
3970
+ var footEnd = TL.totalDuration ? TL.totalDuration(d.segments || []) : Infinity
3971
+ var frozen = srcRate < 0.01 || t >= footEnd - 1e-3
3963
3972
  // Drive a <video> to the on-screen SOURCE moment: play natively while playing (drift
3964
3973
  // correction covers cut-boundary jumps), else step to the exact frame (registering a
3965
3974
  // decode promise so the deterministic export awaits it). Shared by the screen video
@@ -3967,7 +3976,7 @@ var ON_FRAME = `(ctx, content, dt) => {
3967
3976
  ${FRAME_STEP_SRC}
3968
3977
  function syncVid(vid) {
3969
3978
  try {
3970
- if (playing) {
3979
+ if (playing && !frozen) {
3971
3980
  if (vid.playbackRate !== playRate) {
3972
3981
  vid.playbackRate = playRate
3973
3982
  // Resampled (tape-style) speed, matching the export's offline mix.