mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 12:11:13 +00:00
gaudieffects: consistency fixes in gstgaussblur
This commit is contained in:
parent
c7949405ca
commit
f805f9e079
2 changed files with 44 additions and 42 deletions
|
@ -69,16 +69,17 @@
|
||||||
#include "gstplugin.h"
|
#include "gstplugin.h"
|
||||||
#include "gstgaussblur.h"
|
#include "gstgaussblur.h"
|
||||||
|
|
||||||
static void gauss_blur_stop (GObject * object);
|
static void gst_gaussianblur_finalize (GObject * object);
|
||||||
|
|
||||||
static gboolean gauss_blur_set_info (GstVideoFilter * filter, GstCaps * incaps,
|
static gboolean gst_gaussianblur_set_info (GstVideoFilter * filter,
|
||||||
GstVideoInfo * in_info, GstCaps * outcaps, GstVideoInfo * out_info);
|
GstCaps * incaps, GstVideoInfo * in_info, GstCaps * outcaps,
|
||||||
static GstFlowReturn gauss_blur_transform_frame (GstVideoFilter * vfilter,
|
GstVideoInfo * out_info);
|
||||||
|
static GstFlowReturn gst_gaussianblur_transform_frame (GstVideoFilter * vfilter,
|
||||||
GstVideoFrame * in_frame, GstVideoFrame * out_frame);
|
GstVideoFrame * in_frame, GstVideoFrame * out_frame);
|
||||||
|
|
||||||
static void gauss_blur_set_property (GObject * object,
|
static void gst_gaussianblur_set_property (GObject * object,
|
||||||
guint prop_id, const GValue * value, GParamSpec * pspec);
|
guint prop_id, const GValue * value, GParamSpec * pspec);
|
||||||
static void gauss_blur_get_property (GObject * object,
|
static void gst_gaussianblur_get_property (GObject * object,
|
||||||
guint prop_id, GValue * value, GParamSpec * pspec);
|
guint prop_id, GValue * value, GParamSpec * pspec);
|
||||||
|
|
||||||
GST_DEBUG_CATEGORY_STATIC (gst_gauss_blur_debug);
|
GST_DEBUG_CATEGORY_STATIC (gst_gauss_blur_debug);
|
||||||
|
@ -112,24 +113,25 @@ enum
|
||||||
PROP_LAST
|
PROP_LAST
|
||||||
};
|
};
|
||||||
|
|
||||||
static gboolean make_gaussian_kernel (GaussBlur * gb, float sigma);
|
static gboolean make_gaussian_kernel (GstGaussianBlur * gb, float sigma);
|
||||||
static void gaussian_smooth (GaussBlur * gb, guint8 * image,
|
static void gaussian_smooth (GstGaussianBlur * gb, guint8 * image,
|
||||||
guint8 * out_image);
|
guint8 * out_image);
|
||||||
|
|
||||||
#define gauss_blur_parent_class parent_class
|
#define gst_gaussianblur_parent_class parent_class
|
||||||
G_DEFINE_TYPE (GaussBlur, gauss_blur, GST_TYPE_VIDEO_FILTER);
|
G_DEFINE_TYPE (GstGaussianBlur, gst_gaussianblur, GST_TYPE_VIDEO_FILTER);
|
||||||
|
|
||||||
#define DEFAULT_SIGMA 1.2
|
#define DEFAULT_SIGMA 1.2
|
||||||
|
|
||||||
|
/* Initalize the gaussianblur's class. */
|
||||||
static void
|
static void
|
||||||
gauss_blur_class_init (GaussBlurClass * klass)
|
gst_gaussianblur_class_init (GstGaussianBlurClass * klass)
|
||||||
{
|
{
|
||||||
GObjectClass *object_class = (GObjectClass *) klass;
|
GObjectClass *gobject_class = (GObjectClass *) klass;
|
||||||
GstElementClass *gstelement_class = (GstElementClass *) klass;
|
GstElementClass *gstelement_class = (GstElementClass *) klass;
|
||||||
GstVideoFilterClass *vfilter_class = (GstVideoFilterClass *) klass;
|
GstVideoFilterClass *vfilter_class = (GstVideoFilterClass *) klass;
|
||||||
|
|
||||||
gst_element_class_set_details_simple (gstelement_class,
|
gst_element_class_set_details_simple (gstelement_class,
|
||||||
"GaussBlur",
|
"GstGaussianBlur",
|
||||||
"Filter/Effect/Video",
|
"Filter/Effect/Video",
|
||||||
"Perform Gaussian blur/sharpen on a video",
|
"Perform Gaussian blur/sharpen on a video",
|
||||||
"Jan Schmidt <thaytan@noraisin.net>");
|
"Jan Schmidt <thaytan@noraisin.net>");
|
||||||
|
@ -139,26 +141,26 @@ gauss_blur_class_init (GaussBlurClass * klass)
|
||||||
gst_element_class_add_pad_template (gstelement_class,
|
gst_element_class_add_pad_template (gstelement_class,
|
||||||
gst_static_pad_template_get (&sink_factory));
|
gst_static_pad_template_get (&sink_factory));
|
||||||
|
|
||||||
object_class->set_property = gauss_blur_set_property;
|
gobject_class->set_property = gst_gaussianblur_set_property;
|
||||||
object_class->get_property = gauss_blur_get_property;
|
gobject_class->get_property = gst_gaussianblur_get_property;
|
||||||
object_class->finalize = GST_DEBUG_FUNCPTR (gauss_blur_stop);
|
gobject_class->finalize = GST_DEBUG_FUNCPTR (gst_gaussianblur_finalize);
|
||||||
|
|
||||||
g_object_class_install_property (object_class, PROP_SIGMA,
|
g_object_class_install_property (gobject_class, PROP_SIGMA,
|
||||||
g_param_spec_double ("sigma", "Sigma",
|
g_param_spec_double ("sigma", "Sigma",
|
||||||
"Sigma value for gaussian blur (negative for sharpen)",
|
"Sigma value for gaussian blur (negative for sharpen)",
|
||||||
-20.0, 20.0, DEFAULT_SIGMA,
|
-20.0, 20.0, DEFAULT_SIGMA,
|
||||||
G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
|
G_PARAM_READWRITE | GST_PARAM_CONTROLLABLE | G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
vfilter_class->transform_frame =
|
vfilter_class->transform_frame =
|
||||||
GST_DEBUG_FUNCPTR (gauss_blur_transform_frame);
|
GST_DEBUG_FUNCPTR (gst_gaussianblur_transform_frame);
|
||||||
vfilter_class->set_info = GST_DEBUG_FUNCPTR (gauss_blur_set_info);
|
vfilter_class->set_info = GST_DEBUG_FUNCPTR (gst_gaussianblur_set_info);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gauss_blur_set_info (GstVideoFilter * filter, GstCaps * incaps,
|
gst_gaussianblur_set_info (GstVideoFilter * filter, GstCaps * incaps,
|
||||||
GstVideoInfo * in_info, GstCaps * outcaps, GstVideoInfo * out_info)
|
GstVideoInfo * in_info, GstCaps * outcaps, GstVideoInfo * out_info)
|
||||||
{
|
{
|
||||||
GaussBlur *gb = GAUSS_BLUR (filter);
|
GstGaussianBlur *gb = GST_GAUSSIANBLUR (filter);
|
||||||
guint32 n_elems;
|
guint32 n_elems;
|
||||||
|
|
||||||
gb->width = GST_VIDEO_INFO_WIDTH (in_info);
|
gb->width = GST_VIDEO_INFO_WIDTH (in_info);
|
||||||
|
@ -173,16 +175,16 @@ gauss_blur_set_info (GstVideoFilter * filter, GstCaps * incaps,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gauss_blur_init (GaussBlur * gb)
|
gst_gaussianblur_init (GstGaussianBlur * gb)
|
||||||
{
|
{
|
||||||
gb->sigma = DEFAULT_SIGMA;
|
gb->sigma = DEFAULT_SIGMA;
|
||||||
gb->cur_sigma = -1.0;
|
gb->cur_sigma = -1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gauss_blur_stop (GObject * object)
|
gst_gaussianblur_finalize (GObject * object)
|
||||||
{
|
{
|
||||||
GaussBlur *gb = GAUSS_BLUR (object);
|
GstGaussianBlur *gb = GST_GAUSSIANBLUR (object);
|
||||||
|
|
||||||
g_free (gb->tempim);
|
g_free (gb->tempim);
|
||||||
gb->tempim = NULL;
|
gb->tempim = NULL;
|
||||||
|
@ -199,10 +201,10 @@ gauss_blur_stop (GObject * object)
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstFlowReturn
|
static GstFlowReturn
|
||||||
gauss_blur_transform_frame (GstVideoFilter * vfilter,
|
gst_gaussianblur_transform_frame (GstVideoFilter * vfilter,
|
||||||
GstVideoFrame * in_frame, GstVideoFrame * out_frame)
|
GstVideoFrame * in_frame, GstVideoFrame * out_frame)
|
||||||
{
|
{
|
||||||
GaussBlur *filter = GAUSS_BLUR (vfilter);
|
GstGaussianBlur *filter = GST_GAUSSIANBLUR (vfilter);
|
||||||
GstClockTime timestamp;
|
GstClockTime timestamp;
|
||||||
gint64 stream_time;
|
gint64 stream_time;
|
||||||
gfloat sigma;
|
gfloat sigma;
|
||||||
|
@ -251,7 +253,7 @@ gauss_blur_transform_frame (GstVideoFilter * vfilter,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
blur_row_x (GaussBlur * gb, guint8 * in_row, gfloat * out_row)
|
blur_row_x (GstGaussianBlur * gb, guint8 * in_row, gfloat * out_row)
|
||||||
{
|
{
|
||||||
int c, cc, center;
|
int c, cc, center;
|
||||||
float dot[4], sum;
|
float dot[4], sum;
|
||||||
|
@ -289,7 +291,7 @@ blur_row_x (GaussBlur * gb, guint8 * in_row, gfloat * out_row)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gaussian_smooth (GaussBlur * gb, guint8 * image, guint8 * out_image)
|
gaussian_smooth (GstGaussianBlur * gb, guint8 * image, guint8 * out_image)
|
||||||
{
|
{
|
||||||
int r, c, rr, center;
|
int r, c, rr, center;
|
||||||
float dot[4], sum;
|
float dot[4], sum;
|
||||||
|
@ -353,7 +355,7 @@ gaussian_smooth (GaussBlur * gb, guint8 * image, guint8 * out_image)
|
||||||
* Create a one dimensional gaussian kernel.
|
* Create a one dimensional gaussian kernel.
|
||||||
*/
|
*/
|
||||||
static gboolean
|
static gboolean
|
||||||
make_gaussian_kernel (GaussBlur * gb, float sigma)
|
make_gaussian_kernel (GstGaussianBlur * gb, float sigma)
|
||||||
{
|
{
|
||||||
int i, center, left, right;
|
int i, center, left, right;
|
||||||
float sum, sum2;
|
float sum, sum2;
|
||||||
|
@ -416,10 +418,10 @@ make_gaussian_kernel (GaussBlur * gb, float sigma)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gauss_blur_set_property (GObject * object,
|
gst_gaussianblur_set_property (GObject * object,
|
||||||
guint prop_id, const GValue * value, GParamSpec * pspec)
|
guint prop_id, const GValue * value, GParamSpec * pspec)
|
||||||
{
|
{
|
||||||
GaussBlur *gb = GAUSS_BLUR (object);
|
GstGaussianBlur *gb = GST_GAUSSIANBLUR (object);
|
||||||
switch (prop_id) {
|
switch (prop_id) {
|
||||||
case PROP_SIGMA:
|
case PROP_SIGMA:
|
||||||
GST_OBJECT_LOCK (object);
|
GST_OBJECT_LOCK (object);
|
||||||
|
@ -433,10 +435,10 @@ gauss_blur_set_property (GObject * object,
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gauss_blur_get_property (GObject * object,
|
gst_gaussianblur_get_property (GObject * object,
|
||||||
guint prop_id, GValue * value, GParamSpec * pspec)
|
guint prop_id, GValue * value, GParamSpec * pspec)
|
||||||
{
|
{
|
||||||
GaussBlur *gb = GAUSS_BLUR (object);
|
GstGaussianBlur *gb = GST_GAUSSIANBLUR (object);
|
||||||
switch (prop_id) {
|
switch (prop_id) {
|
||||||
case PROP_SIGMA:
|
case PROP_SIGMA:
|
||||||
GST_OBJECT_LOCK (gb);
|
GST_OBJECT_LOCK (gb);
|
||||||
|
@ -458,5 +460,5 @@ gst_gauss_blur_plugin_init (GstPlugin * plugin)
|
||||||
0, "Gaussian Blur video effect");
|
0, "Gaussian Blur video effect");
|
||||||
|
|
||||||
return gst_element_register (plugin, "gaussianblur", GST_RANK_NONE,
|
return gst_element_register (plugin, "gaussianblur", GST_RANK_NONE,
|
||||||
GST_TYPE_GAUSS_BLUR);
|
GST_TYPE_GAUSSIANBLUR);
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,14 +54,14 @@
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#define GST_TYPE_GAUSS_BLUR (gauss_blur_get_type())
|
#define GST_TYPE_GAUSSIANBLUR (gst_gaussianblur_get_type())
|
||||||
#define GAUSS_BLUR(obj) \
|
#define GST_GAUSSIANBLUR(obj) \
|
||||||
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GAUSS_BLUR, GaussBlur))
|
(G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_GAUSSIANBLUR, GstGaussianBlur))
|
||||||
|
|
||||||
typedef struct GaussBlur GaussBlur;
|
typedef struct GstGaussianBlur GstGaussianBlur;
|
||||||
typedef struct GaussBlurClass GaussBlurClass;
|
typedef struct GstGaussianBlurClass GstGaussianBlurClass;
|
||||||
|
|
||||||
struct GaussBlur
|
struct GstGaussianBlur
|
||||||
{
|
{
|
||||||
GstVideoFilter videofilter;
|
GstVideoFilter videofilter;
|
||||||
gint width, height, stride;
|
gint width, height, stride;
|
||||||
|
@ -75,12 +75,12 @@ struct GaussBlur
|
||||||
gint16 *smoothedim;
|
gint16 *smoothedim;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct GaussBlurClass
|
struct GstGaussianBlurClass
|
||||||
{
|
{
|
||||||
GstVideoFilterClass parent_class;
|
GstVideoFilterClass parent_class;
|
||||||
};
|
};
|
||||||
|
|
||||||
GType gauss_blur_get_type(void);
|
GType gst_gaussianblur_get_type(void);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue