summaryrefslogtreecommitdiffstats
path: root/sub
diff options
context:
space:
mode:
Diffstat (limited to 'sub')
-rw-r--r--sub/dec_sub.h1
-rw-r--r--sub/sd_ass.c16
2 files changed, 13 insertions, 4 deletions
diff --git a/sub/dec_sub.h b/sub/dec_sub.h
index 40a882c9f0..53b42e484e 100644
--- a/sub/dec_sub.h
+++ b/sub/dec_sub.h
@@ -22,6 +22,7 @@ enum sd_ctrl {
SD_CTRL_SET_VIDEO_PARAMS,
SD_CTRL_GET_RESOLUTION,
SD_CTRL_SET_TOP,
+ SD_CTRL_CLEAR,
};
struct dec_sub *sub_create(struct mpv_global *global);
diff --git a/sub/sd_ass.c b/sub/sd_ass.c
index 16275207b7..88aebe8c6a 100644
--- a/sub/sd_ass.c
+++ b/sub/sd_ass.c
@@ -510,13 +510,18 @@ static void fill_plaintext(struct sd *sd, double pts)
track->styles[track->default_style].Alignment = ctx->on_top ? 6 : 2;
}
+static void clear(struct sd *sd)
+{
+ struct sd_ass_priv *ctx = sd->priv;
+ ass_flush_events(ctx->ass_track);
+ ctx->num_seen_packets = 0;
+}
+
static void reset(struct sd *sd)
{
struct sd_ass_priv *ctx = sd->priv;
- if (sd->opts->sub_clear_on_seek) {
- ass_flush_events(ctx->ass_track);
- ctx->num_seen_packets = 0;
- }
+ if (sd->opts->sub_clear_on_seek)
+ clear(sd);
if (ctx->converter)
lavc_conv_reset(ctx->converter);
}
@@ -549,6 +554,9 @@ static int control(struct sd *sd, enum sd_ctrl cmd, void *arg)
case SD_CTRL_SET_TOP:
ctx->on_top = *(bool *)arg;
return CONTROL_OK;
+ case SD_CTRL_CLEAR:
+ clear(sd);
+ return CONTROL_OK;
default:
return CONTROL_UNKNOWN;
}