Some files such as those from tickets #2817 & #2776 claim to have constant edit 
unit size but,
in fact, have some of them that are smaller. This confuses the demuxer that 
tries to infer the
current edit unit from the position in the file. By trying to increment the 
current edit unit
before rejecting the packet for this reason, we try to make it fit into its 
proper edit unit,
which fixes demuxing of those files while preserving the check for misprobed
OpAtom files.
Seeking is not accurate but the files provide no way to properly find the 
relevant edit unit.

Fixes tickets #2817 & #2776.
---
 libavformat/mxfdec.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c
index 593604e..526eca6 100644
--- a/libavformat/mxfdec.c
+++ b/libavformat/mxfdec.c
@@ -2956,6 +2956,18 @@ static int mxf_read_packet_old(AVFormatContext *s, 
AVPacket *pkt)
             next_ofs = mxf_set_current_edit_unit(mxf, klv.offset);
 
             if (next_ofs >= 0 && next_klv > next_ofs) {
+                /* Samples from tickets #2817 and #2776 claim to have
+                 * constant edit unit size. However, some of them are smaller.
+                 * Just after those smaller edit units, klv.offset is still in
+                 * the same edit unit according to the computations from the
+                 * constant edit unit size. If the klv finishes after, the next
+                 * check would truncate the packet and prevent proper demuxing.
+                 * Try to increment the current edit unit before doing that. */
+                mxf->current_edit_unit++;
+                next_ofs = mxf_set_current_edit_unit(mxf, klv.offset);
+            }
+
+            if (next_ofs >= 0 && next_klv > next_ofs) {
                 /* if this check is hit then it's possible OPAtom was treated 
as OP1a
                  * truncate the packet since it's probably very large (>2 GiB 
is common) */
                 avpriv_request_sample(s,
-- 
2.6.2

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to