]> git.sesse.net Git - vlc/commitdiff
Added vlc_fourcc_GetRGBFallback.
authorLaurent Aimar <fenrir@videolan.org>
Sun, 11 Oct 2009 13:58:09 +0000 (15:58 +0200)
committerLaurent Aimar <fenrir@videolan.org>
Sun, 11 Oct 2009 17:33:45 +0000 (19:33 +0200)
include/vlc_fourcc.h
src/libvlccore.sym
src/misc/fourcc.c

index 50fde9874a08770ae51816e3bab20c5ccd4bc0e2..8563d12c34ce6cead16552f750ab276ffa211a0f 100644 (file)
@@ -365,6 +365,14 @@ VLC_EXPORT( const char *, vlc_fourcc_GetDescription, ( int i_cat, vlc_fourcc_t i
  */
 VLC_EXPORT( const vlc_fourcc_t *, vlc_fourcc_GetYUVFallback, ( vlc_fourcc_t ) );
 
+/**
+ * It returns a list (terminated with the value 0) of RGB fourccs in
+ * decreasing priority order for the given chroma.
+ *
+ * It will always return a non NULL pointer that must not be freed.
+ */
+VLC_EXPORT( const vlc_fourcc_t *, vlc_fourcc_GetRGBFallback, ( vlc_fourcc_t ) );
+
 /**
  * It returns true if the given fourcc is YUV and false otherwise.
  */
index ac57220a73e335b0e6df902d799ca1e655c7d47c..73d2aa2e1da01503674b158ec2f60666760510de 100644 (file)
@@ -486,6 +486,7 @@ vlc_fourcc_GetCodecAudio
 vlc_fourcc_GetCodecFromString
 vlc_fourcc_GetDescription
 vlc_fourcc_IsYUV
+vlc_fourcc_GetRGBFallback
 vlc_fourcc_GetYUVFallback
 vlc_fourcc_AreUVPlanesSwapped
 vlc_gai_strerror
index f3dbb08a94db96d4d9211a6df31f262f15bd9aad..38b8ead419f8945d9113568e9b9429487b2062b6 100644 (file)
@@ -1425,14 +1425,77 @@ static const vlc_fourcc_t p_list_YUV[] = {
     0,
 };
 
-const vlc_fourcc_t *vlc_fourcc_GetYUVFallback( vlc_fourcc_t i_fourcc )
+/* */
+static const vlc_fourcc_t p_RGB32_fallback[] = {
+    VLC_CODEC_RGB32,
+    VLC_CODEC_RGB24,
+    VLC_CODEC_RGB16,
+    VLC_CODEC_RGB15,
+    VLC_CODEC_RGB8,
+    0,
+};
+static const vlc_fourcc_t p_RGB24_fallback[] = {
+    VLC_CODEC_RGB24,
+    VLC_CODEC_RGB32,
+    VLC_CODEC_RGB16,
+    VLC_CODEC_RGB15,
+    VLC_CODEC_RGB8,
+    0,
+};
+static const vlc_fourcc_t p_RGB16_fallback[] = {
+    VLC_CODEC_RGB16,
+    VLC_CODEC_RGB24,
+    VLC_CODEC_RGB32,
+    VLC_CODEC_RGB15,
+    VLC_CODEC_RGB8,
+    0,
+};
+static const vlc_fourcc_t p_RGB15_fallback[] = {
+    VLC_CODEC_RGB15,
+    VLC_CODEC_RGB16,
+    VLC_CODEC_RGB24,
+    VLC_CODEC_RGB32,
+    VLC_CODEC_RGB8,
+    0,
+};
+static const vlc_fourcc_t p_RGB8_fallback[] = {
+    VLC_CODEC_RGB8,
+    VLC_CODEC_RGB15,
+    VLC_CODEC_RGB16,
+    VLC_CODEC_RGB24,
+    VLC_CODEC_RGB32,
+    0,
+};
+static const vlc_fourcc_t *pp_RGB_fallback[] = {
+    p_RGB32_fallback,
+    p_RGB24_fallback,
+    p_RGB16_fallback,
+    p_RGB15_fallback,
+    p_RGB8_fallback,
+    NULL,
+};
+
+
+/* */
+static const vlc_fourcc_t *GetFallback( vlc_fourcc_t i_fourcc,
+                                        const vlc_fourcc_t *pp_fallback[],
+                                        const vlc_fourcc_t p_list[] )
 {
-    for( unsigned i = 0; pp_YUV_fallback[i]; i++ )
+    for( unsigned i = 0; pp_fallback[i]; i++ )
     {
-        if( pp_YUV_fallback[i][0] == i_fourcc )
-            return pp_YUV_fallback[i];
+        if( pp_fallback[i][0] == i_fourcc )
+            return pp_fallback[i];
     }
-    return p_list_YUV;
+    return p_list;
+}
+
+const vlc_fourcc_t *vlc_fourcc_GetYUVFallback( vlc_fourcc_t i_fourcc )
+{
+    return GetFallback( i_fourcc, pp_YUV_fallback, p_list_YUV );
+}
+const vlc_fourcc_t *vlc_fourcc_GetRGBFallback( vlc_fourcc_t i_fourcc )
+{
+    return GetFallback( i_fourcc, pp_RGB_fallback, p_RGB32_fallback );
 }
 
 bool vlc_fourcc_AreUVPlanesSwapped( vlc_fourcc_t a, vlc_fourcc_t b )