[FFmpeg-devel] Patch JPEG2000 Parser: Fix parsing of tile-part header

Jan Ekström jeebjp at gmail.com
Sat Jul 24 21:01:15 EEST 2021


On Wed, Jul 21, 2021 at 7:02 PM Shaun Simpson <shauns2029 at gmail.com> wrote:
>
> Please find my patch attached.
>
> libavcodec/jpeg2000_parser: Fix parsing of tile-part header, and frames
> where the end of frame marker is at the end of the buffer.
>
> Fixes playback of Sol Levante MXF JPEG2000 file:
> VIDEO_e4da5fcd-5ffc-4713-bcdd-95ea579d790b.mxf
>
> http://download.opencontent.netflix.com.s3.amazonaws.com/SolLevante/imf/SolLevante_IMF_DolbyVision_PQP3D65_UHD_24fps.zip
>
> Bug Summary:
> When playing back VIDEO_e4da5fcd-5ffc-4713-bcdd-95ea579d790b.mxf, I noticed
> a regression between release 4.2.4 and release 4.3.2. Release 4.3.2 skips
> some frames. This can be seen in the first 15 seconds of the video. The
> Netflix logo should fade out.
>
> This regression is in the master branch and was introduced by commit
> d09c356 which adds a JPEG2000 parser. I have also tested this patch against
> my 3 other JPEG2000 samples.
>
> The patches are against master branch 13ec662 and fix playback of this file.
>

First of all, thank you for poking at the j2k parser. I have seen
similar complaints from multiple people handling J2K in MXF, and after
linking these patches to such people they seem to fix the issue.

It also seems like it would make sense to have a minimal sample of
such bit stream type in our FATE test set so we can figure out if the
parsing of such streams fails in the future.

> 1. Fixed a off by one error when calculating the number of bytes to skip.
>
> 2. Added a 'continue' to the Tile part header reading, to skip the reaming
> paring code during a header read.
>
> 3. To deal with the end of frame tag being at the very end of the buffer,
> return the frame size during the current loop iteration.
>

As someone who unfortunately lacks the context for JPEG2000 bit
streams, can you give any pointers towards helping with review?

Also others may consider this as a flag that if there is JPEG2000 bit
stream knowledge about, you are free to poke at this one :) . It seems
to fix decoding properly.

> Is the PARSER_FLAG_COMPLETE_FRAMES flag supposed to be set for the Netflix
> sample? The files playback correctly if the flag is set, as each buffer
> contains a complete frame, but it is not set for the test case above.
>

It seems to be set if the AVStream's internal->need_parsing is set to
AVSTREAM_PARSE_HEADERS , which is the default behavior in
avformat/mxfdec.

Jan


More information about the ffmpeg-devel mailing list