[vlc-devel] [PATCH 5/8] dxgi_fmt: return the VLC FourCC matching DXGI format when available

Steve Lhomme robux4 at videolabs.io
Tue Sep 6 11:52:37 CEST 2016


---
 modules/video_chroma/dxgi_fmt.c | 52 +++++++++++++++++++++++++----------------
 modules/video_chroma/dxgi_fmt.h |  1 +
 2 files changed, 33 insertions(+), 20 deletions(-)

diff --git a/modules/video_chroma/dxgi_fmt.c b/modules/video_chroma/dxgi_fmt.c
index 27e989c..24bce46 100644
--- a/modules/video_chroma/dxgi_fmt.c
+++ b/modules/video_chroma/dxgi_fmt.c
@@ -31,30 +31,32 @@ typedef struct
 {
     const char   *name;
     DXGI_FORMAT  format;
+    vlc_fourcc_t vlc_format;
 } dxgi_format_t;
 
 static const dxgi_format_t dxgi_formats[] = {
-    { "NV12",        DXGI_FORMAT_NV12                },
-    { "I420_OPAQUE", DXGI_FORMAT_420_OPAQUE          },
-    { "RGBA",        DXGI_FORMAT_R8G8B8A8_UNORM      },
-    { "RGBA_SRGB",   DXGI_FORMAT_R8G8B8A8_UNORM_SRGB },
-    { "BGRX",        DXGI_FORMAT_B8G8R8X8_UNORM      },
-    { "BGRA",        DXGI_FORMAT_B8G8R8A8_UNORM      },
-    { "BGRA_SRGB",   DXGI_FORMAT_B8G8R8A8_UNORM_SRGB },
-    { "AYUV",        DXGI_FORMAT_AYUV                },
-    { "YUY2",        DXGI_FORMAT_YUY2                },
-    { "AI44",        DXGI_FORMAT_AI44                },
-    { "P8",          DXGI_FORMAT_P8                  },
-    { "A8P8",        DXGI_FORMAT_A8P8                },
-    { "B5G6R5",      DXGI_FORMAT_B5G6R5_UNORM        },
-    { "Y416",        DXGI_FORMAT_Y416                },
-    { "P010",        DXGI_FORMAT_P010                },
-    { "Y210",        DXGI_FORMAT_Y210                },
-    { "Y410",        DXGI_FORMAT_Y410                },
-    { "NV11",        DXGI_FORMAT_NV11                },
-    { "UNKNOWN",     DXGI_FORMAT_UNKNOWN             },
+    { "NV12",        DXGI_FORMAT_NV12,                VLC_CODEC_NV12     },
+    { "I420_OPAQUE", DXGI_FORMAT_420_OPAQUE,          0                  },
+    { "RGBA",        DXGI_FORMAT_R8G8B8A8_UNORM,      VLC_CODEC_RGBA     },
+    { "RGBA_SRGB",   DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, VLC_CODEC_RGBA     },
+    { "BGRX",        DXGI_FORMAT_B8G8R8X8_UNORM,      VLC_CODEC_RGB32    },
+    { "BGRA",        DXGI_FORMAT_B8G8R8A8_UNORM,      VLC_CODEC_BGRA     },
+    { "BGRA_SRGB",   DXGI_FORMAT_B8G8R8A8_UNORM_SRGB, VLC_CODEC_BGRA     },
+    { "AYUV",        DXGI_FORMAT_AYUV,                VLC_CODEC_YUVA     },
+    { "YUY2",        DXGI_FORMAT_YUY2,                VLC_CODEC_YUYV     },
+    { "AI44",        DXGI_FORMAT_AI44,                0                  },
+    { "P8",          DXGI_FORMAT_P8,                  0                  },
+    { "A8P8",        DXGI_FORMAT_A8P8,                0                  },
+    { "B5G6R5",      DXGI_FORMAT_B5G6R5_UNORM,        VLC_CODEC_RGB16    },
+    { "Y416",        DXGI_FORMAT_Y416,                0                  },
+    { "P010",        DXGI_FORMAT_P010,                VLC_CODEC_P010     },
+    { "Y210",        DXGI_FORMAT_Y210,                VLC_CODEC_YUYV     }, /* AV_PIX_FMT_YUYV422 */
+    { "Y410",        DXGI_FORMAT_Y410,                0                  },
+    { "NV11",        DXGI_FORMAT_NV11,                0                  },
+    { "RGB10A2",     DXGI_FORMAT_R10G10B10A2_UNORM,   0                  },
+    { "UNKNOWN",     DXGI_FORMAT_UNKNOWN,             0                  },
 
-    { NULL, 0,}
+    { NULL, 0, 0}
 };
 
 static const d3d_format_t d3d_formats[] = {
@@ -92,6 +94,16 @@ const char *DxgiFormatToStr(DXGI_FORMAT format)
     return NULL;
 }
 
+vlc_fourcc_t DxgiFormatFourcc(DXGI_FORMAT format)
+{
+    for (const dxgi_format_t *f = dxgi_formats; f->name != NULL; ++f)
+    {
+        if (f->format == format)
+            return f->vlc_format;
+    }
+    return 0;
+}
+
 const d3d_format_t *GetRenderFormatList(void)
 {
     return d3d_formats;
diff --git a/modules/video_chroma/dxgi_fmt.h b/modules/video_chroma/dxgi_fmt.h
index a95af63..ebce93b 100644
--- a/modules/video_chroma/dxgi_fmt.h
+++ b/modules/video_chroma/dxgi_fmt.h
@@ -41,6 +41,7 @@ typedef struct
 } d3d_format_t;
 
 extern const char *DxgiFormatToStr(DXGI_FORMAT format);
+extern vlc_fourcc_t DxgiFormatFourcc(DXGI_FORMAT format);
 extern const d3d_format_t *GetRenderFormatList(void);
 extern void DxgiFormatMask(DXGI_FORMAT format, video_format_t *);
 
-- 
2.8.2



More information about the vlc-devel mailing list