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>
This commit is contained in:
Tomas Härdin 2012-03-07 10:03:16 +01:00 committed by Michael Niedermayer
parent 572c0ddc89
commit eb74e9ea10
1 changed files with 10 additions and 0 deletions

View File

@ -2002,11 +2002,17 @@ static int mxf_read_packet_old(AVFormatContext *s, AVPacket *pkt)
IS_KLV_KEY(klv.key, mxf_avid_essence_element_key)) { IS_KLV_KEY(klv.key, mxf_avid_essence_element_key)) {
int index = mxf_get_stream_index(s, &klv); int index = mxf_get_stream_index(s, &klv);
int64_t next_ofs, next_klv; int64_t next_ofs, next_klv;
AVStream *st;
MXFTrack *track;
if (index < 0) { if (index < 0) {
av_log(s, AV_LOG_ERROR, "error getting stream index %d\n", AV_RB32(klv.key+12)); av_log(s, AV_LOG_ERROR, "error getting stream index %d\n", AV_RB32(klv.key+12));
goto skip; goto skip;
} }
st = s->streams[index];
track = st->priv_data;
if (s->streams[index]->discard == AVDISCARD_ALL) if (s->streams[index]->discard == AVDISCARD_ALL)
goto skip; 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) { if (mxf->nb_index_tables >= 1 && mxf->current_edit_unit < t->nb_ptses) {
pkt->dts = mxf->current_edit_unit + t->first_dts; pkt->dts = mxf->current_edit_unit + t->first_dts;
pkt->pts = t->ptses[mxf->current_edit_unit]; 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;
} }
} }