video: Add support for Y800 and Y16
authorMartin Bisson <martin.bisson@gmail.com>
Mon, 7 Jun 2010 06:16:01 +0000 (08:16 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Mon, 7 Jun 2010 06:17:55 +0000 (08:17 +0200)
Fixes bug #620441.

gst-libs/gst/video/video.c
gst-libs/gst/video/video.h

index e5c2c82..176f315 100644 (file)
@@ -715,6 +715,12 @@ gst_video_format_from_fourcc (guint32 fourcc)
       return GST_VIDEO_FORMAT_NV21;
     case GST_MAKE_FOURCC ('v', '3', '0', '8'):
       return GST_VIDEO_FORMAT_v308;
+    case GST_MAKE_FOURCC ('Y', '8', '0', '0'):
+    case GST_MAKE_FOURCC ('Y', '8', ' ', ' '):
+    case GST_MAKE_FOURCC ('G', 'R', 'E', 'Y'):
+      return GST_VIDEO_FORMAT_Y800;
+    case GST_MAKE_FOURCC ('Y', '1', '6', ' '):
+      return GST_VIDEO_FORMAT_Y16;
     default:
       return GST_VIDEO_FORMAT_UNKNOWN;
   }
@@ -766,6 +772,10 @@ gst_video_format_to_fourcc (GstVideoFormat format)
       return GST_MAKE_FOURCC ('N', 'V', '2', '1');
     case GST_VIDEO_FORMAT_v308:
       return GST_MAKE_FOURCC ('v', '3', '0', '8');
+    case GST_VIDEO_FORMAT_Y800:
+      return GST_MAKE_FOURCC ('Y', '8', '0', '0');
+    case GST_VIDEO_FORMAT_Y16:
+      return GST_MAKE_FOURCC ('Y', '1', '6', ' ');
     default:
       return 0;
   }
@@ -917,6 +927,8 @@ gst_video_format_is_yuv (GstVideoFormat format)
     case GST_VIDEO_FORMAT_NV12:
     case GST_VIDEO_FORMAT_NV21:
     case GST_VIDEO_FORMAT_v308:
+    case GST_VIDEO_FORMAT_Y800:
+    case GST_VIDEO_FORMAT_Y16:
       return TRUE;
     case GST_VIDEO_FORMAT_RGBx:
     case GST_VIDEO_FORMAT_BGRx:
@@ -985,6 +997,8 @@ gst_video_format_has_alpha (GstVideoFormat format)
     case GST_VIDEO_FORMAT_NV12:
     case GST_VIDEO_FORMAT_NV21:
     case GST_VIDEO_FORMAT_v308:
+    case GST_VIDEO_FORMAT_Y800:
+    case GST_VIDEO_FORMAT_Y16:
       return FALSE;
     case GST_VIDEO_FORMAT_AYUV:
     case GST_VIDEO_FORMAT_RGBA:
@@ -1078,9 +1092,11 @@ gst_video_format_get_row_stride (GstVideoFormat format, int component,
     case GST_VIDEO_FORMAT_NV21:
       return GST_ROUND_UP_4 (width);
     case GST_VIDEO_FORMAT_GRAY8:
+    case GST_VIDEO_FORMAT_Y800:
       return GST_ROUND_UP_4 (width);
     case GST_VIDEO_FORMAT_GRAY16_BE:
     case GST_VIDEO_FORMAT_GRAY16_LE:
+    case GST_VIDEO_FORMAT_Y16:
       return GST_ROUND_UP_4 (width * 2);
     default:
       return 0;
@@ -1153,9 +1169,11 @@ gst_video_format_get_pixel_stride (GstVideoFormat format, int component)
         return 2;
       }
     case GST_VIDEO_FORMAT_GRAY8:
+    case GST_VIDEO_FORMAT_Y800:
       return 1;
     case GST_VIDEO_FORMAT_GRAY16_BE:
     case GST_VIDEO_FORMAT_GRAY16_LE:
+    case GST_VIDEO_FORMAT_Y16:
       return 2;
     default:
       return 0;
@@ -1222,6 +1240,8 @@ gst_video_format_get_component_width (GstVideoFormat format, int component,
     case GST_VIDEO_FORMAT_GRAY8:
     case GST_VIDEO_FORMAT_GRAY16_BE:
     case GST_VIDEO_FORMAT_GRAY16_LE:
+    case GST_VIDEO_FORMAT_Y800:
+    case GST_VIDEO_FORMAT_Y16:
       return width;
     default:
       return 0;
@@ -1283,6 +1303,8 @@ gst_video_format_get_component_height (GstVideoFormat format, int component,
     case GST_VIDEO_FORMAT_GRAY8:
     case GST_VIDEO_FORMAT_GRAY16_BE:
     case GST_VIDEO_FORMAT_GRAY16_LE:
+    case GST_VIDEO_FORMAT_Y800:
+    case GST_VIDEO_FORMAT_Y16:
       return height;
     default:
       return 0;
@@ -1480,6 +1502,8 @@ gst_video_format_get_component_offset (GstVideoFormat format, int component,
     case GST_VIDEO_FORMAT_GRAY8:
     case GST_VIDEO_FORMAT_GRAY16_BE:
     case GST_VIDEO_FORMAT_GRAY16_LE:
+    case GST_VIDEO_FORMAT_Y800:
+    case GST_VIDEO_FORMAT_Y16:
       return 0;
     default:
       return 0;
@@ -1548,9 +1572,11 @@ gst_video_format_get_size (GstVideoFormat format, int width, int height)
     case GST_VIDEO_FORMAT_NV21:
       return GST_ROUND_UP_4 (width) * GST_ROUND_UP_2 (height) * 3 / 2;
     case GST_VIDEO_FORMAT_GRAY8:
+    case GST_VIDEO_FORMAT_Y800:
       return GST_ROUND_UP_4 (width) * height;
     case GST_VIDEO_FORMAT_GRAY16_BE:
     case GST_VIDEO_FORMAT_GRAY16_LE:
+    case GST_VIDEO_FORMAT_Y16:
       return GST_ROUND_UP_4 (width * 2) * height;
     default:
       return 0;
index ebf20b9..c00f0a1 100644 (file)
@@ -57,6 +57,8 @@ G_BEGIN_DECLS
  * @GST_VIDEO_FORMAT_GRAY16_BE: 16-bit grayscale, most significant byte first (Since: 0.10.29)
  * @GST_VIDEO_FORMAT_GRAY16_LE: 16-bit grayscale, least significant byte first (Since: 0.10.29)
  * @GST_VIDEO_FORMAT_v308: packed 4:4:4 YUV (Since: 0.10.29)
+ * @GST_VIDEO_FORMAT_Y800: same as GST_VIDEO_FORMAT_GRAY8 (Since: 0.10.29)
+ * @GST_VIDEO_FORMAT_Y16: same as GST_VIDEO_FORMAT_GRAY16_LE (Since: 0.10.29)
  *
  * Enum value describing the most common video formats.
  */
@@ -88,7 +90,9 @@ typedef enum {
   GST_VIDEO_FORMAT_GRAY8,
   GST_VIDEO_FORMAT_GRAY16_BE,
   GST_VIDEO_FORMAT_GRAY16_LE,
-  GST_VIDEO_FORMAT_v308
+  GST_VIDEO_FORMAT_v308,
+  GST_VIDEO_FORMAT_Y800,
+  GST_VIDEO_FORMAT_Y16
 } GstVideoFormat;
 
 #define GST_VIDEO_BYTE1_MASK_32  "0xFF000000"