[FFmpeg-devel] Two problems with MPEG2 decoder

Joseph Artsimovich joseph at mirriad.com
Tue Feb 26 15:16:34 CET 2013


Hi,

I uploaded a sample here: http://rghost.net/44123751
It's XDCAM HD 422 (a variant of MPEG2) in a .mov container. It was cut 
from a larger file we received from a client. I don't know which 
software generated it (the vendor fourcc in the original is filled with 
zeros), but it's something from broadcasting environment.

The file plays fine in Apple's QuickTime player using a demo version of 
CalibratedQ XD Decode plugin.
FFMpeg on the other hand has 2 issues with it:

1. Artifacts in the bottom area and errors on the console:
[mpeg2video @ 0x1e55140] end mismatch left=299 60E2
[mpeg2video @ 0x1e55140] Warning MVs not available
I can get rid of both artifacts and errors if I force the value of 
is_d10 variable to 1 in mpeg_decode_slice() in mpeg12.c
That's obviously a hack, as this format is not D10.

2. One of the frames fails to decode.
The frame in question is frame 16 (counting from 0, ignoring the edit 
list and 2 initial B-frames that can't be decoded as the stream is open 
GOP).
If you use ffmpeg to convert the file to another format:
ffmpeg -i segment.mov -an -vcodec qtrle out.mov
You'll get a duplicated frame in positions 16 and 17.
Now, it turns out the frame that fails to decode has a redundant (and 
probably invalid) second picture header in MPEG2 stream. That is, the 
frame is encoded as a single picture, yet it has 2 picture headers. If I 
modify the code to ignore the second picture header, like this:
         case PICTURE_START_CODE:
+            if (picture_start_code_seen) {
+               break;
+            } else {
+               picture_start_code_seen = 1;
+            }
[in decode_chunks() in mpeg12.c; variable initialization not shown]
Then the frame in question decodes fine.
The code above is again just a hack, as a frame can be encoded with more 
than one pictures.

I hope someone can figure out the proper solutions to these 2 problems.


-- 
Joseph Artsimovich
Senior C++ Applications Developer
MirriAd Ltd


More information about the ffmpeg-devel mailing list