[vlc-devel] commit: Added VLC_CODEC_YV9 and remove default mapping to I410 (close #3288 ). (Laurent Aimar )

git version control git at videolan.org
Mon Feb 8 22:03:34 CET 2010


vlc | branch: master | Laurent Aimar <fenrir at videolan.org> | Mon Feb  8 21:01:22 2010 +0100| [9ba7d131bc53a56c443ba849cad10dd2053f6aaa] | committer: Laurent Aimar 

Added VLC_CODEC_YV9 and remove default mapping to I410 (close #3288).

They are not the same as the chroma plane are swapped.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=9ba7d131bc53a56c443ba849cad10dd2053f6aaa
---

 include/vlc_fourcc.h             |    2 +
 src/misc/es_format.c             |    1 +
 src/misc/fourcc.c                |   43 ++++++++++++++++++++++++++++++--------
 src/video_output/vout_pictures.c |    1 +
 4 files changed, 38 insertions(+), 9 deletions(-)

diff --git a/include/vlc_fourcc.h b/include/vlc_fourcc.h
index e0560f5..cfb17aa 100644
--- a/include/vlc_fourcc.h
+++ b/include/vlc_fourcc.h
@@ -114,6 +114,8 @@
 #define VLC_CODEC_AMV       VLC_FOURCC('A','M','V',' ')
 
 
+/* Planar YUV 4:1:0 Y:V:U */
+#define VLC_CODEC_YV9       VLC_FOURCC('Y','V','U','9')
 /* Planar YUV 4:2:0 Y:V:U */
 #define VLC_CODEC_YV12      VLC_FOURCC('Y','V','1','2')
 /* Planar YUV 4:1:0 Y:U:V */
diff --git a/src/misc/es_format.c b/src/misc/es_format.c
index 650b315..cad689a 100644
--- a/src/misc/es_format.c
+++ b/src/misc/es_format.c
@@ -170,6 +170,7 @@ void video_format_Setup( video_format_t *p_fmt, vlc_fourcc_t i_chroma,
     case VLC_CODEC_J420:
         p_fmt->i_bits_per_pixel = 12;
         break;
+    case VLC_CODEC_YV9:
     case VLC_CODEC_I410:
         p_fmt->i_bits_per_pixel = 9;
         break;
diff --git a/src/misc/fourcc.c b/src/misc/fourcc.c
index 6c34d79..7883cb5 100644
--- a/src/misc/fourcc.c
+++ b/src/misc/fourcc.c
@@ -611,9 +611,10 @@ static const entry_t p_list_video[] = {
     B(VLC_CODEC_YV12, "Planar 4:2:0 YVU"),
         A("YV12"),
         A("yv12"),
+    B(VLC_CODEC_YV9,  "Planar 4:1:0 YVU"),
+        A("YVU9"),
     B(VLC_CODEC_I410, "Planar 4:1:0 YUV"),
         A("I410"),
-        A("YVU9"),
     B(VLC_CODEC_I411, "Planar 4:1:1 YUV"),
         A("I411"),
     B(VLC_CODEC_I420, "Planar 4:2:0 YUV"),
@@ -1321,6 +1322,9 @@ const char *vlc_fourcc_GetDescription( int i_cat, vlc_fourcc_t i_fourcc )
 
 
 /* */
+#define VLC_CODEC_YUV_PLANAR_410 \
+    VLC_CODEC_I410, VLC_CODEC_YV9
+
 #define VLC_CODEC_YUV_PLANAR_420 \
     VLC_CODEC_I420, VLC_CODEC_YV12, VLC_CODEC_J420
 
@@ -1340,7 +1344,7 @@ const char *vlc_fourcc_GetDescription( int i_cat, vlc_fourcc_t i_fourcc )
 #define VLC_CODEC_FALLBACK_420 \
     VLC_CODEC_YUV_PLANAR_422, VLC_CODEC_YUV_PACKED, \
     VLC_CODEC_YUV_PLANAR_444, VLC_CODEC_YUV_PLANAR_440, \
-    VLC_CODEC_I411, VLC_CODEC_I410, VLC_CODEC_Y211
+    VLC_CODEC_I411, VLC_CODEC_YUV_PLANAR_410, VLC_CODEC_Y211
 
 static const vlc_fourcc_t p_I420_fallback[] = {
     VLC_CODEC_I420, VLC_CODEC_YV12, VLC_CODEC_J420, VLC_CODEC_FALLBACK_420, 0
@@ -1355,7 +1359,7 @@ static const vlc_fourcc_t p_YV12_fallback[] = {
 #define VLC_CODEC_FALLBACK_422 \
     VLC_CODEC_YUV_PACKED, VLC_CODEC_YUV_PLANAR_420, \
     VLC_CODEC_YUV_PLANAR_444, VLC_CODEC_YUV_PLANAR_440, \
-    VLC_CODEC_I411, VLC_CODEC_I410, VLC_CODEC_Y211
+    VLC_CODEC_I411, VLC_CODEC_YUV_PLANAR_410, VLC_CODEC_Y211
 
 static const vlc_fourcc_t p_I422_fallback[] = {
     VLC_CODEC_I422, VLC_CODEC_J422, VLC_CODEC_FALLBACK_422, 0
@@ -1367,7 +1371,7 @@ static const vlc_fourcc_t p_J422_fallback[] = {
 #define VLC_CODEC_FALLBACK_444 \
     VLC_CODEC_YUV_PLANAR_422, VLC_CODEC_YUV_PACKED, \
     VLC_CODEC_YUV_PLANAR_420, VLC_CODEC_YUV_PLANAR_440, \
-    VLC_CODEC_I411, VLC_CODEC_I410, VLC_CODEC_Y211
+    VLC_CODEC_I411, VLC_CODEC_YUV_PLANAR_410, VLC_CODEC_Y211
 
 static const vlc_fourcc_t p_I444_fallback[] = {
     VLC_CODEC_I444, VLC_CODEC_J444, VLC_CODEC_FALLBACK_444, 0
@@ -1382,13 +1386,13 @@ static const vlc_fourcc_t p_I440_fallback[] = {
     VLC_CODEC_YUV_PLANAR_422,
     VLC_CODEC_YUV_PLANAR_444,
     VLC_CODEC_YUV_PACKED,
-    VLC_CODEC_I411, VLC_CODEC_I410, VLC_CODEC_Y211, 0
+    VLC_CODEC_I411, VLC_CODEC_YUV_PLANAR_410, VLC_CODEC_Y211, 0
 };
 
 #define VLC_CODEC_FALLBACK_PACKED \
     VLC_CODEC_YUV_PLANAR_422, VLC_CODEC_YUV_PLANAR_420, \
     VLC_CODEC_YUV_PLANAR_444, VLC_CODEC_YUV_PLANAR_440, \
-    VLC_CODEC_I411, VLC_CODEC_I410, VLC_CODEC_Y211
+    VLC_CODEC_I411, VLC_CODEC_YUV_PLANAR_410, VLC_CODEC_Y211
 
 static const vlc_fourcc_t p_YUYV_fallback[] = {
     VLC_CODEC_YUYV,
@@ -1441,7 +1445,7 @@ static const vlc_fourcc_t p_list_YUV[] = {
     VLC_CODEC_YUV_PLANAR_440,
     VLC_CODEC_YUV_PLANAR_444,
     VLC_CODEC_YUV_PACKED,
-    VLC_CODEC_I411, VLC_CODEC_I410, VLC_CODEC_Y211,
+    VLC_CODEC_I411, VLC_CODEC_YUV_PLANAR_410, VLC_CODEC_Y211,
     0,
 };
 
@@ -1520,8 +1524,29 @@ const vlc_fourcc_t *vlc_fourcc_GetRGBFallback( vlc_fourcc_t i_fourcc )
 
 bool vlc_fourcc_AreUVPlanesSwapped( vlc_fourcc_t a, vlc_fourcc_t b )
 {
-    return (((a == VLC_CODEC_I420 || a == VLC_CODEC_J420) && b == VLC_CODEC_YV12) ||
-            ((b == VLC_CODEC_I420 || b == VLC_CODEC_J420) && a == VLC_CODEC_YV12));
+    static const vlc_fourcc_t pp_swapped[][4] = {
+        { VLC_CODEC_YV12, VLC_CODEC_I420, VLC_CODEC_J420, 0 },
+        { VLC_CODEC_YV9,  VLC_CODEC_I410, 0 },
+        { 0 }
+    };
+
+    for( int i = 0; pp_swapped[i][0]; i++ )
+    {
+        if( pp_swapped[i][0] == b )
+        {
+            vlc_fourcc_t t = a;
+            a = b;
+            b = t;
+        }
+        if( pp_swapped[i][0] != a )
+            continue;
+        for( int j = 1; pp_swapped[i][j]; j++ )
+        {
+            if( pp_swapped[i][j] == b )
+                return true;
+        }
+    }
+    return false;
 }
 
 bool vlc_fourcc_IsYUV(vlc_fourcc_t fcc)
diff --git a/src/video_output/vout_pictures.c b/src/video_output/vout_pictures.c
index 1a54dfa..7370c20 100644
--- a/src/video_output/vout_pictures.c
+++ b/src/video_output/vout_pictures.c
@@ -745,6 +745,7 @@ int picture_Setup( picture_t *p_picture, vlc_fourcc_t i_chroma,
         p_picture->i_planes = 3;
         break;
 
+    case VLC_CODEC_YV9:
     case VLC_CODEC_I410:
         p_picture->p[ Y_PLANE ].i_lines = i_height_aligned;
         p_picture->p[ Y_PLANE ].i_visible_lines = i_height;




More information about the vlc-devel mailing list