diff options
author | Tomas Härdin <tomas.hardin@codemill.se> | 2012-03-07 10:03:16 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-03-18 19:57:01 +0100 |
commit | eb74e9ea10f64704ee45e5da7baf6c100a2a88f7 (patch) | |
tree | 2ee29b4061ddc303e3acad6ed4504d86404fa777 /libavformat/mxfdec.c | |
parent | 572c0ddc89709035cb733da870aa50373ffbd7e1 (diff) | |
download | ffmpeg-eb74e9ea10f64704ee45e5da7baf6c100a2a88f7.tar.gz |
mxfdec: Let pkt->pts = mxf->current_edit_unit if intra-only
We can't do this in general since we could be reading a file with B-frames while
lacking an index.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat/mxfdec.c')
-rw-r--r-- | libavformat/mxfdec.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c index 3d99ea7624..07ac9fbd52 100644 --- a/libavformat/mxfdec.c +++ b/libavformat/mxfdec.c @@ -2002,11 +2002,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; @@ -2043,6 +2049,10 @@ static int mxf_read_packet_old(AVFormatContext *s, AVPacket *pkt) if (mxf->nb_index_tables >= 1 && 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; } } |