summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-12-12 23:36:52 +0100
committerwm4 <wm4@nowhere>2013-12-12 23:43:34 +0100
commite66e16e691ac7bd5a70faa88259bfd9fe9ada651 (patch)
tree309e6056410357fbb431ef983cdcd6685059dbb5
parent49f92911649612887c918759c6e0f2f1657e24f2 (diff)
downloadmpv-e66e16e691ac7bd5a70faa88259bfd9fe9ada651.tar.bz2
mpv-e66e16e691ac7bd5a70faa88259bfd9fe9ada651.tar.xz
demux_lavf: fix timebase confusion
This set last_pts to bogus values, which is used for relative seeks. The player usually uses absolute seeks, so this didn't matter much.
-rw-r--r--demux/demux_lavf.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c
index 8f9c49a618..357e173322 100644
--- a/demux/demux_lavf.c
+++ b/demux/demux_lavf.c
@@ -709,15 +709,10 @@ static int demux_lavf_fill_buffer(demuxer_t *demux)
dp = new_demux_packet_fromdata(pkt->data, pkt->size);
dp->avpacket = talloc_steal(dp, pkt);
- if (pkt->pts != AV_NOPTS_VALUE) {
+ if (pkt->pts != AV_NOPTS_VALUE)
dp->pts = pkt->pts * av_q2d(st->time_base);
- priv->last_pts = dp->pts;
- }
- if (pkt->dts != AV_NOPTS_VALUE) {
+ if (pkt->dts != AV_NOPTS_VALUE)
dp->dts = pkt->dts * av_q2d(st->time_base);
- if (priv->last_pts == AV_NOPTS_VALUE)
- priv->last_pts = pkt->dts;
- }
dp->duration = pkt->duration * av_q2d(st->time_base);
if (pkt->convergence_duration > 0)
dp->duration = pkt->convergence_duration * av_q2d(st->time_base);
@@ -729,6 +724,11 @@ static int demux_lavf_fill_buffer(demuxer_t *demux)
if (stream_control(demux->stream, STREAM_CTRL_GET_CURRENT_TIME, &pts) > 0)
dp->stream_pts = pts;
}
+ if (dp->pts != MP_NOPTS_VALUE) {
+ priv->last_pts = dp->pts * AV_TIME_BASE;
+ } else if (dp->dts != MP_NOPTS_VALUE) {
+ priv->last_pts = dp->dts * AV_TIME_BASE;
+ }
demuxer_add_packet(demux, stream, dp);
return 1;
}