diff options
-rw-r--r-- | core/mplayer.c | 2 | ||||
-rw-r--r-- | sub/sd_lavc.c | 8 |
2 files changed, 8 insertions, 2 deletions
diff --git a/core/mplayer.c b/core/mplayer.c index 3e58279b51..e18acf9eac 100644 --- a/core/mplayer.c +++ b/core/mplayer.c @@ -1839,7 +1839,7 @@ static void update_subtitles(struct MPContext *mpctx, double refpts_tl) while (d_sub->first) { double subpts_s = ds_get_next_pts(d_sub); if (subpts_s > curpts_s) { - mp_dbg(MSGT_CPLAYER, MSGL_V, + mp_dbg(MSGT_CPLAYER, MSGL_DBG2, "Sub early: c_pts=%5.3f s_pts=%5.3f\n", curpts_s, subpts_s); // Libass handled subs can be fed to it in advance diff --git a/sub/sd_lavc.c b/sub/sd_lavc.c index fbffc175d4..f1f93b480e 100644 --- a/sub/sd_lavc.c +++ b/sub/sd_lavc.c @@ -36,6 +36,7 @@ struct sd_lavc_priv { struct sub_bitmap *outbitmaps; struct osd_bmp_indexed *imgs; bool bitmaps_changed; + double pts; double endpts; }; @@ -107,6 +108,7 @@ static void clear(struct sd_lavc_priv *priv) talloc_free(priv->imgs); priv->imgs = NULL; priv->bitmaps_changed = true; + priv->pts = MP_NOPTS_VALUE; priv->endpts = MP_NOPTS_VALUE; if (priv->have_sub) avsubtitle_free(&priv->sub); @@ -165,6 +167,7 @@ static void decode(struct sh_sub *sh, struct osd_state *osd, void *data, b->y = r->y; } priv->count = sub.num_rects; + priv->pts = pts; priv->endpts = endpts; break; default: @@ -181,6 +184,8 @@ static void get_bitmaps(struct sh_sub *sh, struct osd_state *osd, { struct sd_lavc_priv *priv = sh->context; + if (priv->pts != MP_NOPTS_VALUE && pts < priv->pts) + return; if (priv->endpts != MP_NOPTS_VALUE && (pts >= priv->endpts || pts < priv->endpts - 300)) clear(priv); @@ -213,7 +218,8 @@ static void reset(struct sh_sub *sh, struct osd_state *osd) { struct sd_lavc_priv *priv = sh->context; - clear(priv); + if (priv->pts == MP_NOPTS_VALUE) + clear(priv); // lavc might not do this right for all codecs; may need close+reopen avcodec_flush_buffers(priv->avctx); } |