video: Add UYVP, 10-bit 4:2:2
authorDavid Schleef <ds@schleef.org>
Mon, 13 Sep 2010 02:34:28 +0000 (19:34 -0700)
committerDavid Schleef <ds@schleef.org>
Tue, 14 Sep 2010 19:33:21 +0000 (12:33 -0700)
gst-libs/gst/video/video.c
gst-libs/gst/video/video.h

index 4802ef5..ea782b9 100644 (file)
@@ -772,6 +772,8 @@ gst_video_format_from_fourcc (guint32 fourcc)
       return GST_VIDEO_FORMAT_Y800;
     case GST_MAKE_FOURCC ('Y', '1', '6', ' '):
       return GST_VIDEO_FORMAT_Y16;
+    case GST_MAKE_FOURCC ('U', 'Y', 'V', 'P'):
+      return GST_VIDEO_FORMAT_UYVP;
     default:
       return GST_VIDEO_FORMAT_UNKNOWN;
   }
@@ -827,6 +829,8 @@ gst_video_format_to_fourcc (GstVideoFormat format)
       return GST_MAKE_FOURCC ('Y', '8', '0', '0');
     case GST_VIDEO_FORMAT_Y16:
       return GST_MAKE_FOURCC ('Y', '1', '6', ' ');
+    case GST_VIDEO_FORMAT_UYVP:
+      return GST_MAKE_FOURCC ('U', 'Y', 'V', 'P');
     default:
       return 0;
   }
@@ -960,6 +964,7 @@ gst_video_format_is_rgb (GstVideoFormat format)
     case GST_VIDEO_FORMAT_NV12:
     case GST_VIDEO_FORMAT_NV21:
     case GST_VIDEO_FORMAT_v308:
+    case GST_VIDEO_FORMAT_UYVP:
       return FALSE;
     case GST_VIDEO_FORMAT_RGBx:
     case GST_VIDEO_FORMAT_BGRx:
@@ -1011,6 +1016,7 @@ gst_video_format_is_yuv (GstVideoFormat format)
     case GST_VIDEO_FORMAT_v308:
     case GST_VIDEO_FORMAT_Y800:
     case GST_VIDEO_FORMAT_Y16:
+    case GST_VIDEO_FORMAT_UYVP:
       return TRUE;
     case GST_VIDEO_FORMAT_RGBx:
     case GST_VIDEO_FORMAT_BGRx:
@@ -1087,6 +1093,7 @@ gst_video_format_has_alpha (GstVideoFormat format)
     case GST_VIDEO_FORMAT_v308:
     case GST_VIDEO_FORMAT_Y800:
     case GST_VIDEO_FORMAT_Y16:
+    case GST_VIDEO_FORMAT_UYVP:
       return FALSE;
     case GST_VIDEO_FORMAT_AYUV:
     case GST_VIDEO_FORMAT_RGBA:
@@ -1195,6 +1202,8 @@ gst_video_format_get_row_stride (GstVideoFormat format, int component,
     case GST_VIDEO_FORMAT_GRAY16_LE:
     case GST_VIDEO_FORMAT_Y16:
       return GST_ROUND_UP_4 (width * 2);
+    case GST_VIDEO_FORMAT_UYVP:
+      return GST_ROUND_UP_4 ((width * 2 * 5 + 3) / 4);
     default:
       return 0;
   }
@@ -1277,6 +1286,9 @@ gst_video_format_get_pixel_stride (GstVideoFormat format, int component)
     case GST_VIDEO_FORMAT_GRAY16_LE:
     case GST_VIDEO_FORMAT_Y16:
       return 2;
+    case GST_VIDEO_FORMAT_UYVP:
+      /* UYVP is packed at the bit level, so pixel stride doesn't make sense */
+      return 0;
     default:
       return 0;
   }
@@ -1315,6 +1327,7 @@ gst_video_format_get_component_width (GstVideoFormat format,
     case GST_VIDEO_FORMAT_v216:
     case GST_VIDEO_FORMAT_NV12:
     case GST_VIDEO_FORMAT_NV21:
+    case GST_VIDEO_FORMAT_UYVP:
       if (component == 0) {
         return width;
       } else {
@@ -1415,6 +1428,7 @@ gst_video_format_get_component_height (GstVideoFormat format,
     case GST_VIDEO_FORMAT_GRAY16_LE:
     case GST_VIDEO_FORMAT_Y800:
     case GST_VIDEO_FORMAT_Y16:
+    case GST_VIDEO_FORMAT_UYVP:
       return height;
     default:
       return 0;
@@ -1615,6 +1629,9 @@ gst_video_format_get_component_offset (GstVideoFormat format,
     case GST_VIDEO_FORMAT_Y800:
     case GST_VIDEO_FORMAT_Y16:
       return 0;
+    case GST_VIDEO_FORMAT_UYVP:
+      /* UYVP is bit-packed, so this doesn't make sense */
+      return 0;
     default:
       return 0;
   }
@@ -1693,6 +1710,8 @@ gst_video_format_get_size (GstVideoFormat format, int width, int height)
     case GST_VIDEO_FORMAT_GRAY16_LE:
     case GST_VIDEO_FORMAT_Y16:
       return GST_ROUND_UP_4 (width * 2) * height;
+    case GST_VIDEO_FORMAT_UYVP:
+      return GST_ROUND_UP_4 ((width * 2 * 5 + 3) / 4) * height;
     default:
       return 0;
   }
index 393b92a..ba8ac98 100644 (file)
@@ -63,6 +63,7 @@ G_BEGIN_DECLS
  * @GST_VIDEO_FORMAT_BGR16: reverse rgb 5-6-5 bits per component (Since: 0.10.30)
  * @GST_VIDEO_FORMAT_RGB15: rgb 5-5-5 bits per component (Since: 0.10.30)
  * @GST_VIDEO_FORMAT_BGR15: reverse rgb 5-5-5 bits per component (Since: 0.10.30)
+ * @GST_VIDEO_FORMAT_UYVP: packed 10-bit 4:2:2 YUV (U0-Y0-V0-Y1 U2-Y2-V2-Y3 U4 ...) 
  *
  * Enum value describing the most common video formats.
  */
@@ -100,7 +101,8 @@ typedef enum {
   GST_VIDEO_FORMAT_RGB16,
   GST_VIDEO_FORMAT_BGR16,
   GST_VIDEO_FORMAT_RGB15,
-  GST_VIDEO_FORMAT_BGR15
+  GST_VIDEO_FORMAT_BGR15,
+  GST_VIDEO_FORMAT_UYVP
 } GstVideoFormat;
 
 #define GST_VIDEO_BYTE1_MASK_32  "0xFF000000"