[FFmpeg-devel] [PATCH v2] avcodec/jpeg2000dec: support of 2 fields in 1 AVPacket

Jerome Martinez jerome at mediaarea.net
Wed Apr 24 14:20:02 EEST 2024


Hi, I'm bumping this patch proposal for avoiding a situation where 
FFmpeg skips half the visual content when 2 jpeg2000 codestreams are 
present in one frame. I re-reviewed this discussion and think I answered 
all concerns. I'm hesitant with patch v3 because I consider that 
touching frame_worker_thread for this feature is not so useful but I am 
ok with either patch v2 or v3.
Thanks much,
     Jérôme

On 20/02/2024 16:07, Jerome Martinez wrote:
> Attached is an updated version of the patch proposal.
>
> About the idea to keep separate fields in the output AVFrame, I note 
> from the discussion that it is commonly accepted that up to now it is 
> expected that the AVPacket contains what is in the MXF element and 
> that the AVFrame contains a frame and never a field, and additionally 
> I see in e.g. mpeg12dec.c that the decoder interleaves separate fields:
> mb_y <<= field_pic;
> if (s2->picture_structure == PICT_BOTTOM_FIELD)
>     mb_y++;
> And mpegvideo_parser.c creates a AVPacket with both fields in AVPacket 
> even if they are separated, this patch keeps the AVPacket from e.g. 
> MXF with both fields in it and does something similar to what do other 
> decoders with separate fields in the output AVFRame.
>
> About the detection of the 2 separated fields in 1 packet in the MXF 
> file (I2 mode), it is doable in the example file provided in the first 
> patch proposal to catch it by checking the essence label but other 
> files I have don't have the specific essence label (they use the 
> "undefined" essence label, legit) so IMO we should not rely on it and 
> there is actually no practical advantage in catching that from the 
> container.
>
> In practice this new patch proposal is slightly more complex, with one 
> recursive call to jpeg2000_decode_frame() when there are 2 codestreams 
> in 1 AVPacket, but it has a negligible performance impact (few 
> comparisons and bool checks) when there is only one codestream in the 
> AVPacket (the currently only supported method, remind that currently 
> FFmpeg completely discards the 2nd codestream present in the AVPacket) 
> and it relies on the current jpeg2000_read_main_headers() function for 
> catching the end of the first codestream (safer than the quick find of 
> EOC/SOC in the first version).
>
> It also changes the jpeg2000_decode_frame return value to the count of 
> bytes parsed, it seems that it was what is expected but in practice it 
> was not doing that, fixing the return value could be a separate patch 
> if preferred.
>
> Jérôme
>
> On 02/02/2024 16:55, Jerome Martinez wrote:
>> Before this patch, the FFmpeg MXF parser correctly detects content 
>> with 2 fields in 1 AVPacket as e.g. interlaced 720x486 but the FFmpeg 
>> JPEG 2000 decoder reads the JPEG 2000 SIZ header without 
>> understanding that the indicated height is the height of 1 field only 
>> so overwrites the frame size info with e.g. 720x243, and also 
>> completely discards the second frame, which lead to the decoding of 
>> only half of the stored content as "progressive" 720x243 flagged 
>> interlaced.
>>
>> Example file:
>> https://www.digitizationguidelines.gov/guidelines/MXF_sampleFiles/RDD48-sample12-gf-jpeg2000-ntsc-4.2.zip 
>>
>>
>> Before this patch:
>> Stream #0:0: Video: jpeg2000, yuv422p10le(bottom coded first 
>> (swapped)), 720x243, lossless, SAR 9:20 DAR 4:3, 29.97 tbr, 29.97 
>> tbn, 29.97 tbc
>>
>> After this patch:
>> Stream #0:0: Video: jpeg2000, yuv422p10le(bottom coded first 
>> (swapped)), 720x486, lossless, SAR 9:10 DAR 4:3, 29.97 fps, 29.97 
>> tbr, 29.97 tbn
>>
>> _______________________________________________
>> ffmpeg-devel mailing list
>> ffmpeg-devel at ffmpeg.org
>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>
>> To unsubscribe, visit link above, or email
>> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".




More information about the ffmpeg-devel mailing list