From: Edward Hervey Date: Wed, 4 Jan 2012 12:25:40 +0000 (+0100) Subject: alpha: Refactor param/process functions X-Git-Tag: 1.19.3~509^2~7452 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4b2a0aba06496b088e2f00c7cc87a6aca4eec88d;p=platform%2Fupstream%2Fgstreamer.git alpha: Refactor param/process functions When ::set_info() is called, the input/output VideoInfo aren't set yet on the videofilter. --- diff --git a/gst/alpha/gstalpha.c b/gst/alpha/gstalpha.c index 001f383..c802c64 100644 --- a/gst/alpha/gstalpha.c +++ b/gst/alpha/gstalpha.c @@ -167,8 +167,12 @@ static gboolean gst_alpha_set_info (GstVideoFilter * filter, static GstFlowReturn gst_alpha_transform_frame (GstVideoFilter * filter, GstVideoFrame * in_frame, GstVideoFrame * out_frame); +static void gst_alpha_init_params_full (GstAlpha * alpha, + const GstVideoFormatInfo * in_info, const GstVideoFormatInfo * out_info); static void gst_alpha_init_params (GstAlpha * alpha); static gboolean gst_alpha_set_process_function (GstAlpha * alpha); +static gboolean gst_alpha_set_process_function_full (GstAlpha * alpha, + GstVideoInfo * in_info, GstVideoInfo * out_info); static void gst_alpha_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); @@ -524,10 +528,11 @@ gst_alpha_set_info (GstVideoFilter * filter, gst_base_transform_set_passthrough (GST_BASE_TRANSFORM_CAST (filter), passthrough); - if (!gst_alpha_set_process_function (alpha) && !passthrough) + if (!gst_alpha_set_process_function_full (alpha, in_info, out_info) + && !passthrough) goto no_process; - gst_alpha_init_params (alpha); + gst_alpha_init_params_full (alpha, in_info->finfo, out_info->finfo); GST_ALPHA_UNLOCK (alpha); @@ -2286,18 +2291,15 @@ gst_alpha_chroma_key_packed_422_argb (const GstVideoFrame * in_frame, /* Protected with the alpha lock */ static void -gst_alpha_init_params (GstAlpha * alpha) +gst_alpha_init_params_full (GstAlpha * alpha, + const GstVideoFormatInfo * in_info, const GstVideoFormatInfo * out_info) { gfloat kgl; gfloat tmp; gfloat tmp1, tmp2; gfloat y; - const GstVideoFormatInfo *in_info, *out_info; const gint *matrix; - in_info = GST_VIDEO_FILTER (alpha)->in_info.finfo; - out_info = GST_VIDEO_FILTER (alpha)->out_info.finfo; - /* RGB->RGB: convert to SDTV YUV, chroma keying, convert back * YUV->RGB: chroma keying, convert to RGB * RGB->YUV: convert to YUV, chroma keying @@ -2356,17 +2358,20 @@ gst_alpha_init_params (GstAlpha * alpha) alpha->noise_level2 = alpha->noise_level * alpha->noise_level; } +static void +gst_alpha_init_params (GstAlpha * alpha) +{ + gst_alpha_init_params_full (alpha, GST_VIDEO_FILTER (alpha)->in_info.finfo, + GST_VIDEO_FILTER (alpha)->out_info.finfo); +} + /* Protected with the alpha lock */ static gboolean -gst_alpha_set_process_function (GstAlpha * alpha) +gst_alpha_set_process_function_full (GstAlpha * alpha, GstVideoInfo * in_info, + GstVideoInfo * out_info) { - GstVideoInfo *in_info, *out_info; - alpha->process = NULL; - in_info = &GST_VIDEO_FILTER_CAST (alpha)->in_info; - out_info = &GST_VIDEO_FILTER_CAST (alpha)->out_info; - switch (alpha->method) { case ALPHA_METHOD_SET: switch (GST_VIDEO_INFO_FORMAT (out_info)) { @@ -2536,6 +2541,14 @@ gst_alpha_set_process_function (GstAlpha * alpha) return alpha->process != NULL; } +static gboolean +gst_alpha_set_process_function (GstAlpha * alpha) +{ + return gst_alpha_set_process_function_full (alpha, + &GST_VIDEO_FILTER_CAST (alpha)->in_info, + &GST_VIDEO_FILTER_CAST (alpha)->out_info); +} + static void gst_alpha_before_transform (GstBaseTransform * btrans, GstBuffer * buf) {