From b0d15133d7a6af36a5632e1fd9278c04c32d29b8 Mon Sep 17 00:00:00 2001 From: Martin Bisson Date: Mon, 7 Jun 2010 08:16:01 +0200 Subject: [PATCH] video: Add support for Y800 and Y16 Fixes bug #620441. --- gst-libs/gst/video/video.c | 26 ++++++++++++++++++++++++++ gst-libs/gst/video/video.h | 6 +++++- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/gst-libs/gst/video/video.c b/gst-libs/gst/video/video.c index e5c2c82..176f315 100644 --- a/gst-libs/gst/video/video.c +++ b/gst-libs/gst/video/video.c @@ -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; diff --git a/gst-libs/gst/video/video.h b/gst-libs/gst/video/video.h index ebf20b9..c00f0a1 100644 --- a/gst-libs/gst/video/video.h +++ b/gst-libs/gst/video/video.h @@ -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" -- 2.7.4