+#define PLANAR(n, w_den, h_den, size) \
+ { .plane_count = n, \
+ .p = { {.w = {1, 1}, .h = {1, 1}}, \
+ {.w = {1,w_den}, .h = {1,h_den}}, \
+ {.w = {1,w_den}, .h = {1,h_den}}, \
+ {.w = {1, 1}, .h = {1, 1}} }, \
+ .pixel_size = size }
+
+#define PLANAR_8(n, w_den, h_den) PLANAR(n, w_den, h_den, 1)
+#define PLANAR_16(n, w_den, h_den) PLANAR(n, w_den, h_den, 2)
+
+#define PACKED_FMT(size) \
+ { .plane_count = 1, \
+ .p = { {.w = {1,1}, .h = {1,1}} }, \
+ .pixel_size = size }
+
+static const struct
+{
+ vlc_fourcc_t p_fourcc[6];
+ vlc_chroma_description_t description;
+} p_list_chroma_description[] = {
+ { { VLC_CODEC_I411, 0 }, PLANAR_8(3, 4, 1) },
+ { { VLC_CODEC_YUV_PLANAR_410, 0 }, PLANAR_8(3, 4, 4) },
+ { { VLC_CODEC_YUV_PLANAR_420, 0 }, PLANAR_8(3, 2, 2) },
+ { { VLC_CODEC_YUV_PLANAR_422, 0 }, PLANAR_8(3, 2, 1) },
+ { { VLC_CODEC_YUV_PLANAR_440, 0 }, PLANAR_8(3, 1, 2) },
+ { { VLC_CODEC_YUV_PLANAR_444, 0 }, PLANAR_8(3, 1, 1) },
+ { { VLC_CODEC_YUVA, 0 }, PLANAR_8(4, 1, 1) },
+
+ { { VLC_CODEC_I420_10L,
+ VLC_CODEC_I420_10B, 0 }, PLANAR_16(3, 2, 2) },
+ { { VLC_CODEC_I420_9L,
+ VLC_CODEC_I420_9B, 0 }, PLANAR_16(3, 2, 2) },
+ { { VLC_CODEC_I422_10L,
+ VLC_CODEC_I422_10B, 0 }, PLANAR_16(3, 2, 1) },
+ { { VLC_CODEC_I422_9L,
+ VLC_CODEC_I422_9B, 0 }, PLANAR_16(3, 2, 1) },
+ { { VLC_CODEC_I444_10L,
+ VLC_CODEC_I444_10B, 0 }, PLANAR_16(3, 1, 1) },
+ { { VLC_CODEC_I444_9L,
+ VLC_CODEC_I444_9B, 0 }, PLANAR_16(3, 1, 1) },
+
+ { { VLC_CODEC_YUV_PACKED, 0 }, PACKED_FMT(2) },
+ { { VLC_CODEC_RGB8, VLC_CODEC_GREY,
+ VLC_CODEC_YUVP, VLC_CODEC_RGBP, 0 }, PACKED_FMT(1) },
+ { { VLC_CODEC_RGB16, VLC_CODEC_RGB15, VLC_CODEC_RGBT,
+ VLC_CODEC_RGB12, VLC_CODEC_RGBA16, 0 },PACKED_FMT(2) },
+ { { VLC_CODEC_RGB24, 0 }, PACKED_FMT(3) },
+ { { VLC_CODEC_RGB32, VLC_CODEC_RGBA, 0 }, PACKED_FMT(4) },
+
+ { { VLC_CODEC_Y211, 0 }, { 1, { {{1,4}, {1,1}} }, 4 } },
+
+ { {0}, { 0, {}, 0 } }
+};
+
+#undef PACKED_FMT
+#undef PLANAR_16
+#undef PLANAR_8
+#undef PLANAR
+
+const vlc_chroma_description_t *vlc_fourcc_GetChromaDescription( vlc_fourcc_t i_fourcc )
+{
+ for( unsigned i = 0; p_list_chroma_description[i].p_fourcc[0]; i++ )
+ {
+ const vlc_fourcc_t *p_fourcc = p_list_chroma_description[i].p_fourcc;
+ for( unsigned j = 0; p_fourcc[j]; j++ )
+ {
+ if( p_fourcc[j] == i_fourcc )
+ return &p_list_chroma_description[i].description;
+ }
+ }
+ return NULL;
+}