[vlc-commits] [Git][videolan/vlc][master] 5 commits: fourcc: add xRGB and BGRx codec/chroma

Steve Lhomme (@robUx4) gitlab at videolan.org
Thu Aug 24 13:16:37 UTC 2023



Steve Lhomme pushed to branch master at VideoLAN / VLC


Commits:
6847ba5e by Steve Lhomme at 2023-08-24T13:02:22+00:00
fourcc: add xRGB and BGRx codec/chroma

They are the common forms of VLC_CODEC_RGB32.

- - - - -
1b0c143b by Steve Lhomme at 2023-08-24T13:02:22+00:00
avcodec/chroma. map RGB+x formats to RGB+0 chromas

The libavutil formats will always be mapped to the VLC chromas without
a mask. VLC_CODEC_RGB32 will still be masked to libavutil chromas when
the mask matches or loosely if no mask matches.

- - - - -
3653f60e by Steve Lhomme at 2023-08-24T13:02:22+00:00
avcodec/fourcc: map RGB+x formats to AV_CODEC_ID_RAWVIDEO

Just like RGB+a formats.

- - - - -
3a5a9b68 by Steve Lhomme at 2023-08-24T13:02:22+00:00
mmal: map RGB+x chromas to MMAL formats

The mapping is based on the mask used for VLC_CODEC_RGB32.

- - - - -
0eedb80a by Steve Lhomme at 2023-08-24T13:02:22+00:00
yuv_rgb: map VLC_CODEC_RGBX like VLC_CODEC_RGB32 with the same mask

- - - - -


8 changed files:

- include/vlc_fourcc.h
- modules/codec/avcodec/chroma.c
- modules/codec/avcodec/fourcc.c
- modules/hw/mmal/mmal_picture.c
- modules/isa/arm/neon/yuv_rgb.c
- src/misc/es_format.c
- src/misc/fourcc.c
- src/misc/fourcc_list.h


Changes:

=====================================
include/vlc_fourcc.h
=====================================
@@ -356,6 +356,15 @@
 /* 24-bit RGB padded to 32 bits (using explicit masks) */
 #define VLC_CODEC_RGB32           VLC_FOURCC('R','V','3','2')
 
+/* 32-bit RGB, in memory address order: "XRGB" ignoring the x component */
+#define VLC_CODEC_XRGB            VLC_FOURCC('X','R','G','B')
+/* 32-bit RGB, in memory address order: "RGBX" ignoring the x component */
+#define VLC_CODEC_RGBX            VLC_FOURCC('R','G','B','X')
+/* 32-bit BGR, in memory address order: "BGRX" ignoring the x component */
+#define VLC_CODEC_BGRX            VLC_FOURCC('B','G','R','X')
+/* 32-bit BGR, in memory address order: "XBGR" ignoring the x component */
+#define VLC_CODEC_XBGR            VLC_FOURCC('X','B','G','R')
+
 /* 32-bit RGBA, in memory address order: "RGBA" */
 #define VLC_CODEC_RGBA            VLC_FOURCC('R','G','B','A')
 /* 32-bit ARGB, in memory address order: "ARGB" */


=====================================
modules/codec/avcodec/chroma.c
=====================================
@@ -149,6 +149,12 @@ static const struct
     VLC_RGB( VLC_CODEC_RGB15, AV_PIX_FMT_RGB555, AV_PIX_FMT_BGR555, 0x7c00, 0x03e0, 0x001f )
     VLC_RGB( VLC_CODEC_RGB16, AV_PIX_FMT_RGB565, AV_PIX_FMT_BGR565, 0xf800, 0x07e0, 0x001f )
     VLC_RGB( VLC_CODEC_RGB24, AV_PIX_FMT_RGB24, AV_PIX_FMT_BGR24, 0xff0000, 0x00ff00, 0x0000ff )
+
+    {VLC_CODEC_RGBX, AV_PIX_FMT_RGB0, 0, 0, 0 },
+    {VLC_CODEC_XRGB, AV_PIX_FMT_0RGB, 0, 0, 0 },
+    {VLC_CODEC_BGRX, AV_PIX_FMT_BGR0, 0, 0, 0 },
+    {VLC_CODEC_XBGR, AV_PIX_FMT_0BGR, 0, 0, 0 },
+
     VLC_RGB( VLC_CODEC_RGB32, AV_PIX_FMT_0RGB, AV_PIX_FMT_0BGR, 0x00ff0000, 0x0000ff00, 0x000000ff)
     VLC_RGB( VLC_CODEC_RGB32, AV_PIX_FMT_RGB0, AV_PIX_FMT_BGR0, 0xff000000, 0x00ff0000, 0x0000ff00)
 


=====================================
modules/codec/avcodec/fourcc.c
=====================================
@@ -68,6 +68,10 @@ static const struct vlc_avcodec_fourcc video_codecs[] =
     { VLC_CODEC_RGBA, AV_CODEC_ID_RAWVIDEO },
     { VLC_CODEC_ARGB, AV_CODEC_ID_RAWVIDEO },
     { VLC_CODEC_ABGR, AV_CODEC_ID_RAWVIDEO },
+    { VLC_CODEC_RGBX, AV_CODEC_ID_RAWVIDEO },
+    { VLC_CODEC_XRGB, AV_CODEC_ID_RAWVIDEO },
+    { VLC_CODEC_XBGR, AV_CODEC_ID_RAWVIDEO },
+    { VLC_CODEC_BGRX, AV_CODEC_ID_RAWVIDEO },
     { VLC_CODEC_DIV1, AV_CODEC_ID_MSMPEG4V1 },
     { VLC_CODEC_DIV2, AV_CODEC_ID_MSMPEG4V2 },
     { VLC_CODEC_DIV3, AV_CODEC_ID_MSMPEG4V3 },


=====================================
modules/hw/mmal/mmal_picture.c
=====================================
@@ -76,6 +76,14 @@ MMAL_FOURCC_T vlc_to_mmal_color_space(const video_color_space_t vlc_cs)
 MMAL_FOURCC_T vlc_to_mmal_video_fourcc(const video_frame_format_t * const vf_vlc)
 {
     switch (vf_vlc->i_chroma) {
+        case VLC_CODEC_BGRX:
+            return MMAL_ENCODING_BGRA;
+        case VLC_CODEC_RGBX:
+            return MMAL_ENCODING_RGBA;
+        case VLC_CODEC_XBGR:
+            return MMAL_ENCODING_ABGR;
+        case VLC_CODEC_XRGB:
+            return MMAL_ENCODING_ARGB;
         case VLC_CODEC_RGB32:
         {
             // VLC RGB32 aka RV32 means we have to look at the mask values


=====================================
modules/isa/arm/neon/yuv_rgb.c
=====================================
@@ -159,6 +159,8 @@ static int Open (filter_t *filter)
                     || filter->fmt_out.video.i_gmask != 0x0000ff00
                     || filter->fmt_out.video.i_bmask != 0x00ff0000 )
                 return VLC_EGENERIC;
+            /* fallthrough */
+        case VLC_CODEC_RGBX:
 
             switch (filter->fmt_in.video.i_chroma)
             {


=====================================
src/misc/es_format.c
=====================================
@@ -144,6 +144,10 @@ void video_format_Setup( video_format_t *p_fmt, vlc_fourcc_t i_chroma,
     case VLC_CODEC_ARGB:
     case VLC_CODEC_BGRA:
     case VLC_CODEC_ABGR:
+    case VLC_CODEC_RGBX:
+    case VLC_CODEC_XRGB:
+    case VLC_CODEC_BGRX:
+    case VLC_CODEC_XBGR:
         p_fmt->i_bits_per_pixel = 32;
         break;
     case VLC_CODEC_RGB24:


=====================================
src/misc/fourcc.c
=====================================
@@ -805,6 +805,8 @@ static const struct
     { { VLC_CODEC_RGB16, 0 },                  PACKED_FMT(2, 16) },
     { { VLC_CODEC_RGB24, 0 },                  PACKED_FMT(3, 24) },
     { { VLC_CODEC_RGB32, 0 },                  PACKED_FMT(4, 24) },
+    { { VLC_CODEC_RGBX, VLC_CODEC_XRGB,
+        VLC_CODEC_BGRX, VLC_CODEC_XBGR },      PACKED_FMT(4, 24) },
     { { VLC_CODEC_RGBA, VLC_CODEC_ARGB,
         VLC_CODEC_BGRA, VLC_CODEC_ABGR },      PACKED_FMT(4, 32) },
     { { VLC_CODEC_RGBA10 },                    PACKED_FMT(4, 32) },


=====================================
src/misc/fourcc_list.h
=====================================
@@ -829,6 +829,14 @@ static const staticentry_t p_list_video[] = {
         A("RGA0"),
     B(VLC_CODEC_RGBA64, "64 bits RGBA"),
         A("RGA4"),
+    B(VLC_CODEC_XRGB, "32 bits xRGB"),
+        A("XRGB"),
+    B(VLC_CODEC_RGBX, "32 bits RGBx"),
+        A("RGBX"),
+    B(VLC_CODEC_XBGR, "32 bits xBGR"),
+        A("XBGR"),
+    B(VLC_CODEC_BGRX, "32 bits BGRx"),
+        A("BGRX"),
 
     B(VLC_CODEC_GREY, "8 bits greyscale"),
         A("GREY"),



View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/50687096c20fbeb79bd1f689a0b901e87acc1afc...0eedb80ae6bc6887c133efebcc85d4cb79ba11b8

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/50687096c20fbeb79bd1f689a0b901e87acc1afc...0eedb80ae6bc6887c133efebcc85d4cb79ba11b8
You're receiving this email because of your account on code.videolan.org.


VideoLAN code repository instance


More information about the vlc-commits mailing list