[FFmpeg-devel] [PATCH v11 1/5] avcodec/jpegxl: add Jpeg XL image codec and parser

Lynne dev at lynne.ee
Fri Apr 1 05:27:02 EEST 2022


1 Apr 2022, 04:13 by dev at lynne.ee:

> 1 Apr 2022, 02:20 by leo.izen at gmail.com:
>
>> This commit adds support to libavcodec to read and parse
>> encoded Jpeg XL images. Jpeg XL is intended to be an
>> extended-life replacement to legacy mjpeg.
>> ---
>>  MAINTAINERS                |   2 +
>>  libavcodec/Makefile        |   1 +
>>  libavcodec/codec_desc.c    |   9 +
>>  libavcodec/codec_id.h      |   1 +
>>  libavcodec/jpegxl.h        |  43 ++
>>  libavcodec/jpegxl_parser.c | 951 +++++++++++++++++++++++++++++++++++++ 
>> +        }
>> +    }
>> +    if (header->color_space == FF_JPEGXL_CS_GRAY) {
>> +        if (header->bits_per_sample <= 8)
>> +            return alpha ? AV_PIX_FMT_YA8 : AV_PIX_FMT_GRAY8;
>> +        if (header->bits_per_sample > 16 || header->exp_bits_per_sample)
>> +            return alpha ? AV_PIX_FMT_NONE : AV_PIX_FMT_GRAYF32;
>> +        return alpha ? AV_PIX_FMT_YA16 : AV_PIX_FMT_GRAY16;
>> +    } else if (header->color_space == FF_JPEGXL_CS_RGB
>> +            || header->color_space == FF_JPEGXL_CS_XYB) {
>> +        if (header->bits_per_sample <= 8)
>> +            return alpha ? AV_PIX_FMT_RGBA : AV_PIX_FMT_RGB24;
>> +        if (header->bits_per_sample > 16 || header->exp_bits_per_sample)
>> +            return alpha ? AV_PIX_FMT_GBRAPF32 : AV_PIX_FMT_GBRPF32;
>> +        return alpha ? AV_PIX_FMT_RGBA64 : AV_PIX_FMT_RGB48;
>> +    }
>> +    return AV_PIX_FMT_NONE;
>>
>
> YUV is supported, via the do_YCbCr flag in the spec. I think
> we ought to set the pixel format to YUV444P/16 in that case,
> as the codec requires YUV to be upsampled during decoding,
> and doing unnecessary colorspace conversions inside
> decoders is something we don't want.
> Decoders are free to change what the parser sets, so if
> users link to libjxl, then RGB will be reported as lavf will
> decode the first frame during probing.
> Otherwise, the native decoder would match what the parser
> reports and output YUV444-frames when signalled.
>

Come to think of it, we better output XYB instead of RGB.
But that can be changed later, for now I think it's fine if
the parser always reports either RGB or Gray, so this is fine as-is.


More information about the ffmpeg-devel mailing list