[FFmpeg-devel] [PATCH 1/4] lavu/pixfmt: add AV_PIX_FMT_RGBA128
James Almer
jamrial at gmail.com
Tue Oct 15 04:50:23 EEST 2024
On 10/14/2024 10:41 PM, Lynne via ffmpeg-devel wrote:
> On 14/10/2024 17:24, James Almer wrote:
>> On 10/14/2024 12:11 PM, Lynne via ffmpeg-devel wrote:
>>> On 12/10/2024 01:01, Lynne wrote:
>>>> This format is useful for doing certain lossless transforms on images,
>>>> RCT in particular, which require you to escalate the size from 16 to
>>>> 32 bits to avoid overflows.
>>>>
>>>> APIchanges will be done alongside when comitting.
>>>> ---
>>>> libavutil/pixdesc.c | 27 +++++++++++++++++++++++++++
>>>> libavutil/pixfmt.h | 5 +++++
>>>> 2 files changed, 32 insertions(+)
>>>>
>>>> diff --git a/libavutil/pixdesc.c b/libavutil/pixdesc.c
>>>> index 43b9c08e14..8736e4f47d 100644
>>>> --- a/libavutil/pixdesc.c
>>>> +++ b/libavutil/pixdesc.c
>>>> @@ -2803,6 +2803,33 @@ static const AVPixFmtDescriptor
>>>> av_pix_fmt_descriptors[AV_PIX_FMT_NB] = {
>>>> .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_FLOAT |
>>>> AV_PIX_FMT_FLAG_ALPHA,
>>>> },
>>>> + [AV_PIX_FMT_RGBA128BE] = {
>>>> + .name = "rgba128be",
>>>> + .nb_components = 4,
>>>> + .log2_chroma_w = 0,
>>>> + .log2_chroma_h = 0,
>>>> + .comp = {
>>>> + { 0, 16, 0, 0, 32 }, /* R */
>>>> + { 0, 16, 4, 0, 32 }, /* G */
>>>> + { 0, 16, 8, 0, 32 }, /* B */
>>>> + { 0, 16, 12, 0, 32 }, /* A */
>>>> + },
>>>> + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB |
>>>> + AV_PIX_FMT_FLAG_ALPHA,
>>>> + },
>>>> + [AV_PIX_FMT_RGBA128LE] = {
>>>> + .name = "rgba128le",
>>>> + .nb_components = 4,
>>>> + .log2_chroma_w = 0,
>>>> + .log2_chroma_h = 0,
>>>> + .comp = {
>>>> + { 0, 16, 0, 0, 32 }, /* R */
>>>> + { 0, 16, 4, 0, 32 }, /* G */
>>>> + { 0, 16, 8, 0, 32 }, /* B */
>>>> + { 0, 16, 12, 0, 32 }, /* A */
>>>> + },
>>>> + .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
>>>> + },
>>>> [AV_PIX_FMT_P212BE] = {
>>>> .name = "p212be",
>>>> .nb_components = 3,
>>>> diff --git a/libavutil/pixfmt.h b/libavutil/pixfmt.h
>>>> index 3caa183ba0..f03e4d701d 100644
>>>> --- a/libavutil/pixfmt.h
>>>> +++ b/libavutil/pixfmt.h
>>>> @@ -448,6 +448,9 @@ enum AVPixelFormat {
>>>> AV_PIX_FMT_V30XBE, ///< packed VYUX 4:4:4 like XV30,
>>>> 32bpp, (msb)10V 10Y 10U 2X(lsb), big-endian
>>>> AV_PIX_FMT_V30XLE, ///< packed VYUX 4:4:4 like XV30,
>>>> 32bpp, (msb)10V 10Y 10U 2X(lsb), little-endian
>>>> + AV_PIX_FMT_RGBA128BE, ///< packed RGBA 32:32:32:32, 128bpp,
>>>> RGBARGBA..., big-endian
>>>> + AV_PIX_FMT_RGBA128LE, ///< packed RGBA 32:32:32:32, 128bpp,
>>>> RGBARGBA..., little-endian
>>>> +
>>>> AV_PIX_FMT_NB ///< number of pixel formats, DO NOT USE
>>>> THIS if you want to link with shared libav* because the number of
>>>> formats might differ between versions
>>>> };
>>>> @@ -558,6 +561,8 @@ enum AVPixelFormat {
>>>> #define AV_PIX_FMT_RGBF32 AV_PIX_FMT_NE(RGBF32BE, RGBF32LE)
>>>> #define AV_PIX_FMT_RGBAF32 AV_PIX_FMT_NE(RGBAF32BE, RGBAF32LE)
>>>> +#define AV_PIX_FMT_RGBA128 AV_PIX_FMT_NE(RGBA128BE, RGBA128LE)
>>>> +
>>>> /**
>>>> * Chromaticity coordinates of the source primaries.
>>>> * These values match the ones defined by ISO/IEC 23091-2_2019
>>>> subclause 8.1 and ITU-T H.273.
>>>
>>> Planning to push this patchset tomorrow unless there are comments.
>>
>> Support for these in swscale will require considerable changes afaics,
>> since they'd be the first non-float formats that use more than 16 bits
>> per component.
>
> I'm hoping that the rewrite/sws v2 will make this simpler.
> For now, do you have issues with this landing?
Not really. If they are useful without sws support then it's fine.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature.asc
Type: application/pgp-signature
Size: 495 bytes
Desc: OpenPGP digital signature
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20241014/34c8cb38/attachment.sig>
More information about the ffmpeg-devel
mailing list