From: Sebastian Dröge Date: Wed, 21 Apr 2010 15:15:33 +0000 (+0200) Subject: alpha: Add support for YV12 input X-Git-Tag: RELEASE-0.10.23~191 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ba72a058bb5d322d66daead18269a735adcadbfb;p=platform%2Fupstream%2Fgst-plugins-good.git alpha: Add support for YV12 input --- diff --git a/gst/alpha/gstalpha.c b/gst/alpha/gstalpha.c index fd189d3..a288acd 100644 --- a/gst/alpha/gstalpha.c +++ b/gst/alpha/gstalpha.c @@ -135,11 +135,13 @@ static GstStaticPadTemplate gst_alpha_sink_template = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, - GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("AYUV") ";" GST_VIDEO_CAPS_YUV ("I420") + GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("AYUV") ";" GST_VIDEO_CAPS_ARGB ";" GST_VIDEO_CAPS_BGRA ";" GST_VIDEO_CAPS_ABGR ";" GST_VIDEO_CAPS_RGBA ";" GST_VIDEO_CAPS_xRGB ";" GST_VIDEO_CAPS_BGRx ";" GST_VIDEO_CAPS_xBGR - ";" GST_VIDEO_CAPS_RGBx ";" GST_VIDEO_CAPS_RGB ";" GST_VIDEO_CAPS_BGR) + ";" GST_VIDEO_CAPS_RGBx ";" GST_VIDEO_CAPS_RGB ";" GST_VIDEO_CAPS_BGR + ";" ";" GST_VIDEO_CAPS_YUV ("I420") ";" GST_VIDEO_CAPS_YUV ("YV12") + ) ); static gboolean gst_alpha_start (GstBaseTransform * trans); @@ -962,16 +964,16 @@ gst_alpha_set_i420_##name (const guint8 * src, guint8 * dest, gint width, \ gint matrix[12]; \ gint r, g, b; \ \ - y_stride = gst_video_format_get_row_stride (GST_VIDEO_FORMAT_I420, 0, width); \ - uv_stride = gst_video_format_get_row_stride (GST_VIDEO_FORMAT_I420, 1, width); \ + y_stride = gst_video_format_get_row_stride (alpha->in_format, 0, width); \ + uv_stride = gst_video_format_get_row_stride (alpha->in_format, 1, width); \ \ src_wrap = y_stride - width; \ src_uv_wrap = uv_stride - (width / 2); \ \ srcY = src; \ - srcU = src + gst_video_format_get_component_offset (GST_VIDEO_FORMAT_I420, \ + srcU = src + gst_video_format_get_component_offset (alpha->in_format, \ 1, width, height); \ - srcV = src + gst_video_format_get_component_offset (GST_VIDEO_FORMAT_I420, \ + srcV = src + gst_video_format_get_component_offset (alpha->in_format, \ 2, width, height); \ \ odd_width = (width % 2 != 0); \ @@ -1155,16 +1157,16 @@ gst_alpha_chroma_key_i420_##name (const guint8 * src, guint8 * dest, \ dest_stride = \ gst_video_format_get_row_stride (GST_VIDEO_FORMAT_AYUV, 0, width); \ src_y_stride = \ - gst_video_format_get_row_stride (GST_VIDEO_FORMAT_I420, 0, width); \ + gst_video_format_get_row_stride (alpha->in_format, 0, width); \ src_uv_stride = \ - gst_video_format_get_row_stride (GST_VIDEO_FORMAT_I420, 1, width); \ + gst_video_format_get_row_stride (alpha->in_format, 1, width); \ \ srcY1 = src; \ srcY2 = src + src_y_stride; \ \ - srcU = src + gst_video_format_get_component_offset (GST_VIDEO_FORMAT_I420, \ + srcU = src + gst_video_format_get_component_offset (alpha->in_format, \ 1, width, height); \ - srcV = src + gst_video_format_get_component_offset (GST_VIDEO_FORMAT_I420, \ + srcV = src + gst_video_format_get_component_offset (alpha->in_format, \ 2, width, height); \ \ dest1 = dest; \ @@ -1411,16 +1413,16 @@ gst_alpha_set_i420_ayuv (const guint8 * src, guint8 * dest, gint width, gint y_stride, uv_stride; gboolean odd_width; - y_stride = gst_video_format_get_row_stride (GST_VIDEO_FORMAT_I420, 0, width); - uv_stride = gst_video_format_get_row_stride (GST_VIDEO_FORMAT_I420, 1, width); + y_stride = gst_video_format_get_row_stride (alpha->in_format, 0, width); + uv_stride = gst_video_format_get_row_stride (alpha->in_format, 1, width); src_wrap = y_stride - width; src_uv_wrap = uv_stride - (width / 2); srcY = src; - srcU = src + gst_video_format_get_component_offset (GST_VIDEO_FORMAT_I420, + srcU = src + gst_video_format_get_component_offset (alpha->in_format, 1, width, height); - srcV = src + gst_video_format_get_component_offset (GST_VIDEO_FORMAT_I420, + srcV = src + gst_video_format_get_component_offset (alpha->in_format, 2, width, height); odd_width = (width % 2 != 0); @@ -1662,17 +1664,15 @@ gst_alpha_chroma_key_i420_ayuv (const guint8 * src, guint8 * dest, dest_stride = gst_video_format_get_row_stride (GST_VIDEO_FORMAT_AYUV, 0, width); - src_y_stride = - gst_video_format_get_row_stride (GST_VIDEO_FORMAT_I420, 0, width); - src_uv_stride = - gst_video_format_get_row_stride (GST_VIDEO_FORMAT_I420, 1, width); + src_y_stride = gst_video_format_get_row_stride (alpha->in_format, 0, width); + src_uv_stride = gst_video_format_get_row_stride (alpha->in_format, 1, width); srcY1 = src; srcY2 = src + src_y_stride; - srcU = src + gst_video_format_get_component_offset (GST_VIDEO_FORMAT_I420, + srcU = src + gst_video_format_get_component_offset (alpha->in_format, 1, width, height); - srcV = src + gst_video_format_get_component_offset (GST_VIDEO_FORMAT_I420, + srcV = src + gst_video_format_get_component_offset (alpha->in_format, 2, width, height); dest1 = dest; @@ -1776,6 +1776,7 @@ gst_alpha_set_process_function (GstAlpha * alpha) alpha->process = gst_alpha_set_ayuv_ayuv; break; case GST_VIDEO_FORMAT_I420: + case GST_VIDEO_FORMAT_YV12: alpha->process = gst_alpha_set_i420_ayuv; break; case GST_VIDEO_FORMAT_ARGB: @@ -1819,6 +1820,7 @@ gst_alpha_set_process_function (GstAlpha * alpha) alpha->process = gst_alpha_set_ayuv_argb; break; case GST_VIDEO_FORMAT_I420: + case GST_VIDEO_FORMAT_YV12: alpha->process = gst_alpha_set_i420_argb; break; case GST_VIDEO_FORMAT_ARGB: @@ -1861,6 +1863,7 @@ gst_alpha_set_process_function (GstAlpha * alpha) alpha->process = gst_alpha_set_ayuv_abgr; break; case GST_VIDEO_FORMAT_I420: + case GST_VIDEO_FORMAT_YV12: alpha->process = gst_alpha_set_i420_abgr; break; case GST_VIDEO_FORMAT_ARGB: @@ -1903,6 +1906,7 @@ gst_alpha_set_process_function (GstAlpha * alpha) alpha->process = gst_alpha_set_ayuv_rgba; break; case GST_VIDEO_FORMAT_I420: + case GST_VIDEO_FORMAT_YV12: alpha->process = gst_alpha_set_i420_rgba; break; case GST_VIDEO_FORMAT_ARGB: @@ -1945,6 +1949,7 @@ gst_alpha_set_process_function (GstAlpha * alpha) alpha->process = gst_alpha_set_ayuv_bgra; break; case GST_VIDEO_FORMAT_I420: + case GST_VIDEO_FORMAT_YV12: alpha->process = gst_alpha_set_i420_bgra; break; case GST_VIDEO_FORMAT_ARGB: @@ -1995,6 +2000,7 @@ gst_alpha_set_process_function (GstAlpha * alpha) alpha->process = gst_alpha_chroma_key_ayuv_ayuv; break; case GST_VIDEO_FORMAT_I420: + case GST_VIDEO_FORMAT_YV12: alpha->process = gst_alpha_chroma_key_i420_ayuv; break; case GST_VIDEO_FORMAT_ARGB: @@ -2037,6 +2043,7 @@ gst_alpha_set_process_function (GstAlpha * alpha) alpha->process = gst_alpha_chroma_key_ayuv_argb; break; case GST_VIDEO_FORMAT_I420: + case GST_VIDEO_FORMAT_YV12: alpha->process = gst_alpha_chroma_key_i420_argb; break; case GST_VIDEO_FORMAT_ARGB: @@ -2079,6 +2086,7 @@ gst_alpha_set_process_function (GstAlpha * alpha) alpha->process = gst_alpha_chroma_key_ayuv_abgr; break; case GST_VIDEO_FORMAT_I420: + case GST_VIDEO_FORMAT_YV12: alpha->process = gst_alpha_chroma_key_i420_abgr; break; case GST_VIDEO_FORMAT_ARGB: @@ -2121,6 +2129,7 @@ gst_alpha_set_process_function (GstAlpha * alpha) alpha->process = gst_alpha_chroma_key_ayuv_rgba; break; case GST_VIDEO_FORMAT_I420: + case GST_VIDEO_FORMAT_YV12: alpha->process = gst_alpha_chroma_key_i420_rgba; break; case GST_VIDEO_FORMAT_ARGB: @@ -2163,6 +2172,7 @@ gst_alpha_set_process_function (GstAlpha * alpha) alpha->process = gst_alpha_chroma_key_ayuv_bgra; break; case GST_VIDEO_FORMAT_I420: + case GST_VIDEO_FORMAT_YV12: alpha->process = gst_alpha_chroma_key_i420_bgra; break; case GST_VIDEO_FORMAT_ARGB: