diff options
Diffstat (limited to 'sub')
-rw-r--r-- | sub/dec_sub.h | 1 | ||||
-rw-r--r-- | sub/sd_ass.c | 16 |
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; } |