mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-11 08:52:39 +00:00
gst-libs/gst/colorbalance/colorbalance.c: Adding a default type.
Original commit message from CVS: 2004-01-14 Julien MOUTTE <julien@moutte.net> * gst-libs/gst/colorbalance/colorbalance.c: (gst_color_balance_class_init): Adding a default type. * gst-libs/gst/colorbalance/colorbalance.h: Adding a macro to access the type. * gst/videofilter/gstvideobalance.c: (gst_videobalance_get_type), (gst_videobalance_dispose), (gst_videobalance_class_init), (gst_videobalance_init), (gst_videobalance_interface_supported), (gst_videobalance_interface_init), (gst_videobalance_colorbalance_list_channels), (gst_videobalance_colorbalance_set_value), (gst_videobalance_colorbalance_get_value), (gst_videobalance_colorbalance_init): Implementing colorbalance interface. * gst/videofilter/gstvideobalance.h: Adding colorbalance channels list. * sys/ximage/ximagesink.c: (gst_ximagesink_set_xwindow_id): Fixing a bug which was triggering a BadAccess X error when setting an overlay before pad was really negotiated. * sys/xvimage/xvimagesink.c: (gst_xvimagesink_colorbalance_init): Using the colorbalance type macro.
This commit is contained in:
parent
a4a8359daa
commit
0d9c9217ec
3 changed files with 176 additions and 2 deletions
23
ChangeLog
23
ChangeLog
|
@ -1,3 +1,26 @@
|
||||||
|
2004-01-14 Julien MOUTTE <julien@moutte.net>
|
||||||
|
|
||||||
|
* gst-libs/gst/colorbalance/colorbalance.c:
|
||||||
|
(gst_color_balance_class_init): Adding a default type.
|
||||||
|
* gst-libs/gst/colorbalance/colorbalance.h: Adding a macro to access
|
||||||
|
the type.
|
||||||
|
* gst/videofilter/gstvideobalance.c: (gst_videobalance_get_type),
|
||||||
|
(gst_videobalance_dispose), (gst_videobalance_class_init),
|
||||||
|
(gst_videobalance_init), (gst_videobalance_interface_supported),
|
||||||
|
(gst_videobalance_interface_init),
|
||||||
|
(gst_videobalance_colorbalance_list_channels),
|
||||||
|
(gst_videobalance_colorbalance_set_value),
|
||||||
|
(gst_videobalance_colorbalance_get_value),
|
||||||
|
(gst_videobalance_colorbalance_init): Implementing colorbalance
|
||||||
|
interface.
|
||||||
|
* gst/videofilter/gstvideobalance.h: Adding colorbalance channels
|
||||||
|
list.
|
||||||
|
* sys/ximage/ximagesink.c: (gst_ximagesink_set_xwindow_id): Fixing a
|
||||||
|
bug which was triggering a BadAccess X error when setting an overlay
|
||||||
|
before pad was really negotiated.
|
||||||
|
* sys/xvimage/xvimagesink.c: (gst_xvimagesink_colorbalance_init):
|
||||||
|
Using the colorbalance type macro.
|
||||||
|
|
||||||
2004-01-14 Benjamin Otte <in7y118@public.uni-hamburg.de>
|
2004-01-14 Benjamin Otte <in7y118@public.uni-hamburg.de>
|
||||||
|
|
||||||
* ext/flac/gstflacenc.c: (gst_flacenc_set_metadata),
|
* ext/flac/gstflacenc.c: (gst_flacenc_set_metadata),
|
||||||
|
|
|
@ -32,6 +32,8 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
|
#include <gst/colorbalance/colorbalance.h>
|
||||||
|
|
||||||
/* GstVideobalance signals and args */
|
/* GstVideobalance signals and args */
|
||||||
enum {
|
enum {
|
||||||
/* FILL ME */
|
/* FILL ME */
|
||||||
|
@ -47,6 +49,8 @@ enum {
|
||||||
/* FILL ME */
|
/* FILL ME */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static GstVideofilterClass *parent_class = NULL;
|
||||||
|
|
||||||
static void gst_videobalance_base_init (gpointer g_class);
|
static void gst_videobalance_base_init (gpointer g_class);
|
||||||
static void gst_videobalance_class_init (gpointer g_class, gpointer class_data);
|
static void gst_videobalance_class_init (gpointer g_class, gpointer class_data);
|
||||||
static void gst_videobalance_init (GTypeInstance *instance, gpointer g_class);
|
static void gst_videobalance_init (GTypeInstance *instance, gpointer g_class);
|
||||||
|
@ -57,6 +61,11 @@ static void gst_videobalance_get_property (GObject *object, guint prop_id, GVal
|
||||||
static void gst_videobalance_planar411(GstVideofilter *videofilter, void *dest, void *src);
|
static void gst_videobalance_planar411(GstVideofilter *videofilter, void *dest, void *src);
|
||||||
static void gst_videobalance_setup(GstVideofilter *videofilter);
|
static void gst_videobalance_setup(GstVideofilter *videofilter);
|
||||||
|
|
||||||
|
static void gst_videobalance_interface_init (GstImplementsInterfaceClass *klass);
|
||||||
|
static void gst_videobalance_colorbalance_init (GstColorBalanceClass *iface);
|
||||||
|
|
||||||
|
static void gst_videobalance_dispose (GObject *object);
|
||||||
|
|
||||||
GType
|
GType
|
||||||
gst_videobalance_get_type (void)
|
gst_videobalance_get_type (void)
|
||||||
{
|
{
|
||||||
|
@ -74,8 +83,26 @@ gst_videobalance_get_type (void)
|
||||||
0,
|
0,
|
||||||
gst_videobalance_init,
|
gst_videobalance_init,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const GInterfaceInfo iface_info = {
|
||||||
|
(GInterfaceInitFunc) gst_videobalance_interface_init,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const GInterfaceInfo colorbalance_info = {
|
||||||
|
(GInterfaceInitFunc) gst_videobalance_colorbalance_init,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
};
|
||||||
|
|
||||||
videobalance_type = g_type_register_static(GST_TYPE_VIDEOFILTER,
|
videobalance_type = g_type_register_static(GST_TYPE_VIDEOFILTER,
|
||||||
"GstVideobalance", &videobalance_info, 0);
|
"GstVideobalance", &videobalance_info, 0);
|
||||||
|
|
||||||
|
g_type_add_interface_static (videobalance_type, GST_TYPE_IMPLEMENTS_INTERFACE,
|
||||||
|
&iface_info);
|
||||||
|
g_type_add_interface_static (videobalance_type, GST_TYPE_COLOR_BALANCE,
|
||||||
|
&colorbalance_info);
|
||||||
}
|
}
|
||||||
return videobalance_type;
|
return videobalance_type;
|
||||||
}
|
}
|
||||||
|
@ -108,6 +135,29 @@ gst_videobalance_base_init (gpointer g_class)
|
||||||
gst_videofilter_class_add_pad_templates (GST_VIDEOFILTER_CLASS (g_class));
|
gst_videofilter_class_add_pad_templates (GST_VIDEOFILTER_CLASS (g_class));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_videobalance_dispose (GObject *object)
|
||||||
|
{
|
||||||
|
GList *channels = NULL;
|
||||||
|
GstVideobalance *balance;
|
||||||
|
|
||||||
|
balance = GST_VIDEOBALANCE (object);
|
||||||
|
|
||||||
|
channels = balance->channels;
|
||||||
|
|
||||||
|
while (channels)
|
||||||
|
{
|
||||||
|
GstColorBalanceChannel *channel = channels->data;
|
||||||
|
g_object_unref (channel);
|
||||||
|
channels = g_list_next (channels);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (balance->channels)
|
||||||
|
g_list_free (balance->channels);
|
||||||
|
|
||||||
|
G_OBJECT_CLASS (parent_class)->dispose (object);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_videobalance_class_init (gpointer g_class, gpointer class_data)
|
gst_videobalance_class_init (gpointer g_class, gpointer class_data)
|
||||||
{
|
{
|
||||||
|
@ -117,6 +167,8 @@ gst_videobalance_class_init (gpointer g_class, gpointer class_data)
|
||||||
gobject_class = G_OBJECT_CLASS (g_class);
|
gobject_class = G_OBJECT_CLASS (g_class);
|
||||||
videofilter_class = GST_VIDEOFILTER_CLASS (g_class);
|
videofilter_class = GST_VIDEOFILTER_CLASS (g_class);
|
||||||
|
|
||||||
|
parent_class = g_type_class_ref (GST_TYPE_VIDEOFILTER);
|
||||||
|
|
||||||
g_object_class_install_property(gobject_class, ARG_CONTRAST,
|
g_object_class_install_property(gobject_class, ARG_CONTRAST,
|
||||||
g_param_spec_double("contrast","Contrast","contrast",
|
g_param_spec_double("contrast","Contrast","contrast",
|
||||||
0, 2, 1, G_PARAM_READWRITE));
|
0, 2, 1, G_PARAM_READWRITE));
|
||||||
|
@ -132,6 +184,7 @@ gst_videobalance_class_init (gpointer g_class, gpointer class_data)
|
||||||
|
|
||||||
gobject_class->set_property = gst_videobalance_set_property;
|
gobject_class->set_property = gst_videobalance_set_property;
|
||||||
gobject_class->get_property = gst_videobalance_get_property;
|
gobject_class->get_property = gst_videobalance_get_property;
|
||||||
|
gobject_class->dispose = gst_videobalance_dispose;
|
||||||
|
|
||||||
videofilter_class->setup = gst_videobalance_setup;
|
videofilter_class->setup = gst_videobalance_setup;
|
||||||
}
|
}
|
||||||
|
@ -141,6 +194,9 @@ gst_videobalance_init (GTypeInstance *instance, gpointer g_class)
|
||||||
{
|
{
|
||||||
GstVideobalance *videobalance = GST_VIDEOBALANCE (instance);
|
GstVideobalance *videobalance = GST_VIDEOBALANCE (instance);
|
||||||
GstVideofilter *videofilter;
|
GstVideofilter *videofilter;
|
||||||
|
char *channels[4] = { "HUE", "SATURATION",
|
||||||
|
"BRIGHTNESS", "CONTRAST" };
|
||||||
|
gint i;
|
||||||
|
|
||||||
GST_DEBUG("gst_videobalance_init");
|
GST_DEBUG("gst_videobalance_init");
|
||||||
|
|
||||||
|
@ -152,6 +208,100 @@ gst_videobalance_init (GTypeInstance *instance, gpointer g_class)
|
||||||
videobalance->saturation = 1;
|
videobalance->saturation = 1;
|
||||||
videobalance->hue = 0;
|
videobalance->hue = 0;
|
||||||
|
|
||||||
|
/* Generate the channels list */
|
||||||
|
for (i = 0; i < (sizeof (channels) / sizeof (char *)); i++)
|
||||||
|
{
|
||||||
|
GstColorBalanceChannel *channel;
|
||||||
|
|
||||||
|
channel = g_object_new (GST_TYPE_COLOR_BALANCE_CHANNEL, NULL);
|
||||||
|
channel->label = g_strdup (channels[i]);
|
||||||
|
channel->min_value = G_MININT;
|
||||||
|
channel->max_value = G_MAXINT;
|
||||||
|
|
||||||
|
videobalance->channels = g_list_append (videobalance->channels,
|
||||||
|
channel);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gst_videobalance_interface_supported (GstImplementsInterface *iface, GType type)
|
||||||
|
{
|
||||||
|
g_assert (type == GST_TYPE_COLOR_BALANCE);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_videobalance_interface_init (GstImplementsInterfaceClass *klass)
|
||||||
|
{
|
||||||
|
klass->supported = gst_videobalance_interface_supported;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const GList *
|
||||||
|
gst_videobalance_colorbalance_list_channels (GstColorBalance *balance)
|
||||||
|
{
|
||||||
|
GstVideobalance *videobalance = GST_VIDEOBALANCE (balance);
|
||||||
|
|
||||||
|
g_return_val_if_fail (videobalance != NULL, NULL);
|
||||||
|
g_return_val_if_fail (GST_IS_VIDEOBALANCE (videobalance), NULL);
|
||||||
|
|
||||||
|
if (videobalance->channels)
|
||||||
|
return videobalance->channels;
|
||||||
|
else
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_videobalance_colorbalance_set_value (GstColorBalance *balance,
|
||||||
|
GstColorBalanceChannel *channel,
|
||||||
|
gint value)
|
||||||
|
{
|
||||||
|
GstVideobalance *vb = GST_VIDEOBALANCE (balance);
|
||||||
|
|
||||||
|
g_return_if_fail (vb != NULL);
|
||||||
|
g_return_if_fail (GST_IS_VIDEOBALANCE (vb));
|
||||||
|
g_return_if_fail (channel->label != NULL);
|
||||||
|
|
||||||
|
if (!g_ascii_strcasecmp (channel->label, "HUE"))
|
||||||
|
vb->hue = (value - G_MININT) * 2 / ((double) G_MAXINT - G_MININT) - 1;
|
||||||
|
else if (!g_ascii_strcasecmp (channel->label, "SATURATION"))
|
||||||
|
vb->saturation = (value - G_MININT) * 2 / ((double) G_MAXINT - G_MININT);
|
||||||
|
else if (!g_ascii_strcasecmp (channel->label, "BRIGHTNESS"))
|
||||||
|
vb->brightness = (value - G_MININT) * 2 / ((double) G_MAXINT - G_MININT) - 1;
|
||||||
|
else if (!g_ascii_strcasecmp (channel->label, "CONTRAST"))
|
||||||
|
vb->contrast = (value - G_MININT) * 2 / ((double) G_MAXINT - G_MININT);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gint
|
||||||
|
gst_videobalance_colorbalance_get_value (GstColorBalance *balance,
|
||||||
|
GstColorBalanceChannel *channel)
|
||||||
|
{
|
||||||
|
GstVideobalance *vb = GST_VIDEOBALANCE (balance);
|
||||||
|
gint value = 0;
|
||||||
|
|
||||||
|
g_return_val_if_fail (vb != NULL, 0);
|
||||||
|
g_return_val_if_fail (GST_IS_VIDEOBALANCE (vb), 0);
|
||||||
|
g_return_val_if_fail (channel->label != NULL, 0);
|
||||||
|
|
||||||
|
if (!g_ascii_strcasecmp (channel->label, "HUE"))
|
||||||
|
value = (vb->hue + 1) * ((double) G_MAXINT - G_MININT) / 2 + G_MININT;
|
||||||
|
else if (!g_ascii_strcasecmp (channel->label, "SATURATION"))
|
||||||
|
value = vb->saturation * ((double) G_MAXINT - G_MININT) / 2 + G_MININT;
|
||||||
|
else if (!g_ascii_strcasecmp (channel->label, "BRIGHTNESS"))
|
||||||
|
value = (vb->brightness + 1) * ((double) G_MAXINT - G_MININT) / 2 + G_MININT;
|
||||||
|
else if (!g_ascii_strcasecmp (channel->label, "CONTRAST"))
|
||||||
|
value = vb->contrast * ((double) G_MAXINT - G_MININT) / 2 + G_MININT;
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_videobalance_colorbalance_init (GstColorBalanceClass *iface)
|
||||||
|
{
|
||||||
|
GST_COLOR_BALANCE_TYPE (iface) = GST_COLOR_BALANCE_SOFTWARE;
|
||||||
|
iface->list_channels = gst_videobalance_colorbalance_list_channels;
|
||||||
|
iface->set_value = gst_videobalance_colorbalance_set_value;
|
||||||
|
iface->get_value = gst_videobalance_colorbalance_get_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -50,6 +50,8 @@ struct _GstVideobalance {
|
||||||
double brightness;
|
double brightness;
|
||||||
double hue;
|
double hue;
|
||||||
double saturation;
|
double saturation;
|
||||||
|
|
||||||
|
GList *channels;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GstVideobalanceClass {
|
struct _GstVideobalanceClass {
|
||||||
|
@ -61,4 +63,3 @@ GType gst_videobalance_get_type(void);
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __GST_VIDEOBALANCE_H__ */
|
#endif /* __GST_VIDEOBALANCE_H__ */
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue