summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sub/dec_sub.c10
-rw-r--r--sub/sd_ass.c4
2 files changed, 13 insertions, 1 deletions
diff --git a/sub/dec_sub.c b/sub/dec_sub.c
index 958b92d48a..0fed1e668f 100644
--- a/sub/dec_sub.c
+++ b/sub/dec_sub.c
@@ -421,10 +421,18 @@ int sub_control(struct dec_sub *sub, enum sd_ctrl cmd, void *arg)
if (r == CONTROL_OK)
a[0] = pts_from_subtitle(sub, arg2[0]);
break;
- case SD_CTRL_UPDATE_OPTS:
+ }
+ case SD_CTRL_UPDATE_OPTS: {
+ int flags = (uintptr_t)arg;
if (m_config_cache_update(sub->opts_cache))
update_subtitle_speed(sub);
propagate = true;
+ if (flags & UPDATE_SUB_HARD) {
+ // forget about the previous preload because
+ // UPDATE_SUB_HARD will cause a sub reinit
+ // that clears all preloaded sub packets
+ sub->preload_attempted = false;
+ }
break;
}
default:
diff --git a/sub/sd_ass.c b/sub/sd_ass.c
index 34dc567e54..bec989fee7 100644
--- a/sub/sd_ass.c
+++ b/sub/sd_ass.c
@@ -824,6 +824,10 @@ static int control(struct sd *sd, enum sd_ctrl cmd, void *arg)
ctx->clear_once = true; // allow reloading on seeks
}
if (flags & UPDATE_SUB_HARD) {
+ // ass_track will be recreated, so clear duplicate cache
+ ctx->clear_once = true;
+ reset(sd);
+
assobjects_destroy(sd);
assobjects_init(sd);
}