diff options
author | Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk> | 2011-02-21 18:59:56 +0800 |
---|---|---|
committer | Emilio Pozuelo Monfort <emilio.pozuelo@collabora.co.uk> | 2011-02-21 19:11:40 +0800 |
commit | f80ac5a563fe7e7b88f7c3f3b737907792dae355 (patch) | |
tree | 83cdf23e6746f59efd845837b2be41ffe38463c2 /libempathy-gtk/empathy-video-src.c | |
parent | a11f7c047fbc1e02a28d5c8f4366e8f2d3e1e423 (diff) | |
download | gsoc2013-empathy-f80ac5a563fe7e7b88f7c3f3b737907792dae355.tar gsoc2013-empathy-f80ac5a563fe7e7b88f7c3f3b737907792dae355.tar.gz gsoc2013-empathy-f80ac5a563fe7e7b88f7c3f3b737907792dae355.tar.bz2 gsoc2013-empathy-f80ac5a563fe7e7b88f7c3f3b737907792dae355.tar.lz gsoc2013-empathy-f80ac5a563fe7e7b88f7c3f3b737907792dae355.tar.xz gsoc2013-empathy-f80ac5a563fe7e7b88f7c3f3b737907792dae355.tar.zst gsoc2013-empathy-f80ac5a563fe7e7b88f7c3f3b737907792dae355.zip |
Move farsight-using sources to src
And only build them for empathy-av, since they use farsight.
Diffstat (limited to 'libempathy-gtk/empathy-video-src.c')
-rw-r--r-- | libempathy-gtk/empathy-video-src.c | 360 |
1 files changed, 0 insertions, 360 deletions
diff --git a/libempathy-gtk/empathy-video-src.c b/libempathy-gtk/empathy-video-src.c deleted file mode 100644 index 5c865daaa..000000000 --- a/libempathy-gtk/empathy-video-src.c +++ /dev/null @@ -1,360 +0,0 @@ -/* - * empathy-gst-video-src.c - Source for EmpathyGstVideoSrc - * Copyright (C) 2008 Collabora Ltd. - * @author Sjoerd Simons <sjoerd.simons@collabora.co.uk> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - - -#include <stdio.h> -#include <stdlib.h> - -#include <gst/interfaces/colorbalance.h> - -#include "empathy-video-src.h" - -G_DEFINE_TYPE(EmpathyGstVideoSrc, empathy_video_src, GST_TYPE_BIN) - -/* Keep in sync with EmpathyGstVideoSrcChannel */ -static const gchar *channel_names[NR_EMPATHY_GST_VIDEO_SRC_CHANNELS] = { - "contrast", "brightness", "gamma" }; - -/* signal enum */ -#if 0 -enum -{ - LAST_SIGNAL -}; - -static guint signals[LAST_SIGNAL] = {0}; -#endif - -/* private structure */ -typedef struct _EmpathyGstVideoSrcPrivate EmpathyGstVideoSrcPrivate; - -struct _EmpathyGstVideoSrcPrivate -{ - gboolean dispose_has_run; - GstElement *src; - /* Element implementing a ColorBalance interface */ - GstElement *balance; -}; - -#define EMPATHY_GST_VIDEO_SRC_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((o), EMPATHY_TYPE_GST_VIDEO_SRC, \ - EmpathyGstVideoSrcPrivate)) -/** - * empathy_gst_add_to_bin - create a new gst element, add to bin and link it. - * @bin - bin to add the new element to. - * @src - src element for the new element (may be NULL). - * @name - name of the factory for the new element - * - * Returns: The newly created element ot %NULL on failure - */ -static GstElement * -empathy_gst_add_to_bin (GstBin *bin, - GstElement *src, - const gchar *factoryname) -{ - GstElement *ret; - - if ((ret = gst_element_factory_make (factoryname, NULL)) == NULL) - { - g_message ("Element factory \"%s\" not found.", factoryname); - goto error; - } - - if (!gst_bin_add (bin, ret)) - { - g_warning ("Couldn't add \"%s\" to bin.", factoryname); - goto error; - } - - /* do not link if src == NULL, just exit here */ - if (src == NULL) - return ret; - - if (!gst_element_link (src, ret)) - { - g_warning ("Failed to link \"%s\".", factoryname); - gst_bin_remove (bin, ret); - goto error; - } - - return ret; - -error: - if (ret != NULL) - gst_object_unref (ret); - return NULL; -} - - -static void -empathy_video_src_init (EmpathyGstVideoSrc *obj) -{ - EmpathyGstVideoSrcPrivate *priv = EMPATHY_GST_VIDEO_SRC_GET_PRIVATE (obj); - GstElement *element, *element_back; - GstPad *ghost, *src; - GstCaps *caps; - gchar *str; - - /* allocate caps here, so we can update it by optional elements */ - caps = gst_caps_new_simple ("video/x-raw-yuv", - "width", G_TYPE_INT, 320, - "height", G_TYPE_INT, 240, - NULL); - - /* allocate any data required by the object here */ - if ((element = empathy_gst_add_to_bin (GST_BIN (obj), - NULL, "gconfvideosrc")) == NULL) - g_error ("Couldn't add \"gconfvideosrc\" (gst-plugins-good missing?)"); - - /* we need to save our source to priv->src */ - priv->src = element; - - /* videomaxrate is optional as it's part of gst-plugins-bad. So don't - * fail if it doesn't exist. */ - element_back = element; - if ((element = empathy_gst_add_to_bin (GST_BIN (obj), - element, "videomaxrate")) == NULL) - { - g_message ("Couldn't add \"videomaxrate\" (gst-plugins-bad missing?)"); - element = element_back; - } - else - { - gst_caps_set_simple (caps, - "framerate", GST_TYPE_FRACTION, 15, 1, - NULL); - } - - str = gst_caps_to_string (caps); - g_debug ("Current video src caps are : %s", str); - g_free (str); - - if ((element = empathy_gst_add_to_bin (GST_BIN (obj), - element, "ffmpegcolorspace")) == NULL) - g_error ("Failed to add \"ffmpegcolorspace\" (gst-plugins-base missing?)"); - - if ((element = empathy_gst_add_to_bin (GST_BIN (obj), - element, "videoscale")) == NULL) - g_error ("Failed to add \"videoscale\", (gst-plugins-base missing?)"); - - if ((element = empathy_gst_add_to_bin (GST_BIN (obj), - element, "capsfilter")) == NULL) - g_error ( - "Failed to add \"capsfilter\" (gstreamer core elements missing?)"); - - g_object_set (G_OBJECT (element), "caps", caps, NULL); - - - /* optionally add postproc_tmpnoise to improve the performance of encoders */ - element_back = element; - if ((element = empathy_gst_add_to_bin (GST_BIN (obj), - element, "postproc_tmpnoise")) == NULL) - { - g_message ("Failed to add \"postproc_tmpnoise\" (gst-ffmpeg missing?)"); - element = element_back; - } - - src = gst_element_get_static_pad (element, "src"); - g_assert (src != NULL); - - ghost = gst_ghost_pad_new ("src", src); - if (ghost == NULL) - g_error ("Unable to create ghost pad for the videosrc"); - - if (!gst_element_add_pad (GST_ELEMENT (obj), ghost)) - g_error ("pad with the same name already existed or " - "the pad already had another parent."); - - gst_object_unref (G_OBJECT (src)); -} - -static void empathy_video_src_dispose (GObject *object); -static void empathy_video_src_finalize (GObject *object); - -static void -empathy_video_src_class_init (EmpathyGstVideoSrcClass *empathy_video_src_class) -{ - GObjectClass *object_class = G_OBJECT_CLASS (empathy_video_src_class); - - g_type_class_add_private (empathy_video_src_class, - sizeof (EmpathyGstVideoSrcPrivate)); - - object_class->dispose = empathy_video_src_dispose; - object_class->finalize = empathy_video_src_finalize; -} - -void -empathy_video_src_dispose (GObject *object) -{ - EmpathyGstVideoSrc *self = EMPATHY_GST_VIDEO_SRC (object); - EmpathyGstVideoSrcPrivate *priv = EMPATHY_GST_VIDEO_SRC_GET_PRIVATE (self); - - if (priv->dispose_has_run) - return; - - priv->dispose_has_run = TRUE; - - /* release any references held by the object here */ - - if (G_OBJECT_CLASS (empathy_video_src_parent_class)->dispose) - G_OBJECT_CLASS (empathy_video_src_parent_class)->dispose (object); -} - -void -empathy_video_src_finalize (GObject *object) -{ - //EmpathyGstVideoSrc *self = EMPATHY_GST_VIDEO_SRC (object); - //EmpathyGstVideoSrcPrivate *priv = EMPATHY_GST_VIDEO_SRC_GET_PRIVATE (self); - - /* free any data held directly by the object here */ - - G_OBJECT_CLASS (empathy_video_src_parent_class)->finalize (object); -} - -GstElement * -empathy_video_src_new (void) -{ - static gboolean registered = FALSE; - - if (!registered) { - if (!gst_element_register (NULL, "empathyvideosrc", - GST_RANK_NONE, EMPATHY_TYPE_GST_VIDEO_SRC)) - return NULL; - registered = TRUE; - } - return gst_element_factory_make ("empathyvideosrc", NULL); -} - -void -empathy_video_src_set_channel (GstElement *src, - EmpathyGstVideoSrcChannel channel, guint percent) -{ - GstElement *color; - GstColorBalance *balance; - const GList *channels; - GList *l; - - /* Find something supporting GstColorBalance */ - color = gst_bin_get_by_interface (GST_BIN (src), GST_TYPE_COLOR_BALANCE); - - if (color == NULL) - return; - - balance = GST_COLOR_BALANCE (color); - - channels = gst_color_balance_list_channels (balance); - - for (l = (GList *) channels; l != NULL; l = g_list_next (l)) - { - GstColorBalanceChannel *c = GST_COLOR_BALANCE_CHANNEL (l->data); - - if (g_ascii_strcasecmp (c->label, channel_names[channel]) == 0) - { - gst_color_balance_set_value (balance, c, - ((c->max_value - c->min_value) * percent)/100 - + c->min_value); - break; - } - } - - g_object_unref (color); -} - -guint -empathy_video_src_get_channel (GstElement *src, - EmpathyGstVideoSrcChannel channel) -{ - GstElement *color; - GstColorBalance *balance; - const GList *channels; - GList *l; - guint percent = 0; - - /* Find something supporting GstColorBalance */ - color = gst_bin_get_by_interface (GST_BIN (src), GST_TYPE_COLOR_BALANCE); - - if (color == NULL) - return percent; - - balance = GST_COLOR_BALANCE (color); - - channels = gst_color_balance_list_channels (balance); - - for (l = (GList *) channels; l != NULL; l = g_list_next (l)) - { - GstColorBalanceChannel *c = GST_COLOR_BALANCE_CHANNEL (l->data); - - if (g_ascii_strcasecmp (c->label, channel_names[channel]) == 0) - { - percent = - ((gst_color_balance_get_value (balance, c) - - c->min_value) * 100) / - (c->max_value - c->min_value); - - break; - } - } - - g_object_unref (color); - - return percent; -} - - -guint -empathy_video_src_get_supported_channels (GstElement *src) -{ - GstElement *color; - GstColorBalance *balance; - const GList *channels; - GList *l; - guint result = 0; - - /* Find something supporting GstColorBalance */ - color = gst_bin_get_by_interface (GST_BIN (src), GST_TYPE_COLOR_BALANCE); - - if (color == NULL) - goto out; - - balance = GST_COLOR_BALANCE (color); - - channels = gst_color_balance_list_channels (balance); - - for (l = (GList *) channels; l != NULL; l = g_list_next (l)) - { - GstColorBalanceChannel *channel = GST_COLOR_BALANCE_CHANNEL (l->data); - int i; - - for (i = 0; i < NR_EMPATHY_GST_VIDEO_SRC_CHANNELS; i++) - { - if (g_ascii_strcasecmp (channel->label, channel_names[i]) == 0) - { - result |= (1 << i); - break; - } - } - } - - g_object_unref (color); - -out: - return result; -} - |