diff options
-rw-r--r-- | player/audio.c | 6 | ||||
-rw-r--r-- | player/playloop.c | 3 | ||||
-rw-r--r-- | player/sub.c | 4 | ||||
-rw-r--r-- | player/video.c | 6 |
4 files changed, 14 insertions, 5 deletions
diff --git a/player/audio.c b/player/audio.c index d56b97c5ba..881d74a904 100644 --- a/player/audio.c +++ b/player/audio.c @@ -187,8 +187,12 @@ static void ao_chain_reset_state(struct ao_chain *ao_c) void reset_audio_state(struct MPContext *mpctx) { - if (mpctx->ao_chain) + if (mpctx->ao_chain) { ao_chain_reset_state(mpctx->ao_chain); + struct track *t = mpctx->ao_chain->track; + if (t && t->dec) + t->dec->play_dir = mpctx->play_dir; + } mpctx->audio_status = mpctx->ao_chain ? STATUS_SYNCING : STATUS_EOF; mpctx->delay = 0; mpctx->audio_drop_throttle = 0; diff --git a/player/playloop.c b/player/playloop.c index c415e5a90d..7ff82347bd 100644 --- a/player/playloop.c +++ b/player/playloop.c @@ -226,10 +226,9 @@ void reset_playback_state(struct MPContext *mpctx) for (int n = 0; n < mpctx->num_tracks; n++) { struct track *t = mpctx->tracks[n]; + // (Often, but not always, this is redundant and also done elsewhere.) if (t->dec) t->dec->play_dir = mpctx->play_dir; - if (t->d_sub) - sub_set_play_dir(t->d_sub, mpctx->play_dir); } mpctx->hrseek_active = false; diff --git a/player/sub.c b/player/sub.c index 40e7aba30f..12a9696227 100644 --- a/player/sub.c +++ b/player/sub.c @@ -48,8 +48,10 @@ static int get_order(struct MPContext *mpctx, struct track *track) static void reset_subtitles(struct MPContext *mpctx, struct track *track) { - if (track->d_sub) + if (track->d_sub) { sub_reset(track->d_sub); + sub_set_play_dir(track->d_sub, mpctx->play_dir); + } term_osd_set_subs(mpctx, NULL); } diff --git a/player/video.c b/player/video.c index dd48e0a529..58115081d1 100644 --- a/player/video.c +++ b/player/video.c @@ -95,8 +95,12 @@ static void vo_chain_reset_state(struct vo_chain *vo_c) void reset_video_state(struct MPContext *mpctx) { - if (mpctx->vo_chain) + if (mpctx->vo_chain) { vo_chain_reset_state(mpctx->vo_chain); + struct track *t = mpctx->vo_chain->track; + if (t && t->dec) + t->dec->play_dir = mpctx->play_dir; + } for (int n = 0; n < mpctx->num_next_frames; n++) mp_image_unrefp(&mpctx->next_frames[n]); |