summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuido Cella <guido@guidocella.xyz>2024-02-18 13:31:01 +0100
committersfan5 <sfan5@live.de>2024-02-23 21:37:22 +0100
commitb35e34ae2ff8066e998191a02472a298e3266404 (patch)
tree145e1f4f14d9b3271fbfa2b09cd72980ee0d5583
parentb564d5916ee200c70cccb5ae77c677f5ce74dba0 (diff)
downloadmpv-b35e34ae2ff8066e998191a02472a298e3266404.tar.bz2
mpv-b35e34ae2ff8066e998191a02472a298e3266404.tar.xz
command: fix sub-seek while paused without a video
When using sub-seek without a video track while paused, adding the 0.01 SUB_SEEK_OFFSET to the new timestamp is not enough to show the new subtitle line. Add 0.1 instead to fix it. 0.01 is already enough for sub-step.
-rw-r--r--player/command.c8
-rw-r--r--sub/sd.h1
2 files changed, 9 insertions, 0 deletions
diff --git a/player/command.c b/player/command.c
index 712c081d04..e81874010b 100644
--- a/player/command.c
+++ b/player/command.c
@@ -5445,6 +5445,14 @@ static void cmd_sub_step_seek(void *p)
track_ind == 0 ? "sub-delay" : "secondary-sub-delay",
cmd->on_osd);
} else {
+ // We can easily seek/step to the wrong subtitle line (because
+ // video frame PTS and sub PTS rarely match exactly).
+ // sub/sd_ass.c adds SUB_SEEK_OFFSET as a workaround, and we
+ // need an even bigger offset without a video.
+ if (!mpctx->current_track[0][STREAM_VIDEO] ||
+ mpctx->current_track[0][STREAM_VIDEO]->image) {
+ a[0] += SUB_SEEK_WITHOUT_VIDEO_OFFSET - SUB_SEEK_OFFSET;
+ }
mark_seek(mpctx);
queue_seek(mpctx, MPSEEK_ABSOLUTE, a[0], MPSEEK_EXACT,
MPSEEK_FLAG_DELAY);
diff --git a/sub/sd.h b/sub/sd.h
index f130b94751..459e8c07e9 100644
--- a/sub/sd.h
+++ b/sub/sd.h
@@ -11,6 +11,7 @@
#define SUB_GAP_KEEP 0.4
// slight offset when sub seeking or sub stepping
#define SUB_SEEK_OFFSET 0.01
+#define SUB_SEEK_WITHOUT_VIDEO_OFFSET 0.1
struct sd {
struct mpv_global *global;