summaryrefslogtreecommitdiffstats
path: root/sub/sd_ass.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-10-07 17:16:03 +0200
committerwm4 <wm4@nowhere>2013-10-07 17:21:53 +0200
commitde6eace6e984be3cd2515e9be6362a0cf04b7457 (patch)
tree04b8671b07e9d08aacbc5743623eac7474e2c83b /sub/sd_ass.c
parentccdaecfc5cc53b6c6ca3f46ca37ff74a36eb58dd (diff)
downloadmpv-de6eace6e984be3cd2515e9be6362a0cf04b7457.tar.bz2
mpv-de6eace6e984be3cd2515e9be6362a0cf04b7457.tar.xz
command: sub_seek: avoid getting stuck
First, don't try to seek if the result is 0 (i.e. nothing found, or subtitle event happens to be exactly on spot). Second, since we never can make sure that we actually seek to the exact subtitle PTS (seeking "snaps" to video PTS), offset the seek by 10ms. Since most subtitle events are longer than 10ms, this should work fine.
Diffstat (limited to 'sub/sd_ass.c')
-rw-r--r--sub/sd_ass.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/sub/sd_ass.c b/sub/sd_ass.c
index 7de0ab6c43..591f9d5105 100644
--- a/sub/sd_ass.c
+++ b/sub/sd_ass.c
@@ -289,8 +289,11 @@ static int control(struct sd *sd, enum sd_ctrl cmd, void *arg)
switch (cmd) {
case SD_CTRL_SUB_STEP: {
double *a = arg;
- a[0] = ass_step_sub(ctx->ass_track, a[0] * 1000 + .5, a[1]) / 1000.0;
- return CONTROL_OK;
+ long long res = ass_step_sub(ctx->ass_track, a[0] * 1000 + 0.5, a[1]);
+ if (!res)
+ return false;
+ a[0] = res / 1000.0;
+ return true;
case SD_CTRL_SET_VIDEO_PARAMS:
ctx->video_params = *(struct mp_image_params *)arg;
return CONTROL_OK;