Add more video formats.
authorGwenole Beauchesne <gwenole.beauchesne@intel.com>
Tue, 9 Jul 2013 16:03:36 +0000 (18:03 +0200)
committerGwenole Beauchesne <gwenole.beauchesne@intel.com>
Wed, 10 Jul 2013 15:03:47 +0000 (17:03 +0200)
Add new video format mappings to VA image formats:
- YUV: packed YUV (YUY2, UYVY), grayscale (Y800) ;
- RGB: 32-bit RGB without alpha channel (XRGB, XBGR, RGBX, BGRX).

gst-libs/gst/vaapi/gstvaapiimage.c
gst-libs/gst/vaapi/video-format.c

index 2b86908..bb46866 100644 (file)
@@ -105,15 +105,27 @@ vaapi_image_is_linear(const VAImage *va_image)
     case VA_FOURCC('I','4','2','0'):
         data_size = width * height + 2 * width2 * height2;
         break;
+    case VA_FOURCC('Y','U','Y','2'):
+    case VA_FOURCC('U','Y','V','Y'):
+        data_size = 2 * width * height;
+        break;
+    case VA_FOURCC('Y','8','0','0'):
+        data_size = width * height;
+        break;
     case VA_FOURCC('A','Y','U','V'):
     case VA_FOURCC('A','R','G','B'):
     case VA_FOURCC('R','G','B','A'):
     case VA_FOURCC('A','B','G','R'):
     case VA_FOURCC('B','G','R','A'):
+    case VA_FOURCC('X','R','G','B'):
+    case VA_FOURCC('R','G','B','X'):
+    case VA_FOURCC('X','B','G','R'):
+    case VA_FOURCC('B','G','R','X'):
         data_size = 4 * width * height;
         break;
     default:
-        g_error("FIXME: incomplete formats");
+        g_error("FIXME: incomplete formats %" GST_FOURCC_FORMAT,
+                GST_FOURCC_ARGS(va_image->format.fourcc));
         break;
     }
     return va_image->data_size == data_size;
index d9236dc..7d9efca 100644 (file)
@@ -63,18 +63,29 @@ static const GstVideoFormatMap gst_video_formats[] = {
     DEF_YUV(NV12, ('N','V','1','2'), LSB, 12),
     DEF_YUV(YV12, ('Y','V','1','2'), LSB, 12),
     DEF_YUV(I420, ('I','4','2','0'), LSB, 12),
+    DEF_YUV(YUY2, ('Y','U','Y','2'), LSB, 16),
+    DEF_YUV(UYVY, ('U','Y','V','Y'), LSB, 16),
     DEF_YUV(AYUV, ('A','Y','U','V'), LSB, 32),
 #if G_BYTE_ORDER == G_BIG_ENDIAN
     DEF_RGB(ARGB, ('A','R','G','B'), MSB, 32,
             32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000),
     DEF_RGB(ABGR, ('A','B','G','R'), MSB, 32,
             32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000),
+    DEF_RGB(xRGB, ('X','R','G','B'), MSB, 32,
+            24, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000),
+    DEF_RGB(xBGR, ('X','B','G','R'), MSB, 32,
+            24, 0x000000ff, 0x0000ff00, 0x00ff0000, 0x00000000),
 #elif G_BYTE_ORDER == G_LITTLE_ENDIAN
     DEF_RGB(BGRA, ('B','G','R','A'), LSB, 32,
             32, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000),
     DEF_RGB(RGBA, ('R','G','B','A'), LSB, 32,
             32, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000),
+    DEF_RGB(BGRx, ('B','G','R','X'), LSB, 32,
+            24, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000),
+    DEF_RGB(RGBx, ('R','G','B','X'), LSB, 32,
+            24, 0x000000ff, 0x0000ff00, 0x00ff0000, 0x00000000),
 #endif
+    DEF_YUV(GRAY8, ('Y','8','0','0'), LSB, 8),
     { 0, }
 };