From 34ca5ae51d7d411a5a891521a79c1284e046bf2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomas=20H=C3=A4rdin?= Date: Wed, 7 Mar 2012 10:03:16 +0100 Subject: [PATCH] mxfdec: let pkt->pts = mxf->current_edit_unit if intra-only We cannot do this in general since we could be reading a file with B-frames while lacking an index. Signed-off-by: Michael Niedermayer Signed-off-by: Luca Barbato --- libavformat/mxfdec.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c index d10d5aa18c..43e5135e56 100644 --- a/libavformat/mxfdec.c +++ b/libavformat/mxfdec.c @@ -2000,11 +2000,17 @@ static int mxf_read_packet_old(AVFormatContext *s, AVPacket *pkt) IS_KLV_KEY(klv.key, mxf_avid_essence_element_key)) { int index = mxf_get_stream_index(s, &klv); int64_t next_ofs, next_klv; + AVStream *st; + MXFTrack *track; if (index < 0) { av_log(s, AV_LOG_ERROR, "error getting stream index %d\n", AV_RB32(klv.key+12)); goto skip; } + + st = s->streams[index]; + track = st->priv_data; + if (s->streams[index]->discard == AVDISCARD_ALL) goto skip; @@ -2046,6 +2052,11 @@ static int mxf_read_packet_old(AVFormatContext *s, AVPacket *pkt) mxf->current_edit_unit < t->nb_ptses) { pkt->dts = mxf->current_edit_unit + t->first_dts; pkt->pts = t->ptses[mxf->current_edit_unit]; + } else if (track->intra_only) { + /* intra-only -> PTS = EditUnit. + * let utils.c figure out DTS since it can be + * < PTS if low_delay = 0 (Sony IMX30) */ + pkt->pts = mxf->current_edit_unit; } }