summaryrefslogtreecommitdiffstats
path: root/gst/effectv/gstvertigo.c
diff options
context:
space:
mode:
Diffstat (limited to 'gst/effectv/gstvertigo.c')
-rw-r--r--gst/effectv/gstvertigo.c147
1 files changed, 79 insertions, 68 deletions
diff --git a/gst/effectv/gstvertigo.c b/gst/effectv/gstvertigo.c
index 06e795ea..6faa8cb2 100644
--- a/gst/effectv/gstvertigo.c
+++ b/gst/effectv/gstvertigo.c
@@ -19,8 +19,8 @@
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
- */
-
+ */
+
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -62,7 +62,7 @@ struct _GstVertigoTVClass
{
GstVideofilterClass parent_class;
- void (*reset) (GstElement *element);
+ void (*reset) (GstElement * element);
};
/* Filter signals and args */
@@ -80,28 +80,31 @@ enum
ARG_ZOOM_SPEED,
};
-static void gst_vertigotv_base_init (gpointer g_class);
-static void gst_vertigotv_class_init (GstVertigoTVClass * klass, gpointer class_data);
-static void gst_vertigotv_init (GTypeInstance *instance, gpointer g_class);
-static void gst_vertigotv_setup (GstVideofilter *videofilter);
+static void gst_vertigotv_base_init (gpointer g_class);
+static void gst_vertigotv_class_init (GstVertigoTVClass * klass,
+ gpointer class_data);
+static void gst_vertigotv_init (GTypeInstance * instance, gpointer g_class);
+static void gst_vertigotv_setup (GstVideofilter * videofilter);
-static void gst_vertigotv_reset_handler (GstElement *element);
+static void gst_vertigotv_reset_handler (GstElement * element);
-static void gst_vertigotv_set_property (GObject * object, guint prop_id,
- const GValue * value, GParamSpec * pspec);
-static void gst_vertigotv_get_property (GObject * object, guint prop_id,
- GValue * value, GParamSpec * pspec);
-static void gst_vertigotv_rgb32 (GstVideofilter *videofilter, void *d, void *s);
+static void gst_vertigotv_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec);
+static void gst_vertigotv_get_property (GObject * object, guint prop_id,
+ GValue * value, GParamSpec * pspec);
+static void gst_vertigotv_rgb32 (GstVideofilter * videofilter, void *d,
+ void *s);
static guint gst_vertigotv_signals[LAST_SIGNAL] = { 0 };
-GType gst_vertigotv_get_type (void)
+GType
+gst_vertigotv_get_type (void)
{
static GType vertigotv_type = 0;
if (!vertigotv_type) {
static const GTypeInfo vertigotv_info = {
- sizeof (GstVertigoTVClass),
+ sizeof (GstVertigoTVClass),
gst_vertigotv_base_init,
NULL,
(GClassInitFunc) gst_vertigotv_class_init,
@@ -112,33 +115,34 @@ GType gst_vertigotv_get_type (void)
(GInstanceInitFunc) gst_vertigotv_init,
};
- vertigotv_type = g_type_register_static (GST_TYPE_VIDEOFILTER, "GstVertigoTV", &vertigotv_info, 0);
+ vertigotv_type =
+ g_type_register_static (GST_TYPE_VIDEOFILTER, "GstVertigoTV",
+ &vertigotv_info, 0);
}
return vertigotv_type;
}
static GstVideofilterFormat gst_vertigotv_formats[] = {
- { "RGB ", 32, gst_vertigotv_rgb32, 24, G_BIG_ENDIAN, 0x0000ff00, 0x00ff0000, 0xff000000 }
+ {"RGB ", 32, gst_vertigotv_rgb32, 24, G_BIG_ENDIAN, 0x0000ff00, 0x00ff0000,
+ 0xff000000}
};
static void
gst_vertigotv_base_init (gpointer g_class)
{
/* elementfactory information */
- static GstElementDetails vertigotv_details = GST_ELEMENT_DETAILS (
- "VertigoTV",
- "Filter/Effect/Video",
- "A loopback alpha blending effector with rotating and scaling",
- "Wim Taymans <wim.taymans@chello.be>"
- );
+ static GstElementDetails vertigotv_details = GST_ELEMENT_DETAILS ("VertigoTV",
+ "Filter/Effect/Video",
+ "A loopback alpha blending effector with rotating and scaling",
+ "Wim Taymans <wim.taymans@chello.be>");
GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
GstVideofilterClass *videofilter_class = GST_VIDEOFILTER_CLASS (g_class);
int i;
-
+
gst_element_class_set_details (element_class, &vertigotv_details);
- for(i=0;i<G_N_ELEMENTS(gst_vertigotv_formats);i++){
- gst_videofilter_class_add_format(videofilter_class,
+ for (i = 0; i < G_N_ELEMENTS (gst_vertigotv_formats); i++) {
+ gst_videofilter_class_add_format (videofilter_class,
gst_vertigotv_formats + i);
}
@@ -157,22 +161,20 @@ gst_vertigotv_class_init (GstVertigoTVClass * klass, gpointer class_data)
videofilter_class = GST_VIDEOFILTER_CLASS (klass);
gst_vertigotv_signals[RESET_SIGNAL] =
- g_signal_new ("reset-parms",
- G_TYPE_FROM_CLASS (klass),
- G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
- G_STRUCT_OFFSET (GstVertigoTVClass, reset),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
+ g_signal_new ("reset-parms",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION,
+ G_STRUCT_OFFSET (GstVertigoTVClass, reset),
+ NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0);
klass->reset = gst_vertigotv_reset_handler;
-
+
g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_SPEED,
- g_param_spec_float ("speed","Speed","Control the speed of movement",
- 0.01, 100.0, 0.02, G_PARAM_READWRITE));
+ g_param_spec_float ("speed", "Speed", "Control the speed of movement",
+ 0.01, 100.0, 0.02, G_PARAM_READWRITE));
g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_ZOOM_SPEED,
- g_param_spec_float ("zoom_speed","Zoom Speed","Control the rate of zooming",
- 1.01, 1.1, 1.01, G_PARAM_READWRITE));
+ g_param_spec_float ("zoom_speed", "Zoom Speed",
+ "Control the rate of zooming", 1.01, 1.1, 1.01, G_PARAM_READWRITE));
gobject_class->set_property = gst_vertigotv_set_property;
gobject_class->get_property = gst_vertigotv_get_property;
@@ -181,7 +183,7 @@ gst_vertigotv_class_init (GstVertigoTVClass * klass, gpointer class_data)
}
static void
-gst_vertigotv_reset_handler (GstElement *element)
+gst_vertigotv_reset_handler (GstElement * element)
{
GstVertigoTV *filter = GST_VERTIGOTV (element);
@@ -190,16 +192,16 @@ gst_vertigotv_reset_handler (GstElement *element)
filter->zoomrate = 1.01;
}
-static void
-gst_vertigotv_setup(GstVideofilter *videofilter)
+static void
+gst_vertigotv_setup (GstVideofilter * videofilter)
{
GstVertigoTV *filter;
gint area;
- int width = gst_videofilter_get_input_width(videofilter);
- int height = gst_videofilter_get_input_height(videofilter);
+ int width = gst_videofilter_get_input_width (videofilter);
+ int height = gst_videofilter_get_input_height (videofilter);
- g_return_if_fail(GST_IS_VERTIGOTV(videofilter));
- filter = GST_VERTIGOTV(videofilter);
+ g_return_if_fail (GST_IS_VERTIGOTV (videofilter));
+ filter = GST_VERTIGOTV (videofilter);
filter->width = width;
filter->height = height;
@@ -207,16 +209,16 @@ gst_vertigotv_setup(GstVideofilter *videofilter)
area = width * height;
g_free (filter->buffer);
- filter->buffer = (guint32 *) g_malloc (area * 2 * sizeof(guint32));
+ filter->buffer = (guint32 *) g_malloc (area * 2 * sizeof (guint32));
- memset (filter->buffer, 0, area * 2 * sizeof(guint32));
+ memset (filter->buffer, 0, area * 2 * sizeof (guint32));
filter->current_buffer = filter->buffer;
filter->alt_buffer = filter->buffer + area;
filter->phase = 0;
}
static void
-gst_vertigotv_init (GTypeInstance *instance, gpointer g_class)
+gst_vertigotv_init (GTypeInstance * instance, gpointer g_class)
{
GstVertigoTV *filter = GST_VERTIGOTV (instance);
@@ -226,36 +228,40 @@ gst_vertigotv_init (GTypeInstance *instance, gpointer g_class)
filter->zoomrate = 1.01;
}
-static void
-gst_vertigotv_set_parms (GstVertigoTV *filter)
+static void
+gst_vertigotv_set_parms (GstVertigoTV * filter)
{
double vx, vy;
double t;
double x, y;
double dizz;
- dizz = sin (filter->phase) * 10 + sin (filter->phase*1.9+5) * 5;
+ dizz = sin (filter->phase) * 10 + sin (filter->phase * 1.9 + 5) * 5;
x = filter->width / 2;
y = filter->height / 2;
- t = (x*x + y*y) * filter->zoomrate;
+ t = (x * x + y * y) * filter->zoomrate;
if (filter->width > filter->height) {
if (dizz >= 0) {
- if (dizz > x) dizz = x;
- vx = (x * (x - dizz) + y * y) / t;
+ if (dizz > x)
+ dizz = x;
+ vx = (x * (x - dizz) + y * y) / t;
} else {
- if (dizz < -x) dizz = -x;
+ if (dizz < -x)
+ dizz = -x;
vx = (x * (x + dizz) + y * y) / t;
}
vy = (dizz * y) / t;
} else {
if (dizz >= 0) {
- if (dizz > y) dizz = y;
+ if (dizz > y)
+ dizz = y;
vx = (x * x + y * (y - dizz)) / t;
} else {
- if (dizz < -y) dizz = -y;
+ if (dizz < -y)
+ dizz = -y;
vx = (x * x + y * (y + dizz)) / t;
}
vy = (dizz * x) / t;
@@ -266,11 +272,12 @@ gst_vertigotv_set_parms (GstVertigoTV *filter)
filter->sy = (-vx * y - vy * x + y + sin (filter->phase * 6) * 2) * 65536;
filter->phase += filter->phase_increment;
- if (filter->phase > 5700000) filter->phase = 0;
+ if (filter->phase > 5700000)
+ filter->phase = 0;
}
-
-static void
-gst_vertigotv_rgb32 (GstVideofilter *videofilter, void *d, void *s)
+
+static void
+gst_vertigotv_rgb32 (GstVideofilter * videofilter, void *d, void *s)
{
GstVertigoTV *filter;
guint32 *src, *dest;
@@ -299,12 +306,14 @@ gst_vertigotv_rgb32 (GstVideofilter *videofilter, void *d, void *s)
for (x = width; x > 0; x--) {
i = (oy >> 16) * width + (ox >> 16);
- if (i < 0) i = 0;
- if (i >= area) i = area;
-
+ if (i < 0)
+ i = 0;
+ if (i >= area)
+ i = area;
+
v = filter->current_buffer[i] & 0xfcfcff;
v = (v * 3) + ((*src++) & 0xfcfcff);
-
+
*p++ = (v >> 2);
ox += filter->dx;
oy += filter->dy;
@@ -313,7 +322,7 @@ gst_vertigotv_rgb32 (GstVideofilter *videofilter, void *d, void *s)
filter->sy += filter->dx;
}
- memcpy(dest, filter->alt_buffer, area * sizeof(guint32));
+ memcpy (dest, filter->alt_buffer, area * sizeof (guint32));
p = filter->current_buffer;
filter->current_buffer = filter->alt_buffer;
@@ -321,7 +330,8 @@ gst_vertigotv_rgb32 (GstVideofilter *videofilter, void *d, void *s)
}
static void
-gst_vertigotv_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec)
+gst_vertigotv_set_property (GObject * object, guint prop_id,
+ const GValue * value, GParamSpec * pspec)
{
GstVertigoTV *filter;
@@ -343,7 +353,8 @@ gst_vertigotv_set_property (GObject * object, guint prop_id, const GValue * valu
}
static void
-gst_vertigotv_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec)
+gst_vertigotv_get_property (GObject * object, guint prop_id, GValue * value,
+ GParamSpec * pspec)
{
GstVertigoTV *filter;