[FFmpeg-cvslog] mxfdec: let pkt->pts = mxf->current_edit_unit if intra-only

Tomas Härdin git at videolan.org
Tue Jul 10 21:35:47 CEST 2012


ffmpeg | branch: master | Tomas Härdin <tomas.hardin at codemill.se> | Wed Mar  7 10:03:16 2012 +0100| [34ca5ae51d7d411a5a891521a79c1284e046bf2f] | committer: Luca Barbato

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 at gmx.at>
Signed-off-by: Luca Barbato <lu_zero at gentoo.org>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=34ca5ae51d7d411a5a891521a79c1284e046bf2f
---

 libavformat/mxfdec.c |   11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c
index d10d5aa..43e5135 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;
                 }
             }
 



More information about the ffmpeg-cvslog mailing list