summaryrefslogtreecommitdiffstats
path: root/player/sub.c
diff options
context:
space:
mode:
authorMartin Herkt <lachs0r@srsfckn.biz>2016-02-28 23:31:51 +0100
committerMartin Herkt <lachs0r@srsfckn.biz>2016-02-28 23:31:51 +0100
commit21cd4ff05bb46b375a9ad38c9f0b7f8e71a5d979 (patch)
treeb9679cc1d2c7c3cab0f88c370015f34f6d0b27ca /player/sub.c
parentd1d6257731866934717353fce484f5f472f845d1 (diff)
parent1f436f65f2ee4df6419ca68bd6426b8283db6d22 (diff)
downloadmpv-21cd4ff05bb46b375a9ad38c9f0b7f8e71a5d979.tar.bz2
mpv-21cd4ff05bb46b375a9ad38c9f0b7f8e71a5d979.tar.xz
Merge branch 'master' into release/current
Diffstat (limited to 'player/sub.c')
-rw-r--r--player/sub.c21
1 files changed, 8 insertions, 13 deletions
diff --git a/player/sub.c b/player/sub.c
index 6e707b3d95..6892ac935b 100644
--- a/player/sub.c
+++ b/player/sub.c
@@ -73,7 +73,6 @@ void uninit_sub(struct MPContext *mpctx, struct track *track)
int order = get_order(mpctx, track);
if (order >= 0 && order <= 1)
osd_set_sub(mpctx->osd, OSDTYPE_SUB + order, NULL);
- reselect_demux_streams(mpctx);
}
}
@@ -100,6 +99,14 @@ static bool update_subtitle(struct MPContext *mpctx, double video_pts,
video_pts -= opts->sub_delay;
+ if (!track->preloaded && track->demuxer->fully_read && !opts->sub_clear_on_seek)
+ {
+ // Assume fully_read implies no interleaved audio/video streams.
+ // (Reading packets will change the demuxer position.)
+ demux_seek(track->demuxer, 0, 0);
+ track->preloaded = sub_read_all_packets(track->d_sub);
+ }
+
if (!track->preloaded) {
if (!sub_read_packets(dec_sub, video_pts))
return false;
@@ -124,8 +131,6 @@ bool update_subtitles(struct MPContext *mpctx, double video_pts)
static bool init_subdec(struct MPContext *mpctx, struct track *track)
{
- struct MPOpts *opts = mpctx->opts;
-
assert(!track->d_sub);
if (!track->demuxer || !track->stream)
@@ -141,16 +146,6 @@ static bool init_subdec(struct MPContext *mpctx, struct track *track)
double fps = v_c ? v_c->fps : 25;
sub_control(track->d_sub, SD_CTRL_SET_VIDEO_DEF_FPS, &fps);
- // Don't do this if the file has video/audio streams. Don't do it even
- // if it has only sub streams, because reading packets will change the
- // demuxer position.
- if (track->is_external && !opts->sub_clear_on_seek) {
- demux_seek(track->demuxer, 0, SEEK_ABSOLUTE);
- track->preloaded = sub_read_all_packets(track->d_sub);
- if (track->preloaded)
- demux_stop_thread(track->demuxer);
- }
-
return true;
}