summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorTomas Härdin <tomas.hardin@codemill.se>2012-03-07 10:03:16 +0100
committerLuca Barbato <lu_zero@gentoo.org>2012-07-10 13:51:04 +0200
commit34ca5ae51d7d411a5a891521a79c1284e046bf2f (patch)
tree651757f943c247bdaaace04b8e5cd3ff1e2e28a6 /libavformat
parent634d670538738212d3143368b772e7ae11543906 (diff)
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 <michaelni@gmx.at> Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/mxfdec.c11
1 files changed, 11 insertions, 0 deletions
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;
}
}