diff mbox

[FFmpeg-devel] lavd/v4l2: Add ARGB and XRGB packed pixel formats

Message ID 20180508131113.9120-1-aleontiev@elvees.com
State Superseded
Headers show

Commit Message

Anton Leontiev May 8, 2018, 1:11 p.m. UTC
Formats ARGB32, XRGB32, ABGR32, and XBGR32 were added to V4L2 instead
of ill-defined deprecated RGB32/BGR32 pixel formats.

When pixel format is not specified explicitly FFmpeg tries formats in
order in which they are stored in the table. Therefore formats are
sorted as follows: BGR is preferred over RGB and XBGR is preferred
over ARGB, because it could give better performance by ignoring alpha
component.
---
 libavdevice/v4l2-common.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Carl Eugen Hoyos May 8, 2018, 9:55 p.m. UTC | #1
2018-05-08 15:11 GMT+02:00, Anton Leontiev <aleontiev@elvees.com>:
> Formats ARGB32, XRGB32, ABGR32, and XBGR32 were added to
> V4L2 instead of ill-defined deprecated RGB32/BGR32 pixel formats.

Just curious because I am quite sure I tested them:
Why / how are they ill-defined?

[...]

> diff --git a/libavdevice/v4l2-common.c b/libavdevice/v4l2-common.c
> index 196c09b7fc..d48ae2efa1 100644
> --- a/libavdevice/v4l2-common.c
> +++ b/libavdevice/v4l2-common.c
> @@ -34,6 +34,10 @@ const struct fmt_map ff_fmt_conversion_table[] = {
>      { AV_PIX_FMT_RGB565BE,AV_CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_RGB565X },
>      { AV_PIX_FMT_BGR24,   AV_CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_BGR24   },
>      { AV_PIX_FMT_RGB24,   AV_CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_RGB24   },
> +    { AV_PIX_FMT_BGR0,    AV_CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_XBGR32  },
> +    { AV_PIX_FMT_0RGB,    AV_CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_XRGB32  },
> +    { AV_PIX_FMT_BGRA,    AV_CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_ABGR32  },
> +    { AV_PIX_FMT_ARGB,    AV_CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_ARGB32  },

Needs an "#ifdef" guard like below.

Thank you, Carl Eugen
Anton Leontiev May 10, 2018, 8:42 a.m. UTC | #2
> 2018-05-08 15:11 GMT+02:00, Anton Leontiev <aleontiev@elvees.com>:
>> Formats ARGB32, XRGB32, ABGR32, and XBGR32 were added to
>> V4L2 instead of ill-defined deprecated RGB32/BGR32 pixel formats.
>
> Just curious because I am quite sure I tested them:
> Why / how are they ill-defined?

According to [1-2]:

  The meaning of their alpha bits (a) are ill-defined and interpreted as in
  either the corresponding ARGB or XRGB format, depending on the driver.

[1] https://git.kernel.org/torvalds/c/977ff0e4fb3460d
[2] https://www.kernel.org/doc/html/latest/media/uapi/v4l/pixfmt-packed-rgb.html

>> diff --git a/libavdevice/v4l2-common.c b/libavdevice/v4l2-common.c
>> index 196c09b7fc..d48ae2efa1 100644
>> --- a/libavdevice/v4l2-common.c
>> +++ b/libavdevice/v4l2-common.c
>> @@ -34,6 +34,10 @@ const struct fmt_map ff_fmt_conversion_table[] = {
>>      { AV_PIX_FMT_RGB565BE,AV_CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_RGB565X },
>>      { AV_PIX_FMT_BGR24,   AV_CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_BGR24   },
>>      { AV_PIX_FMT_RGB24,   AV_CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_RGB24   },
>> +    { AV_PIX_FMT_BGR0,    AV_CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_XBGR32  },
>> +    { AV_PIX_FMT_0RGB,    AV_CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_XRGB32  },
>> +    { AV_PIX_FMT_BGRA,    AV_CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_ABGR32  },
>> +    { AV_PIX_FMT_ARGB,    AV_CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_ARGB32  },
>
> Needs an "#ifdef" guard like below.

Will add in the next version. Thank you for review.

Best regards,
diff mbox

Patch

diff --git a/libavdevice/v4l2-common.c b/libavdevice/v4l2-common.c
index 196c09b7fc..d48ae2efa1 100644
--- a/libavdevice/v4l2-common.c
+++ b/libavdevice/v4l2-common.c
@@ -34,6 +34,10 @@  const struct fmt_map ff_fmt_conversion_table[] = {
     { AV_PIX_FMT_RGB565BE,AV_CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_RGB565X },
     { AV_PIX_FMT_BGR24,   AV_CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_BGR24   },
     { AV_PIX_FMT_RGB24,   AV_CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_RGB24   },
+    { AV_PIX_FMT_BGR0,    AV_CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_XBGR32  },
+    { AV_PIX_FMT_0RGB,    AV_CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_XRGB32  },
+    { AV_PIX_FMT_BGRA,    AV_CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_ABGR32  },
+    { AV_PIX_FMT_ARGB,    AV_CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_ARGB32  },
     { AV_PIX_FMT_BGR0,    AV_CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_BGR32   },
     { AV_PIX_FMT_0RGB,    AV_CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_RGB32   },
     { AV_PIX_FMT_GRAY8,   AV_CODEC_ID_RAWVIDEO, V4L2_PIX_FMT_GREY    },