summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorMarton Balint <cus@passwd.hu>2017-11-23 22:47:22 +0100
committerMarton Balint <cus@passwd.hu>2017-12-03 21:06:47 +0100
commit5a93a85fd0ad62c6c9cdf69415959f116c015f0e (patch)
tree2a380893664dfc2f50bcfb44fe4d65f1dea60246 /libavformat
parent6e3e696591483747d99d7fda8da1b7f1f7932cab (diff)
avformat/mxfdec: fix last packet timestamps
The current edit unit cannot be reliably determined for the last packet of a video stream, because we can't query the start offset of the next edit unit from the index. This caused missing timestamps for the last video packet. Therefore from now on, we allow setting the PTS even if we are not sure of the current edit unit if mxf_set_current_edit_unit returned a specific failure, and the assumed current edit unit is the last. Fixes last packet timestamp of: ffprobe -fflags nofillin -show_packets tests/data/lavf/lavf.mxf -select_streams v Signed-off-by: Marton Balint <cus@passwd.hu>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/mxfdec.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c
index 118e3e40b4..3b8d423906 100644
--- a/libavformat/mxfdec.c
+++ b/libavformat/mxfdec.c
@@ -2976,7 +2976,7 @@ static int64_t mxf_set_current_edit_unit(MXFContext *mxf, int64_t current_offset
/* find mxf->current_edit_unit so that the next edit unit starts ahead of current_offset */
while (mxf->current_edit_unit >= 0) {
if (mxf_edit_unit_absolute_offset(mxf, t, mxf->current_edit_unit + 1, NULL, &next_ofs, 0) < 0)
- return -1;
+ return -2;
if (next_ofs <= last_ofs) {
/* large next_ofs didn't change or current_edit_unit wrapped
@@ -3065,7 +3065,7 @@ static int mxf_set_pts(MXFContext *mxf, AVStream *st, AVPacket *pkt, int64_t nex
AVCodecParameters *par = st->codecpar;
MXFTrack *track = st->priv_data;
- if (par->codec_type == AVMEDIA_TYPE_VIDEO && next_ofs >= 0) {
+ if (par->codec_type == AVMEDIA_TYPE_VIDEO && (next_ofs >= 0 || next_ofs == -2 && st->duration == mxf->current_edit_unit + 1)) {
/* mxf->current_edit_unit good - see if we have an
* index table to derive timestamps from */
MXFIndexTable *t = &mxf->index_tables[0];