diff options
author | Edward Hervey <edward.hervey@collabora.co.uk> | 2012-01-04 13:25:40 +0100 |
---|---|---|
committer | Edward Hervey <edward.hervey@collabora.co.uk> | 2012-01-04 13:25:40 +0100 |
commit | 4b2a0aba06496b088e2f00c7cc87a6aca4eec88d (patch) | |
tree | 5152cfd41a3ddd97067ba100849eaf5e80d8585d /gst/alpha | |
parent | 47a1da9076a6124659084497dfb079d64cd5b050 (diff) | |
download | gstreamer-plugins-good-4b2a0aba06496b088e2f00c7cc87a6aca4eec88d.tar.gz |
alpha: Refactor param/process functions
When ::set_info() is called, the input/output VideoInfo aren't set
yet on the videofilter.
Diffstat (limited to 'gst/alpha')
-rw-r--r-- | gst/alpha/gstalpha.c | 39 |
1 files changed, 26 insertions, 13 deletions
diff --git a/gst/alpha/gstalpha.c b/gst/alpha/gstalpha.c index 001f383ed..c802c64e6 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) { |