summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Hervey <edward.hervey@collabora.co.uk>2012-09-17 11:05:55 +0200
committerEdward Hervey <edward.hervey@collabora.co.uk>2012-09-17 11:07:48 +0200
commitbefe626916b10fdb34b3c7da713715b4cd0b4add (patch)
tree7e0484625d01ea7cc54396b7ab696e578e409629
parent28bf1d99fc45f2f8bc37c50aad21e0d55e9489d4 (diff)
gst-indent code
-rw-r--r--clutter-gst/clutter-gst-auto-video-sink.c567
-rw-r--r--clutter-gst/clutter-gst-debug.c25
-rw-r--r--clutter-gst/clutter-gst-player.c1407
-rw-r--r--clutter-gst/clutter-gst-plugin.c26
-rw-r--r--clutter-gst/clutter-gst-util.c45
-rw-r--r--clutter-gst/clutter-gst-video-sink.c1057
-rw-r--r--clutter-gst/clutter-gst-video-texture.c504
7 files changed, 1601 insertions, 2030 deletions
diff --git a/clutter-gst/clutter-gst-auto-video-sink.c b/clutter-gst/clutter-gst-auto-video-sink.c
index 0b49a10..ec5a1d6 100644
--- a/clutter-gst/clutter-gst-auto-video-sink.c
+++ b/clutter-gst/clutter-gst-auto-video-sink.c
@@ -39,10 +39,10 @@ GST_DEBUG_CATEGORY_EXTERN (clutter_gst_auto_video_sink_debug);
#define GST_CAT_DEFAULT clutter_gst_auto_video_sink_debug
static GstStaticPadTemplate sink_template_factory =
- GST_STATIC_PAD_TEMPLATE ("sink",
- GST_PAD_SINK,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS_ANY);
+GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS_ANY);
enum
{
@@ -51,8 +51,7 @@ enum
};
G_DEFINE_TYPE (ClutterGstAutoVideoSink,
- clutter_gst_auto_video_sink,
- GST_TYPE_BIN);
+ clutter_gst_auto_video_sink, GST_TYPE_BIN);
#define parent_class clutter_gst_auto_video_sink_parent_class
@@ -64,7 +63,7 @@ typedef struct
} SinkElement;
static GstCaps *
-_get_sink_caps (GstElement *sink)
+_get_sink_caps (GstElement * sink)
{
GstPad *sinkpad;
GstCaps *caps = NULL;
@@ -72,15 +71,14 @@ _get_sink_caps (GstElement *sink)
/* try to activate */
if (GST_STATE (sink) < GST_STATE_READY &&
gst_element_set_state (sink, GST_STATE_READY) == GST_STATE_CHANGE_FAILURE)
- {
- goto beach;
- }
+ {
+ goto beach;
+ }
- if ((sinkpad = gst_element_get_static_pad (sink, "sink")))
- {
- /* Got the sink pad, now let's see which caps will be accepted */
- caps = gst_pad_query_caps (sinkpad, NULL);
- }
+ if ((sinkpad = gst_element_get_static_pad (sink, "sink"))) {
+ /* Got the sink pad, now let's see which caps will be accepted */
+ caps = gst_pad_query_caps (sinkpad, NULL);
+ }
gst_object_unref (sinkpad);
beach:
@@ -88,30 +86,26 @@ beach:
}
static SinkElement *
-_sink_element_create (GstElement *element)
+_sink_element_create (GstElement * element)
{
SinkElement *se = NULL;
GstCaps *caps = NULL;
/* Check if the sink can be set to READY and recover it's caps */
- if (!(caps = _get_sink_caps (element)))
- {
- gst_element_set_state (element, GST_STATE_NULL);
- gst_object_unref (element);
- goto beach;
- }
+ if (!(caps = _get_sink_caps (element))) {
+ gst_element_set_state (element, GST_STATE_NULL);
+ gst_object_unref (element);
+ goto beach;
+ }
- if ((se = g_new0 (SinkElement, 1)))
- {
- gst_object_ref_sink (element);
- se->element = element;
- se->caps = caps;
- }
- else
- {
- gst_caps_unref (caps);
- gst_object_unref (element);
- }
+ if ((se = g_new0 (SinkElement, 1))) {
+ gst_object_ref_sink (element);
+ se->element = element;
+ se->caps = caps;
+ } else {
+ gst_caps_unref (caps);
+ gst_object_unref (element);
+ }
beach:
return se;
@@ -120,7 +114,7 @@ beach:
static void
_sink_element_free (gpointer data, gpointer user_data)
{
- SinkElement *se = (SinkElement *)data;
+ SinkElement *se = (SinkElement *) data;
gst_element_set_state (se->element, GST_STATE_NULL);
gst_caps_unref (se->caps);
@@ -129,7 +123,7 @@ _sink_element_free (gpointer data, gpointer user_data)
}
static gboolean
-_factory_filter (GstPluginFeature *feature, gpointer data)
+_factory_filter (GstPluginFeature * feature, gpointer data)
{
const gchar *klass;
guint rank;
@@ -152,7 +146,7 @@ _factory_filter (GstPluginFeature *feature, gpointer data)
}
static gint
-_factories_compare_ranks (GstPluginFeature *f1, GstPluginFeature *f2)
+_factories_compare_ranks (GstPluginFeature * f1, GstPluginFeature * f2)
{
gint diff;
@@ -162,17 +156,18 @@ _factories_compare_ranks (GstPluginFeature *f1, GstPluginFeature *f2)
return diff;
return strcmp (gst_plugin_feature_get_name (f2),
- gst_plugin_feature_get_name (f1));
+ gst_plugin_feature_get_name (f1));
}
static GstElement *
-_create_element_with_pretty_name (ClutterGstAutoVideoSink *bin,
- GstElementFactory *factory)
+_create_element_with_pretty_name (ClutterGstAutoVideoSink * bin,
+ GstElementFactory * factory)
{
GstElement *element;
gchar *name, *marker;
- marker = g_strdup (gst_plugin_feature_get_name(GST_PLUGIN_FEATURE (factory)));
+ marker =
+ g_strdup (gst_plugin_feature_get_name (GST_PLUGIN_FEATURE (factory)));
if (g_str_has_suffix (marker, "sink"))
marker[strlen (marker) - 4] = '\0';
if (g_str_has_prefix (marker, "gst"))
@@ -187,87 +182,77 @@ _create_element_with_pretty_name (ClutterGstAutoVideoSink *bin,
}
static inline gboolean
-_is_clutter_sink (GstElement *element)
+_is_clutter_sink (GstElement * element)
{
GParamSpec *pspec;
pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (element),
- "texture");
+ "texture");
- if (pspec == NULL)
- {
- GST_DEBUG_OBJECT (element, "don't have a texture property");
- return FALSE;
- }
+ if (pspec == NULL) {
+ GST_DEBUG_OBJECT (element, "don't have a texture property");
+ return FALSE;
+ }
if (CLUTTER_TYPE_TEXTURE == pspec->value_type ||
- g_type_is_a (pspec->value_type, CLUTTER_TYPE_TEXTURE))
- {
- GST_DEBUG_OBJECT (element, "has a clutter texture property");
- return TRUE;
- }
+ g_type_is_a (pspec->value_type, CLUTTER_TYPE_TEXTURE)) {
+ GST_DEBUG_OBJECT (element, "has a clutter texture property");
+ return TRUE;
+ }
GST_WARNING_OBJECT (element, "has texture property, but it's of type %s "
- "and we expected it to be of type CLUTTER_TYPE_TEXTURE",
- g_type_name (pspec->value_type));
+ "and we expected it to be of type CLUTTER_TYPE_TEXTURE",
+ g_type_name (pspec->value_type));
return FALSE;
}
static inline void
-_sinks_discover (ClutterGstAutoVideoSink *bin)
+_sinks_discover (ClutterGstAutoVideoSink * bin)
{
GstCaps *caps = gst_caps_new_empty ();
GList *factories, *item;
- factories = gst_registry_feature_filter (gst_registry_get(),
- (GstPluginFeatureFilter)_factory_filter, FALSE, bin);
- factories = g_list_sort (factories, (GCompareFunc)_factories_compare_ranks);
+ factories = gst_registry_feature_filter (gst_registry_get (),
+ (GstPluginFeatureFilter) _factory_filter, FALSE, bin);
+ factories = g_list_sort (factories, (GCompareFunc) _factories_compare_ranks);
- for (item = factories; item != NULL; item = item->next)
- {
- GstElementFactory *f = GST_ELEMENT_FACTORY (item->data);
- GstElement *el;
- SinkElement *se;
-
- if ((el = _create_element_with_pretty_name (bin, f)))
- {
- GST_DEBUG_OBJECT (bin, "Testing %s", gst_plugin_feature_get_name(
- GST_PLUGIN_FEATURE (f)));
-
- /* Check for a texture property with CLUTTER_TYPE_TEXTURE type */
- if (!_is_clutter_sink (el))
- {
- gst_object_unref (el);
- continue;
- }
- se = _sink_element_create (el);
- if (se)
- {
- GstCaps *caps_union = gst_caps_merge (caps, gst_caps_ref(se->caps));
- caps = caps_union;
- bin->sinks = g_slist_append (bin->sinks, se);
- GST_DEBUG_OBJECT (bin, "Added %s with caps %" GST_PTR_FORMAT,
- gst_plugin_feature_get_name(GST_PLUGIN_FEATURE (f)), se->caps);
- }
- else
- {
- gst_object_unref (el);
- }
- }
- }
+ for (item = factories; item != NULL; item = item->next) {
+ GstElementFactory *f = GST_ELEMENT_FACTORY (item->data);
+ GstElement *el;
+ SinkElement *se;
- if (!gst_caps_is_empty (caps))
- {
- gst_caps_replace (&bin->video_caps, caps);
- GST_DEBUG_OBJECT (bin, "Supported caps %" GST_PTR_FORMAT,
- bin->video_caps);
+ if ((el = _create_element_with_pretty_name (bin, f))) {
+ GST_DEBUG_OBJECT (bin, "Testing %s",
+ gst_plugin_feature_get_name (GST_PLUGIN_FEATURE (f)));
+
+ /* Check for a texture property with CLUTTER_TYPE_TEXTURE type */
+ if (!_is_clutter_sink (el)) {
+ gst_object_unref (el);
+ continue;
+ }
+ se = _sink_element_create (el);
+ if (se) {
+ GstCaps *caps_union = gst_caps_merge (caps, gst_caps_ref (se->caps));
+ caps = caps_union;
+ bin->sinks = g_slist_append (bin->sinks, se);
+ GST_DEBUG_OBJECT (bin, "Added %s with caps %" GST_PTR_FORMAT,
+ gst_plugin_feature_get_name (GST_PLUGIN_FEATURE (f)), se->caps);
+ } else {
+ gst_object_unref (el);
+ }
}
+ }
+
+ if (!gst_caps_is_empty (caps)) {
+ gst_caps_replace (&bin->video_caps, caps);
+ GST_DEBUG_OBJECT (bin, "Supported caps %" GST_PTR_FORMAT, bin->video_caps);
+ }
gst_caps_unref (caps);
}
static inline void
-_sinks_destroy (ClutterGstAutoVideoSink *bin)
+_sinks_destroy (ClutterGstAutoVideoSink * bin)
{
g_slist_foreach (bin->sinks, _sink_element_free, NULL);
g_slist_free (bin->sinks);
@@ -275,74 +260,67 @@ _sinks_destroy (ClutterGstAutoVideoSink *bin)
}
static inline GstElement *
-_sinks_find_sink_by_caps (ClutterGstAutoVideoSink *bin, GstCaps *caps)
+_sinks_find_sink_by_caps (ClutterGstAutoVideoSink * bin, GstCaps * caps)
{
GstElement *element = NULL;
GSList *walk = bin->sinks;
- while (walk)
- {
- SinkElement *se = (SinkElement *)walk->data;
- if (se)
- {
- GstCaps *intersect = NULL;
-
- intersect = gst_caps_intersect (caps, se->caps);
- if (!gst_caps_is_empty (intersect))
- {
- element = se->element;
- gst_caps_unref (intersect);
- GST_DEBUG_OBJECT (bin, "found sink %" GST_PTR_FORMAT, element);
- goto beach;
- }
- gst_caps_unref (intersect);
- }
- walk = g_slist_next (walk);
+ while (walk) {
+ SinkElement *se = (SinkElement *) walk->data;
+ if (se) {
+ GstCaps *intersect = NULL;
+
+ intersect = gst_caps_intersect (caps, se->caps);
+ if (!gst_caps_is_empty (intersect)) {
+ element = se->element;
+ gst_caps_unref (intersect);
+ GST_DEBUG_OBJECT (bin, "found sink %" GST_PTR_FORMAT, element);
+ goto beach;
+ }
+ gst_caps_unref (intersect);
}
+ walk = g_slist_next (walk);
+ }
beach:
return element;
}
static void
-clutter_gst_auto_video_sink_do_async_start (ClutterGstAutoVideoSink *bin)
+clutter_gst_auto_video_sink_do_async_start (ClutterGstAutoVideoSink * bin)
{
GstMessage *message;
- if (!bin->need_async_start)
- {
- GST_DEBUG_OBJECT (bin, "no async_start needed");
- return;
- }
+ if (!bin->need_async_start) {
+ GST_DEBUG_OBJECT (bin, "no async_start needed");
+ return;
+ }
bin->async_pending = TRUE;
GST_INFO_OBJECT (bin, "Sending async_start message");
message = gst_message_new_async_start (GST_OBJECT_CAST (bin));
- GST_BIN_CLASS (parent_class)->handle_message (
- GST_BIN_CAST (bin), message);
+ GST_BIN_CLASS (parent_class)->handle_message (GST_BIN_CAST (bin), message);
}
static void
-clutter_gst_auto_video_sink_do_async_done (ClutterGstAutoVideoSink *bin)
+clutter_gst_auto_video_sink_do_async_done (ClutterGstAutoVideoSink * bin)
{
GstMessage *message;
- if (bin->async_pending)
- {
- GST_INFO_OBJECT (bin, "Sending async_done message");
- message = gst_message_new_async_done (GST_OBJECT_CAST (bin), FALSE);
- GST_BIN_CLASS (parent_class)->handle_message (
- GST_BIN_CAST (bin),message);
+ if (bin->async_pending) {
+ GST_INFO_OBJECT (bin, "Sending async_done message");
+ message = gst_message_new_async_done (GST_OBJECT_CAST (bin), FALSE);
+ GST_BIN_CLASS (parent_class)->handle_message (GST_BIN_CAST (bin), message);
- bin->async_pending = FALSE;
- }
+ bin->async_pending = FALSE;
+ }
bin->need_async_start = FALSE;
}
static gboolean
-clutter_gst_auto_video_sink_reconfigure (ClutterGstAutoVideoSink *bin,
- GstCaps *caps)
+clutter_gst_auto_video_sink_reconfigure (ClutterGstAutoVideoSink * bin,
+ GstCaps * caps)
{
GstElement *sink;
GstPad *sink_pad_target = NULL;
@@ -352,36 +330,32 @@ clutter_gst_auto_video_sink_reconfigure (ClutterGstAutoVideoSink *bin,
sink = _sinks_find_sink_by_caps (bin, caps);
- if (sink && sink == bin->child)
- {
- GST_DEBUG_OBJECT (bin, "we already using that sink, done");
- ret = TRUE;
- goto beach;
- }
+ if (sink && sink == bin->child) {
+ GST_DEBUG_OBJECT (bin, "we already using that sink, done");
+ ret = TRUE;
+ goto beach;
+ }
- if (bin->child)
- {
- /* Deactivate current child */
- GST_DEBUG_OBJECT (bin, "going to remove %" GST_PTR_FORMAT, bin->child);
- gst_ghost_pad_set_target (GST_GHOST_PAD (bin->sink_pad), NULL);
- gst_element_set_state (bin->child, GST_STATE_NULL);
- gst_bin_remove (GST_BIN (bin), bin->child);
- bin->child = NULL;
- }
+ if (bin->child) {
+ /* Deactivate current child */
+ GST_DEBUG_OBJECT (bin, "going to remove %" GST_PTR_FORMAT, bin->child);
+ gst_ghost_pad_set_target (GST_GHOST_PAD (bin->sink_pad), NULL);
+ gst_element_set_state (bin->child, GST_STATE_NULL);
+ gst_bin_remove (GST_BIN (bin), bin->child);
+ bin->child = NULL;
+ }
/* This might have failed */
- if (!sink)
- {
- GST_ELEMENT_ERROR (bin, LIBRARY, INIT,
- ("No usable video rendering element found."),
- ("Failed detecting a video sink for the requested"
- " caps."));
- goto beach;
- }
+ if (!sink) {
+ GST_ELEMENT_ERROR (bin, LIBRARY, INIT,
+ ("No usable video rendering element found."),
+ ("Failed detecting a video sink for the requested" " caps."));
+ goto beach;
+ }
/* Now we are ready to add the sink to bin */
bin->child = gst_object_ref (sink);
- g_object_set (G_OBJECT(bin->child), "texture", bin->texture, NULL);
+ g_object_set (G_OBJECT (bin->child), "texture", bin->texture, NULL);
GST_DEBUG_OBJECT (bin, "going to add %" GST_PTR_FORMAT, bin->child);
/* Add our child */
@@ -401,88 +375,81 @@ beach:
}
static GstPadProbeReturn
-clutter_gst_auto_video_sink_sink_pad_blocked_cb (GstPad *pad, GstPadProbeInfo *info,
- gpointer user_data)
+clutter_gst_auto_video_sink_sink_pad_blocked_cb (GstPad * pad,
+ GstPadProbeInfo * info, gpointer user_data)
{
ClutterGstAutoVideoSink *bin = CLUTTER_GST_AUTO_VIDEO_SINK_CAST (user_data);
GstCaps *caps = NULL;
/* This only occurs when our bin is first initialised || stream changes */
- if (G_UNLIKELY (!bin->setup))
- {
+ if (G_UNLIKELY (!bin->setup)) {
- caps = gst_pad_peer_query_caps (bin->sink_pad, NULL);
+ caps = gst_pad_peer_query_caps (bin->sink_pad, NULL);
- if (G_UNLIKELY (!caps))
- {
- GST_WARNING_OBJECT (bin, "no incoming caps defined, can't setup");
- goto beach;
- }
+ if (G_UNLIKELY (!caps)) {
+ GST_WARNING_OBJECT (bin, "no incoming caps defined, can't setup");
+ goto beach;
+ }
- if (G_UNLIKELY (gst_caps_is_empty (caps)))
- {
- GST_WARNING_OBJECT (bin, "caps empty, can't setup");
- goto beach;
- }
+ if (G_UNLIKELY (gst_caps_is_empty (caps))) {
+ GST_WARNING_OBJECT (bin, "caps empty, can't setup");
+ goto beach;
+ }
- GST_DEBUG_OBJECT (bin, "incoming caps %" GST_PTR_FORMAT, caps);
+ GST_DEBUG_OBJECT (bin, "incoming caps %" GST_PTR_FORMAT, caps);
- if (!clutter_gst_auto_video_sink_reconfigure (bin, caps))
- goto beach;
+ if (!clutter_gst_auto_video_sink_reconfigure (bin, caps))
+ goto beach;
- /* We won't be doing this again unless stream changes */
- bin->setup = TRUE;
- }
+ /* We won't be doing this again unless stream changes */
+ bin->setup = TRUE;
+ }
/* Note that we finished our ASYNC state change but our children will have
- * posted their own messages on our bus. */
+ * posted their own messages on our bus. */
clutter_gst_auto_video_sink_do_async_done (bin);
GST_DEBUG_OBJECT (bin, "unblock the pad");
beach:
- if (caps)
- {
- gst_caps_unref (caps);
- }
+ if (caps) {
+ gst_caps_unref (caps);
+ }
bin->sink_block_id = 0;
return GST_PAD_PROBE_REMOVE;
}
static GstCaps *
-clutter_gst_auto_video_sink_get_caps (ClutterGstAutoVideoSink *bin)
+clutter_gst_auto_video_sink_get_caps (ClutterGstAutoVideoSink * bin)
{
GstCaps *ret;
- if (bin->video_caps)
- {
- ret = gst_caps_ref (bin->video_caps);
- }
- else
- {
- ret = gst_static_pad_template_get_caps (&sink_template_factory);
- }
+ if (bin->video_caps) {
+ ret = gst_caps_ref (bin->video_caps);
+ } else {
+ ret = gst_static_pad_template_get_caps (&sink_template_factory);
+ }
return ret;
}
static gboolean
-clutter_gst_auto_video_sink_accept_caps (ClutterGstAutoVideoSink *bin, GstCaps *caps)
+clutter_gst_auto_video_sink_accept_caps (ClutterGstAutoVideoSink * bin,
+ GstCaps * caps)
{
gboolean ret = FALSE;
GstCaps *allowed_caps = clutter_gst_auto_video_sink_get_caps (bin);
- if (allowed_caps)
- {
- GstCaps *result = NULL;
+ if (allowed_caps) {
+ GstCaps *result = NULL;
- result = gst_caps_intersect (caps, allowed_caps);
+ result = gst_caps_intersect (caps, allowed_caps);
- if (!gst_caps_is_empty (result))
- ret = TRUE;
+ if (!gst_caps_is_empty (result))
+ ret = TRUE;
- caps = result;
- }
+ caps = result;
+ }
gst_caps_unref (allowed_caps);
@@ -490,33 +457,34 @@ clutter_gst_auto_video_sink_accept_caps (ClutterGstAutoVideoSink *bin, GstCaps *
}
static gboolean
-clutter_gst_auto_video_sink_query (GstPad * pad, GstObject * parent, GstQuery * query)
+clutter_gst_auto_video_sink_query (GstPad * pad, GstObject * parent,
+ GstQuery * query)
{
gboolean res;
ClutterGstAutoVideoSink *bin = CLUTTER_GST_AUTO_VIDEO_SINK (parent);
switch (GST_QUERY_TYPE (query)) {
case GST_QUERY_ACCEPT_CAPS:
- {
- GstCaps *caps;
-
- gst_query_parse_accept_caps (query, &caps);
- res = clutter_gst_auto_video_sink_accept_caps (bin, caps);
- gst_query_set_accept_caps_result (query, res);
- /* return TRUE, we have answered the query */
- res = TRUE;
- }
+ {
+ GstCaps *caps;
+
+ gst_query_parse_accept_caps (query, &caps);
+ res = clutter_gst_auto_video_sink_accept_caps (bin, caps);
+ gst_query_set_accept_caps_result (query, res);
+ /* return TRUE, we have answered the query */
+ res = TRUE;
+ }
break;
case GST_QUERY_CAPS:
- {
- GstCaps *caps, *filter;
-
- gst_query_parse_caps (query, &filter);
- caps = clutter_gst_auto_video_sink_get_caps (bin);
- gst_query_set_caps_result (query, caps);
- gst_caps_unref (caps);
- res = TRUE;
- }
+ {
+ GstCaps *caps, *filter;
+
+ gst_query_parse_caps (query, &filter);
+ caps = clutter_gst_auto_video_sink_get_caps (bin);
+ gst_query_set_caps_result (query, caps);
+ gst_caps_unref (caps);
+ res = TRUE;
+ }
break;
default:
res = gst_pad_query_default (pad, parent, query);
@@ -527,14 +495,13 @@ clutter_gst_auto_video_sink_query (GstPad * pad, GstObject * parent, GstQuery *
static GstStateChangeReturn
-clutter_gst_auto_video_sink_change_state (GstElement *element,
- GstStateChange transition)
+clutter_gst_auto_video_sink_change_state (GstElement * element,
+ GstStateChange transition)
{
GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS, bret;
ClutterGstAutoVideoSink *bin = CLUTTER_GST_AUTO_VIDEO_SINK (element);
- switch (transition)
- {
+ switch (transition) {
case GST_STATE_CHANGE_NULL_TO_READY:
_sinks_discover (bin);
break;
@@ -543,25 +510,25 @@ clutter_gst_auto_video_sink_change_state (GstElement *element,
bin->need_async_start = TRUE;
/* Here we set our callback to intercept data flow on the first buffer */
GST_DEBUG_OBJECT (bin, "try to block input pad to setup internal "
- "pipeline");
+ "pipeline");
if (bin->sink_block_id == 0)
- bin->sink_block_id = gst_pad_add_probe(bin->sink_block_pad, GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM,
- clutter_gst_auto_video_sink_sink_pad_blocked_cb,
- bin, NULL);
+ bin->sink_block_id =
+ gst_pad_add_probe (bin->sink_block_pad,
+ GST_PAD_PROBE_TYPE_BLOCK_DOWNSTREAM,
+ clutter_gst_auto_video_sink_sink_pad_blocked_cb, bin, NULL);
ret = GST_STATE_CHANGE_ASYNC;
clutter_gst_auto_video_sink_do_async_start (bin);
CLUTTER_GST_AUTO_VIDEO_SINK_UNLOCK (bin);
break;
default:
break;
- }
+ }
/* do the state change of the children */
bret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
/* now look at the result of our children and adjust the return value */
- switch (bret)
- {
+ switch (bret) {
case GST_STATE_CHANGE_FAILURE:
/* failure, we stop */
goto activate_failed;
@@ -578,10 +545,9 @@ clutter_gst_auto_video_sink_change_state (GstElement *element,
default:
/* return our previously configured return value */
break;
- }
+ }
- switch (transition)
- {
+ switch (transition) {
case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
bin->need_async_start = TRUE;
break;
@@ -598,13 +564,12 @@ clutter_gst_auto_video_sink_change_state (GstElement *element,
gst_ghost_pad_set_target (GST_GHOST_PAD (bin->sink_pad), NULL);
/* Destroy our child */
- if (bin->child)
- {
- GST_DEBUG_OBJECT (bin->child, "removing child sink");
- gst_element_set_state (bin->child, GST_STATE_NULL);
- gst_bin_remove (GST_BIN (bin), bin->child);
- bin->child = NULL;
- }
+ if (bin->child) {
+ GST_DEBUG_OBJECT (bin->child, "removing child sink");
+ gst_element_set_state (bin->child, GST_STATE_NULL);
+ gst_bin_remove (GST_BIN (bin), bin->child);
+ bin->child = NULL;
+ }
bin->setup = FALSE;
CLUTTER_GST_AUTO_VIDEO_SINK_UNLOCK (bin);
@@ -615,7 +580,7 @@ clutter_gst_auto_video_sink_change_state (GstElement *element,
break;
default:
break;
- }
+ }
return ret;
/* ERRORS */
@@ -628,32 +593,30 @@ activate_failed:
}
static void
-clutter_gst_auto_video_sink_dispose (GObject *object)
+clutter_gst_auto_video_sink_dispose (GObject * object)
{
ClutterGstAutoVideoSink *bin = CLUTTER_GST_AUTO_VIDEO_SINK (object);
GST_DEBUG_OBJECT (bin, "Disposing");
- if (bin->child)
- {
- gst_element_set_state (bin->child, GST_STATE_NULL);
- gst_object_unref (bin->child);
- bin->child = NULL;
- }
+ if (bin->child) {
+ gst_element_set_state (bin->child, GST_STATE_NULL);
+ gst_object_unref (bin->child);
+ bin->child = NULL;
+ }
- if (bin->sink_block_pad)
- {
- gst_object_unref (bin->sink_block_pad);
- bin->sink_block_pad = NULL;
- }
+ if (bin->sink_block_pad) {
+ gst_object_unref (bin->sink_block_pad);
+ bin->sink_block_pad = NULL;
+ }
bin->texture = NULL;
- G_OBJECT_CLASS (parent_class)->dispose((GObject *) object);
+ G_OBJECT_CLASS (parent_class)->dispose ((GObject *) object);
}
static void
-clutter_gst_auto_video_sink_finalize (GObject *object)
+clutter_gst_auto_video_sink_finalize (GObject * object)
{
ClutterGstAutoVideoSink *bin = CLUTTER_GST_AUTO_VIDEO_SINK (object);
@@ -667,59 +630,52 @@ clutter_gst_auto_video_sink_finalize (GObject *object)
}
static void
-clutter_gst_auto_video_sink_set_texture (ClutterGstAutoVideoSink *bin,
- ClutterTexture *texture)
+clutter_gst_auto_video_sink_set_texture (ClutterGstAutoVideoSink * bin,
+ ClutterTexture * texture)
{
bin->texture = texture;
- if (bin->setup)
- {
- g_object_set (G_OBJECT(bin->child), "texture", texture, NULL);
- }
+ if (bin->setup) {
+ g_object_set (G_OBJECT (bin->child), "texture", texture, NULL);
+ }
}
static void
-clutter_gst_auto_video_sink_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
+clutter_gst_auto_video_sink_set_property (GObject * object,
+ guint prop_id, const GValue * value, GParamSpec * pspec)
{
ClutterGstAutoVideoSink *bin = CLUTTER_GST_AUTO_VIDEO_SINK (object);
- switch (prop_id)
- {
+ switch (prop_id) {
case PROP_TEXTURE:
clutter_gst_auto_video_sink_set_texture (bin, g_value_get_object (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
- }
+ }
}
static void
-clutter_gst_auto_video_sink_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
+clutter_gst_auto_video_sink_get_property (GObject * object,
+ guint prop_id, GValue * value, GParamSpec * pspec)
{
ClutterGstAutoVideoSink *bin = CLUTTER_GST_AUTO_VIDEO_SINK (object);
- switch (prop_id)
- {
+ switch (prop_id) {
case PROP_TEXTURE:
g_value_set_object (value, bin->texture);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
- }
+ }
}
static void
-clutter_gst_auto_video_sink_class_init (ClutterGstAutoVideoSinkClass *klass)
+clutter_gst_auto_video_sink_class_init (ClutterGstAutoVideoSinkClass * klass)
{
GObjectClass *oclass = G_OBJECT_CLASS (klass);
- GstElementClass *gstelement_class = GST_ELEMENT_CLASS(klass);
+ GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
GParamSpec *pspec;
oclass->dispose = clutter_gst_auto_video_sink_dispose;
@@ -728,13 +684,13 @@ clutter_gst_auto_video_sink_class_init (ClutterGstAutoVideoSinkClass *klass)
oclass->get_property = clutter_gst_auto_video_sink_get_property;
gst_element_class_add_pad_template (gstelement_class,
- gst_static_pad_template_get (&sink_template_factory));
+ gst_static_pad_template_get (&sink_template_factory));
gst_element_class_set_details_simple (gstelement_class,
- "Auto Clutter Sink",
- "Sink/Video",
- "Autoplug clutter capable video sinks",
- "Josep Torra <support@fluendo.com>");
+ "Auto Clutter Sink",
+ "Sink/Video",
+ "Autoplug clutter capable video sinks",
+ "Josep Torra <support@fluendo.com>");
/**
* ClutterGstAutoVideoSink:texture:
@@ -745,23 +701,22 @@ clutter_gst_auto_video_sink_class_init (ClutterGstAutoVideoSinkClass *klass)
* interface.
*/
pspec = g_param_spec_object ("texture",
- "Texture",
- "Texture the video will be decoded into",
- CLUTTER_TYPE_TEXTURE,
- CLUTTER_GST_PARAM_READWRITE);
+ "Texture",
+ "Texture the video will be decoded into",
+ CLUTTER_TYPE_TEXTURE, CLUTTER_GST_PARAM_READWRITE);
g_object_class_install_property (oclass, PROP_TEXTURE, pspec);
gstelement_class->change_state =
- GST_DEBUG_FUNCPTR (clutter_gst_auto_video_sink_change_state);
+ GST_DEBUG_FUNCPTR (clutter_gst_auto_video_sink_change_state);
}
static void
-clutter_gst_auto_video_sink_init (ClutterGstAutoVideoSink *bin)
+clutter_gst_auto_video_sink_init (ClutterGstAutoVideoSink * bin)
{
GstPad *proxypad;
GstPadTemplate *template;
- GValue val = {0, };
+ GValue val = { 0, };
bin->setup = FALSE;
bin->texture = NULL;
@@ -775,28 +730,24 @@ clutter_gst_auto_video_sink_init (ClutterGstAutoVideoSink *bin)
proxypad = NULL;
- if (bin->sink_pad)
- {
- GstIterator *it = gst_pad_iterate_internal_links (bin->sink_pad);
- if (G_UNLIKELY (!it ||
- gst_iterator_next (it,
- &val) !=
- GST_ITERATOR_OK ||
- g_value_get_object (&val) == NULL))
- {
- GST_ERROR_OBJECT (bin,
- "failed to get internally linked pad from sinkpad");
- }
- if (it)
- gst_iterator_free (it);
- proxypad = GST_PAD_CAST (g_value_get_object (&val));
+ if (bin->sink_pad) {
+ GstIterator *it = gst_pad_iterate_internal_links (bin->sink_pad);
+ if (G_UNLIKELY (!it ||
+ gst_iterator_next (it,
+ &val) !=
+ GST_ITERATOR_OK || g_value_get_object (&val) == NULL)) {
+ GST_ERROR_OBJECT (bin,
+ "failed to get internally linked pad from sinkpad");
}
+ if (it)
+ gst_iterator_free (it);
+ proxypad = GST_PAD_CAST (g_value_get_object (&val));
+ }
bin->sink_block_pad = proxypad;
gst_pad_set_query_function (bin->sink_pad,
- GST_DEBUG_FUNCPTR (
- clutter_gst_auto_video_sink_query));
+ GST_DEBUG_FUNCPTR (clutter_gst_auto_video_sink_query));
gst_element_add_pad (GST_ELEMENT (bin), bin->sink_pad);
/* Setup the element */
GST_OBJECT_FLAG_SET (GST_OBJECT (bin), GST_ELEMENT_FLAG_SINK);
diff --git a/clutter-gst/clutter-gst-debug.c b/clutter-gst/clutter-gst-debug.c
index 609c64a..8cbfddd 100644
--- a/clutter-gst/clutter-gst-debug.c
+++ b/clutter-gst/clutter-gst-debug.c
@@ -31,17 +31,17 @@
#ifdef CLUTTER_GST_ENABLE_DEBUG
-guint clutter_gst_debug_flags = 0; /* global clutter-gst debug flag */
+guint clutter_gst_debug_flags = 0; /* global clutter-gst debug flag */
static GTimer *clutter_gst_timer;
static const GDebugKey clutter_gst_debug_keys[] = {
- { "misc", CLUTTER_GST_DEBUG_MISC },
- { "media", CLUTTER_GST_DEBUG_MEDIA },
- { "aspect-ratio", CLUTTER_GST_DEBUG_ASPECT_RATIO },
- { "buffering", CLUTTER_GST_DEBUG_BUFFERING },
- { "audio-stream", CLUTTER_GST_DEBUG_AUDIO_STREAM },
- { "subtitles", CLUTTER_GST_DEBUG_SUBTITLES }
+ {"misc", CLUTTER_GST_DEBUG_MISC},
+ {"media", CLUTTER_GST_DEBUG_MEDIA},
+ {"aspect-ratio", CLUTTER_GST_DEBUG_ASPECT_RATIO},
+ {"buffering", CLUTTER_GST_DEBUG_BUFFERING},
+ {"audio-stream", CLUTTER_GST_DEBUG_AUDIO_STREAM},
+ {"subtitles", CLUTTER_GST_DEBUG_SUBTITLES}
};
/**
@@ -59,10 +59,11 @@ _clutter_gst_get_timestamp (void)
seconds = g_timer_elapsed (clutter_gst_timer, NULL);
- return (gulong)(seconds / 1.0e-6);
+ return (gulong) (seconds / 1.0e-6);
}
-gboolean _clutter_gst_debug_init (void)
+gboolean
+_clutter_gst_debug_init (void)
{
const char *env_string;
@@ -75,12 +76,10 @@ gboolean _clutter_gst_debug_init (void)
return TRUE;
clutter_gst_debug_flags =
- g_parse_debug_string (env_string,
- clutter_gst_debug_keys,
- G_N_ELEMENTS (clutter_gst_debug_keys));
+ g_parse_debug_string (env_string,
+ clutter_gst_debug_keys, G_N_ELEMENTS (clutter_gst_debug_keys));
return TRUE;
}
#endif /* CLUTTER_GST_ENABLE_DEBUG */
-
diff --git a/clutter-gst/clutter-gst-player.c b/clutter-gst/clutter-gst-player.c
index 341c861..6bb3025 100644
--- a/clutter-gst/clutter-gst-player.c
+++ b/clutter-gst/clutter-gst-player.c
@@ -64,12 +64,11 @@
#endif
-typedef ClutterGstPlayerIface ClutterGstPlayerInterface;
-
-G_DEFINE_INTERFACE_WITH_CODE (ClutterGstPlayer, clutter_gst_player, G_TYPE_OBJECT,
- g_type_interface_add_prerequisite (g_define_type_id,
- CLUTTER_TYPE_MEDIA))
+typedef ClutterGstPlayerIface ClutterGstPlayerInterface;
+G_DEFINE_INTERFACE_WITH_CODE (ClutterGstPlayer, clutter_gst_player,
+ G_TYPE_OBJECT, g_type_interface_add_prerequisite (g_define_type_id,
+ CLUTTER_TYPE_MEDIA))
#define PLAYER_GET_PRIVATE(player) \
(g_object_get_qdata (G_OBJECT (player), \
clutter_gst_player_private_quark))
@@ -77,125 +76,119 @@ G_DEFINE_INTERFACE_WITH_CODE (ClutterGstPlayer, clutter_gst_player, G_TYPE_OBJEC
(g_object_set_qdata (G_OBJECT (player), \
clutter_gst_player_private_quark, \
private))
-
#define PLAYER_GET_CLASS_PRIVATE(player) \
(g_type_get_qdata (G_OBJECT_TYPE (player), \
clutter_gst_player_class_quark))
-
/* idle timeouts (in ms) */
#define TICK_TIMEOUT 500
#define BUFFERING_TIMEOUT 250
-
-enum
-{
- DOWNLOAD_BUFFERING,
-
- LAST_SIGNAL
-};
-
-enum
-{
- PROP_0,
-
- /* ClutterMedia properties */
- PROP_URI,
- PROP_PLAYING,
- PROP_PROGRESS,
- PROP_SUBTITLE_URI,
- PROP_SUBTITLE_FONT_NAME,
- PROP_AUDIO_VOLUME,
- PROP_CAN_SEEK,
- PROP_BUFFER_FILL,
- PROP_DURATION,
-
- /* ClutterGstPlayer properties */
- PROP_IDLE,
- PROP_USER_AGENT,
- PROP_SEEK_FLAGS,
- PROP_AUDIO_STREAMS,
- PROP_AUDIO_STREAM,
- PROP_SUBTITLE_TRACKS,
- PROP_SUBTITLE_TRACK,
- PROP_IN_SEEK
-};
-
-struct _ClutterGstPlayerIfacePrivate
-{
- void (*set_property) (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec);
- void (*get_property) (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec);
-};
-
-typedef struct _ClutterGstPlayerPrivate ClutterGstPlayerPrivate;
+ enum
+ {
+ DOWNLOAD_BUFFERING,
+
+ LAST_SIGNAL
+ };
+
+ enum
+ {
+ PROP_0,
+
+ /* ClutterMedia properties */
+ PROP_URI,
+ PROP_PLAYING,
+ PROP_PROGRESS,
+ PROP_SUBTITLE_URI,
+ PROP_SUBTITLE_FONT_NAME,
+ PROP_AUDIO_VOLUME,
+ PROP_CAN_SEEK,
+ PROP_BUFFER_FILL,
+ PROP_DURATION,
+
+ /* ClutterGstPlayer properties */
+ PROP_IDLE,
+ PROP_USER_AGENT,
+ PROP_SEEK_FLAGS,
+ PROP_AUDIO_STREAMS,
+ PROP_AUDIO_STREAM,
+ PROP_SUBTITLE_TRACKS,
+ PROP_SUBTITLE_TRACK,
+ PROP_IN_SEEK
+ };
+
+ struct _ClutterGstPlayerIfacePrivate
+ {
+ void (*set_property) (GObject * object,
+ guint property_id, const GValue * value, GParamSpec * pspec);
+ void (*get_property) (GObject * object,
+ guint property_id, GValue * value, GParamSpec * pspec);
+ };
+
+ typedef struct _ClutterGstPlayerPrivate ClutterGstPlayerPrivate;
/* Elements don't expose header files */
-typedef enum {
- GST_PLAY_FLAG_VIDEO = (1 << 0),
- GST_PLAY_FLAG_AUDIO = (1 << 1),
- GST_PLAY_FLAG_TEXT = (1 << 2),
- GST_PLAY_FLAG_VIS = (1 << 3),
- GST_PLAY_FLAG_SOFT_VOLUME = (1 << 4),
- GST_PLAY_FLAG_NATIVE_AUDIO = (1 << 5),
- GST_PLAY_FLAG_NATIVE_VIDEO = (1 << 6),
- GST_PLAY_FLAG_DOWNLOAD = (1 << 7),
- GST_PLAY_FLAG_BUFFERING = (1 << 8),
- GST_PLAY_FLAG_DEINTERLACE = (1 << 9)
-} GstPlayFlags;
-
-struct _ClutterGstPlayerPrivate
-{
- GObject parent;
-
- GstElement *pipeline;
- GstBus *bus;
-
- gchar *uri;
-
- guint is_idle : 1;
- guint can_seek : 1;
- guint in_seek : 1;
- guint is_changing_uri : 1;
- guint in_error : 1;
- guint in_eos : 1;
- guint in_download_buffering : 1;
- /* when in progressive download, we use the buffer-fill property to signal
- * that we have enough data to play the stream. This flag allows to send
- * the notify that buffer-fill is 1.0 only once */
- guint virtual_stream_buffer_signalled : 1;
-
- gdouble stacked_progress;
-
- gdouble target_progress;
- GstState target_state;
-
- guint tick_timeout_id;
- guint buffering_timeout_id;
-
- /* This is a cubic volume, suitable for use in a UI cf. StreamVolume doc */
- gdouble volume;
-
- gdouble buffer_fill;
- gdouble duration;
- gchar *font_name;
- gchar *user_agent;
-
- GstSeekFlags seek_flags; /* flags for the seek in set_progress(); */
-
- GstElement *download_buffering_element;
-
- GList *audio_streams;
- GList *subtitle_tracks;
-};
-
-static GQuark clutter_gst_player_private_quark = 0;
-static GQuark clutter_gst_player_class_quark = 0;
-
-static guint signals[LAST_SIGNAL] = { 0, };
+ typedef enum
+ {
+ GST_PLAY_FLAG_VIDEO = (1 << 0),
+ GST_PLAY_FLAG_AUDIO = (1 << 1),
+ GST_PLAY_FLAG_TEXT = (1 << 2),
+ GST_PLAY_FLAG_VIS = (1 << 3),
+ GST_PLAY_FLAG_SOFT_VOLUME = (1 << 4),
+ GST_PLAY_FLAG_NATIVE_AUDIO = (1 << 5),
+ GST_PLAY_FLAG_NATIVE_VIDEO = (1 << 6),
+ GST_PLAY_FLAG_DOWNLOAD = (1 << 7),
+ GST_PLAY_FLAG_BUFFERING = (1 << 8),
+ GST_PLAY_FLAG_DEINTERLACE = (1 << 9)
+ } GstPlayFlags;
+
+ struct _ClutterGstPlayerPrivate
+ {
+ GObject parent;
+
+ GstElement *pipeline;
+ GstBus *bus;
+
+ gchar *uri;
+
+ guint is_idle:1;
+ guint can_seek:1;
+ guint in_seek:1;
+ guint is_changing_uri:1;
+ guint in_error:1;
+ guint in_eos:1;
+ guint in_download_buffering:1;
+ /* when in progressive download, we use the buffer-fill property to signal
+ * that we have enough data to play the stream. This flag allows to send
+ * the notify that buffer-fill is 1.0 only once */
+ guint virtual_stream_buffer_signalled:1;
+
+ gdouble stacked_progress;
+
+ gdouble target_progress;
+ GstState target_state;
+
+ guint tick_timeout_id;
+ guint buffering_timeout_id;
+
+ /* This is a cubic volume, suitable for use in a UI cf. StreamVolume doc */
+ gdouble volume;
+
+ gdouble buffer_fill;
+ gdouble duration;
+ gchar *font_name;
+ gchar *user_agent;
+
+ GstSeekFlags seek_flags; /* flags for the seek in set_progress(); */
+
+ GstElement *download_buffering_element;
+
+ GList *audio_streams;
+ GList *subtitle_tracks;
+ };
+
+ static GQuark clutter_gst_player_private_quark = 0;
+ static GQuark clutter_gst_player_class_quark = 0;
+
+ static guint signals[LAST_SIGNAL] = { 0, };
static gboolean player_buffering_timeout (gpointer data);
@@ -203,31 +196,27 @@ static gboolean player_buffering_timeout (gpointer data);
#ifdef CLUTTER_GST_ENABLE_DEBUG
static gchar *
-get_stream_description (GstTagList *tags,
- gint track_num)
+get_stream_description (GstTagList * tags, gint track_num)
{
gchar *description = NULL;
- if (tags)
- {
-
- gst_tag_list_get_string (tags, GST_TAG_LANGUAGE_CODE, &description);
+ if (tags) {
- if (description)
- {
- const gchar *language = gst_tag_get_language_name (description);
+ gst_tag_list_get_string (tags, GST_TAG_LANGUAGE_CODE, &description);
- if (language)
- {
- g_free (description);
- description = g_strdup (language);
- }
- }
+ if (description) {
+ const gchar *language = gst_tag_get_language_name (description);
- if (!description)
- gst_tag_list_get_string (tags, GST_TAG_CODEC, &description);
+ if (language) {
+ g_free (description);
+ description = g_strdup (language);
+ }
}
+ if (!description)
+ gst_tag_list_get_string (tags, GST_TAG_CODEC, &description);
+ }
+
if (!description)
description = g_strdup_printf ("Track %d", track_num);
@@ -235,7 +224,7 @@ get_stream_description (GstTagList *tags,
}
gchar *
-list_to_string (GList *list)
+list_to_string (GList * list)
{
GstTagList *tags;
gchar *description;
@@ -248,13 +237,12 @@ list_to_string (GList *list)
string = g_string_new (NULL);
n = g_list_length (list);
- for (i = 0, l = list; i < n - 1; i++, l = g_list_next (l))
- {
- tags = l->data;
- description = get_stream_description (tags, i);
- g_string_append_printf (string, "%s, ", description);
- g_free (description);
- }
+ for (i = 0, l = list; i < n - 1; i++, l = g_list_next (l)) {
+ tags = l->data;
+ description = get_stream_description (tags, i);
+ g_string_append_printf (string, "%s, ", description);
+ g_free (description);
+ }
tags = l->data;
description = get_stream_description (tags, i);
@@ -268,8 +256,7 @@ list_to_string (GList *list)
static const gchar *
gst_state_to_string (GstState state)
{
- switch (state)
- {
+ switch (state) {
case GST_STATE_VOID_PENDING:
return "pending";
case GST_STATE_NULL:
@@ -280,23 +267,22 @@ gst_state_to_string (GstState state)
return "paused";
case GST_STATE_PLAYING:
return "playing";
- }
+ }
return "Unknown state";
}
static void
-free_tags_list (GList **listp)
+free_tags_list (GList ** listp)
{
GList *l;
l = *listp;
- while (l)
- {
- if (l->data)
- gst_tag_list_free (l->data);
- l = g_list_delete_link (l, l);
- }
+ while (l) {
+ if (l->data)
+ gst_tag_list_free (l->data);
+ l = g_list_delete_link (l, l);
+ }
*listp = NULL;
}
@@ -312,8 +298,7 @@ tick_timeout (gpointer data)
}
static void
-player_set_user_agent (ClutterGstPlayer *player,
- const gchar *user_agent)
+player_set_user_agent (ClutterGstPlayer * player, const gchar * user_agent)
{
ClutterGstPlayerPrivate *priv = PLAYER_GET_PRIVATE (player);
GstElement *source;
@@ -327,7 +312,7 @@ player_set_user_agent (ClutterGstPlayer *player,
return;
pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (source),
- "user-agent");
+ "user-agent");
if (pspec == NULL)
return;
@@ -337,23 +322,21 @@ player_set_user_agent (ClutterGstPlayer *player,
}
static void
-autoload_subtitle (ClutterGstPlayer *player,
- const gchar *uri)
+autoload_subtitle (ClutterGstPlayer * player, const gchar * uri)
{
ClutterGstPlayerPrivate *priv = PLAYER_GET_PRIVATE (player);
gchar *path, *dot, *subtitle_path;
GFile *video;
guint i;
- static const char subtitles_extensions[][4] =
- {
- "sub", "SUB",
- "srt", "SRT",
- "smi", "SMI",
- "ssa", "SSA",
- "ass", "ASS",
- "asc", "ASC"
- };
+ static const char subtitles_extensions[][4] = {
+ "sub", "SUB",
+ "srt", "SRT",
+ "smi", "SMI",
+ "ssa", "SSA",
+ "ass", "ASS",
+ "asc", "ASC"
+ };
/* do not try to look for subtitle files if the video file is not mounted
* locally */
@@ -383,37 +366,34 @@ autoload_subtitle (ClutterGstPlayer *player,
/* reuse dot to point to the first byte of the extension of subtitle_path */
dot = subtitle_path + (dot - path);
- for (i = 0; i < G_N_ELEMENTS (subtitles_extensions); i++)
- {
- GFile *candidate;
-
- memcpy (dot, subtitles_extensions[i], 4);
- candidate = g_file_new_for_path (subtitle_path);
- if (g_file_query_exists (candidate, NULL))
- {
- gchar *suburi;
+ for (i = 0; i < G_N_ELEMENTS (subtitles_extensions); i++) {
+ GFile *candidate;
- suburi = g_file_get_uri (candidate);
+ memcpy (dot, subtitles_extensions[i], 4);
+ candidate = g_file_new_for_path (subtitle_path);
+ if (g_file_query_exists (candidate, NULL)) {
+ gchar *suburi;
- CLUTTER_GST_NOTE (MEDIA, "found subtitle: %s", suburi);
+ suburi = g_file_get_uri (candidate);
- g_object_set (priv->pipeline, "suburi", suburi, NULL);
- g_free (suburi);
+ CLUTTER_GST_NOTE (MEDIA, "found subtitle: %s", suburi);
- g_object_unref (candidate);
- break;
- }
+ g_object_set (priv->pipeline, "suburi", suburi, NULL);
+ g_free (suburi);
g_object_unref (candidate);
+ break;
}
+ g_object_unref (candidate);
+ }
+
g_free (path);
g_free (subtitle_path);
}
static void
-set_subtitle_uri (ClutterGstPlayer *player,
- const gchar *uri)
+set_subtitle_uri (ClutterGstPlayer * player, const gchar * uri)
{
ClutterGstPlayerPrivate *priv = PLAYER_GET_PRIVATE (player);
GstPlayFlags flags;
@@ -431,42 +411,37 @@ set_subtitle_uri (ClutterGstPlayer *player,
}
static void
-player_configure_buffering_timeout (ClutterGstPlayer *player,
- guint ms)
+player_configure_buffering_timeout (ClutterGstPlayer * player, guint ms)
{
ClutterGstPlayerPrivate *priv = PLAYER_GET_PRIVATE (player);
- if (priv->buffering_timeout_id)
- {
- g_source_remove (priv->buffering_timeout_id);
- priv->buffering_timeout_id = 0;
- }
+ if (priv->buffering_timeout_id) {
+ g_source_remove (priv->buffering_timeout_id);
+ priv->buffering_timeout_id = 0;
+ }
- if (ms)
- {
- priv->buffering_timeout_id =
+ if (ms) {
+ priv->buffering_timeout_id =
g_timeout_add (ms, player_buffering_timeout, player);
- }
+ }
}
static void
-player_clear_download_buffering (ClutterGstPlayer *player)
+player_clear_download_buffering (ClutterGstPlayer * player)
{
ClutterGstPlayerPrivate *priv = PLAYER_GET_PRIVATE (player);
- if (priv->download_buffering_element)
- {
- g_object_unref (priv->download_buffering_element);
- priv->download_buffering_element = NULL;
- }
+ if (priv->download_buffering_element) {
+ g_object_unref (priv->download_buffering_element);
+ priv->download_buffering_element = NULL;
+ }
player_configure_buffering_timeout (player, 0);
priv->in_download_buffering = FALSE;
priv->virtual_stream_buffer_signalled = 0;
}
static void
-set_uri (ClutterGstPlayer *player,
- const gchar *uri)
+set_uri (ClutterGstPlayer * player, const gchar * uri)
{
ClutterGstPlayerPrivate *priv = PLAYER_GET_PRIVATE (player);
GObject *self = G_OBJECT (player);
@@ -482,51 +457,43 @@ set_uri (ClutterGstPlayer *player,
priv->in_eos = FALSE;
priv->in_error = FALSE;
- if (uri)
- {
- priv->uri = g_strdup (uri);
+ if (uri) {
+ priv->uri = g_strdup (uri);
- /* Ensure the tick timeout is installed.
- *
- * We also have it installed in PAUSED state, because
- * seeks etc may have a delayed effect on the position.
- */
- if (priv->tick_timeout_id == 0)
- {
- priv->tick_timeout_id =
- g_timeout_add (TICK_TIMEOUT, tick_timeout, self);
- }
+ /* Ensure the tick timeout is installed.
+ *
+ * We also have it installed in PAUSED state, because
+ * seeks etc may have a delayed effect on the position.
+ */
+ if (priv->tick_timeout_id == 0) {
+ priv->tick_timeout_id = g_timeout_add (TICK_TIMEOUT, tick_timeout, self);
+ }
+
+ /* try to load subtitles based on the uri of the file */
+ set_subtitle_uri (player, NULL);
- /* try to load subtitles based on the uri of the file */
- set_subtitle_uri (player, NULL);
+ /* reset the states of download buffering */
+ player_clear_download_buffering (player);
+ } else {
+ priv->uri = NULL;
- /* reset the states of download buffering */
- player_clear_download_buffering (player);
+ if (priv->tick_timeout_id) {
+ g_source_remove (priv->tick_timeout_id);
+ priv->tick_timeout_id = 0;
}
- else
- {
- priv->uri = NULL;
-
- if (priv->tick_timeout_id)
- {
- g_source_remove (priv->tick_timeout_id);
- priv->tick_timeout_id = 0;
- }
-
- if (priv->buffering_timeout_id)
- {
- g_source_remove (priv->buffering_timeout_id);
- priv->buffering_timeout_id = 0;
- }
- if (priv->download_buffering_element)
- {
- g_object_unref (priv->download_buffering_element);
- priv->download_buffering_element = NULL;
- }
+ if (priv->buffering_timeout_id) {
+ g_source_remove (priv->buffering_timeout_id);
+ priv->buffering_timeout_id = 0;
+ }
+ if (priv->download_buffering_element) {
+ g_object_unref (priv->download_buffering_element);
+ priv->download_buffering_element = NULL;
}
+ }
+
priv->can_seek = FALSE;
priv->duration = 0.0;
priv->stacked_progress = 0.0;
@@ -534,29 +501,26 @@ set_uri (ClutterGstPlayer *player,
CLUTTER_GST_NOTE (MEDIA, "setting URI: %s", uri);
- if (uri)
- {
- gst_element_get_state (priv->pipeline, &state, &pending, 0);
- if (pending)
- state = pending;
+ if (uri) {
+ gst_element_get_state (priv->pipeline, &state, &pending, 0);
+ if (pending)
+ state = pending;
- gst_element_set_state (priv->pipeline, GST_STATE_NULL);
+ gst_element_set_state (priv->pipeline, GST_STATE_NULL);
- g_object_set (priv->pipeline, "uri", uri, NULL);
- set_subtitle_uri (player, NULL);
- autoload_subtitle (player, uri);
+ g_object_set (priv->pipeline, "uri", uri, NULL);
+ set_subtitle_uri (player, NULL);
+ autoload_subtitle (player, uri);
- gst_element_set_state (priv->pipeline, state);
+ gst_element_set_state (priv->pipeline, state);
- priv->is_changing_uri = TRUE;
- }
- else
- {
- priv->is_idle = TRUE;
- set_subtitle_uri (player, NULL);
- gst_element_set_state (priv->pipeline, GST_STATE_NULL);
- g_object_notify (G_OBJECT (player), "idle");
- }
+ priv->is_changing_uri = TRUE;
+ } else {
+ priv->is_idle = TRUE;
+ set_subtitle_uri (player, NULL);
+ gst_element_set_state (priv->pipeline, GST_STATE_NULL);
+ g_object_notify (G_OBJECT (player), "idle");
+ }
/*
* Emit notifications for all these to make sure UI is not showing
@@ -577,8 +541,7 @@ set_uri (ClutterGstPlayer *player,
}
static void
-set_in_seek (ClutterGstPlayer *player,
- gboolean seeking)
+set_in_seek (ClutterGstPlayer * player, gboolean seeking)
{
ClutterGstPlayerPrivate *priv = PLAYER_GET_PRIVATE (player);
@@ -588,8 +551,7 @@ set_in_seek (ClutterGstPlayer *player,
static void
-set_playing (ClutterGstPlayer *player,
- gboolean playing)
+set_playing (ClutterGstPlayer * player, gboolean playing)
{
ClutterGstPlayerPrivate *priv = PLAYER_GET_PRIVATE (player);
@@ -603,24 +565,21 @@ set_playing (ClutterGstPlayer *player,
priv->target_state = playing ? GST_STATE_PLAYING : GST_STATE_PAUSED;
- if (priv->uri)
- {
- set_in_seek (player, FALSE);
+ if (priv->uri) {
+ set_in_seek (player, FALSE);
- gst_element_set_state (priv->pipeline, priv->target_state);
- }
- else
- {
- if (playing)
- g_warning ("Unable to start playing: no URI is set");
- }
+ gst_element_set_state (priv->pipeline, priv->target_state);
+ } else {
+ if (playing)
+ g_warning ("Unable to start playing: no URI is set");
+ }
g_object_notify (G_OBJECT (player), "playing");
g_object_notify (G_OBJECT (player), "progress");
}
static gboolean
-get_playing (ClutterGstPlayer *player)
+get_playing (ClutterGstPlayer * player)
{
ClutterGstPlayerPrivate *priv = PLAYER_GET_PRIVATE (player);
GstState state, pending;
@@ -642,8 +601,7 @@ get_playing (ClutterGstPlayer *player)
}
static void
-set_progress (ClutterGstPlayer *player,
- gdouble progress)
+set_progress (ClutterGstPlayer * player, gdouble progress)
{
ClutterGstPlayerPrivate *priv = PLAYER_GET_PRIVATE (player);
GstQuery *duration_q;
@@ -657,45 +615,39 @@ set_progress (ClutterGstPlayer *player,
priv->in_eos = FALSE;
priv->target_progress = progress;
- if (priv->in_download_buffering)
- {
- /* we clear the virtual_stream_buffer_signalled flag as it's likely we
- * need to buffer again */
- priv->virtual_stream_buffer_signalled = 0;
- }
+ if (priv->in_download_buffering) {
+ /* we clear the virtual_stream_buffer_signalled flag as it's likely we
+ * need to buffer again */
+ priv->virtual_stream_buffer_signalled = 0;
+ }
- if (priv->in_seek || priv->is_idle || priv->is_changing_uri)
- {
- /* We can't seek right now, let's save the position where we
- want to seek and do that later. */
- CLUTTER_GST_NOTE (MEDIA,
- "already seeking/idleing. stacking progress point.");
- priv->stacked_progress = progress;
- return;
- }
+ if (priv->in_seek || priv->is_idle || priv->is_changing_uri) {
+ /* We can't seek right now, let's save the position where we
+ want to seek and do that later. */
+ CLUTTER_GST_NOTE (MEDIA,
+ "already seeking/idleing. stacking progress point.");
+ priv->stacked_progress = progress;
+ return;
+ }
duration_q = gst_query_new_duration (GST_FORMAT_TIME);
- if (gst_element_query (priv->pipeline, duration_q))
- {
- gint64 duration = 0;
+ if (gst_element_query (priv->pipeline, duration_q)) {
+ gint64 duration = 0;
- gst_query_parse_duration (duration_q, NULL, &duration);
+ gst_query_parse_duration (duration_q, NULL, &duration);
- position = progress * duration;
- }
- else
+ position = progress * duration;
+ } else
position = 0;
gst_query_unref (duration_q);
gst_element_seek (priv->pipeline,
- 1.0,
- GST_FORMAT_TIME,
- GST_SEEK_FLAG_FLUSH | priv->seek_flags,
- GST_SEEK_TYPE_SET,
- position,
- GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE);
+ 1.0,
+ GST_FORMAT_TIME,
+ GST_SEEK_FLAG_FLUSH | priv->seek_flags,
+ GST_SEEK_TYPE_SET, position, GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE);
set_in_seek (player, TRUE);
@@ -705,7 +657,7 @@ set_progress (ClutterGstPlayer *player,
}
static gdouble
-get_progress (ClutterGstPlayer *player)
+get_progress (ClutterGstPlayer * player)
{
ClutterGstPlayerPrivate *priv = PLAYER_GET_PRIVATE (player);
GstQuery *position_q, *duration_q;
@@ -717,44 +669,39 @@ get_progress (ClutterGstPlayer *player)
/* when hitting an error or after an EOS, playbin has some weird values when
* querying the duration and progress. We default to 0.0 on error and 1.0 on
* EOS */
- if (priv->in_error)
- {
- CLUTTER_GST_NOTE (MEDIA, "get progress (error): 0.0");
- return 0.0;
- }
+ if (priv->in_error) {
+ CLUTTER_GST_NOTE (MEDIA, "get progress (error): 0.0");
+ return 0.0;
+ }
- if (priv->in_eos)
- {
- CLUTTER_GST_NOTE (MEDIA, "get progress (eos): 1.0");
- return 1.0;
- }
+ if (priv->in_eos) {
+ CLUTTER_GST_NOTE (MEDIA, "get progress (eos): 1.0");
+ return 1.0;
+ }
/* When seeking, the progress returned by playbin is 0.0. We want that to be
* the last known position instead as returning 0.0 will have some ugly
* effects, say on a progress bar getting updated from the progress tick. */
- if (priv->in_seek || priv->is_changing_uri)
- {
- CLUTTER_GST_NOTE (MEDIA, "get progress (target): %.02f",
- priv->target_progress);
- return priv->target_progress;
- }
+ if (priv->in_seek || priv->is_changing_uri) {
+ CLUTTER_GST_NOTE (MEDIA, "get progress (target): %.02f",
+ priv->target_progress);
+ return priv->target_progress;
+ }
position_q = gst_query_new_position (GST_FORMAT_TIME);
duration_q = gst_query_new_duration (GST_FORMAT_TIME);
if (gst_element_query (priv->pipeline, position_q) &&
- gst_element_query (priv->pipeline, duration_q))
- {
- gint64 position, duration;
+ gst_element_query (priv->pipeline, duration_q)) {
+ gint64 position, duration;
- position = duration = 0;
+ position = duration = 0;
- gst_query_parse_position (position_q, NULL, &position);
- gst_query_parse_duration (duration_q, NULL, &duration);
+ gst_query_parse_position (position_q, NULL, &position);
+ gst_query_parse_duration (duration_q, NULL, &duration);
- progress = CLAMP ((gdouble) position / (gdouble) duration, 0.0, 1.0);
- }
- else
+ progress = CLAMP ((gdouble) position / (gdouble) duration, 0.0, 1.0);
+ } else
progress = 0.0;
gst_query_unref (position_q);
@@ -766,8 +713,7 @@ get_progress (ClutterGstPlayer *player)
}
static void
-set_subtitle_font_name (ClutterGstPlayer *player,
- const gchar *font_name)
+set_subtitle_font_name (ClutterGstPlayer * player, const gchar * font_name)
{
ClutterGstPlayerPrivate *priv = PLAYER_GET_PRIVATE (player);
@@ -782,25 +728,23 @@ set_subtitle_font_name (ClutterGstPlayer *player,
}
static void
-set_audio_volume (ClutterGstPlayer *player,
- gdouble volume)
+set_audio_volume (ClutterGstPlayer * player, gdouble volume)
{
ClutterGstPlayerPrivate *priv = PLAYER_GET_PRIVATE (player);
- if (!priv->pipeline)
- return;
+ if (!priv->pipeline)
+ return;
CLUTTER_GST_NOTE (MEDIA, "set volume: %.02f", volume);
volume = CLAMP (volume, 0.0, 1.0);
gst_stream_volume_set_volume (GST_STREAM_VOLUME (priv->pipeline),
- GST_STREAM_VOLUME_FORMAT_CUBIC,
- volume);
+ GST_STREAM_VOLUME_FORMAT_CUBIC, volume);
g_object_notify (G_OBJECT (player), "audio-volume");
}
static gdouble
-get_audio_volume (ClutterGstPlayer *player)
+get_audio_volume (ClutterGstPlayer * player)
{
ClutterGstPlayerPrivate *priv = PLAYER_GET_PRIVATE (player);
@@ -832,20 +776,19 @@ player_buffering_timeout (gpointer data)
query = gst_query_new_buffering (GST_FORMAT_PERCENT);
res = gst_element_query (element, query);
- if (res == FALSE)
- {
- priv->buffering_timeout_id = 0;
- player_clear_download_buffering (player);
- return FALSE;
- }
+ if (res == FALSE) {
+ priv->buffering_timeout_id = 0;
+ player_clear_download_buffering (player);
+ return FALSE;
+ }
/* signal the current range */
gst_query_parse_buffering_stats (query, NULL, NULL, NULL, &left);
gst_query_parse_buffering_range (query, NULL, &start, &stop, NULL);
CLUTTER_GST_NOTE (BUFFERING,
- "start %" G_GINT64_FORMAT ", stop %" G_GINT64_FORMAT
- ", buffering left %" G_GINT64_FORMAT, start, stop, left);
+ "start %" G_GINT64_FORMAT ", stop %" G_GINT64_FORMAT
+ ", buffering left %" G_GINT64_FORMAT, start, stop, left);
start_d = (gdouble) start / GST_FORMAT_PERCENT_MAX;
stop_d = (gdouble) stop / GST_FORMAT_PERCENT_MAX;
@@ -861,53 +804,45 @@ player_buffering_timeout (gpointer data)
priv->buffer_fill = seconds_buffered / 2.0;
priv->buffer_fill = CLAMP (priv->buffer_fill, 0.0, 1.0);
- if (priv->buffer_fill != 1.0 || !priv->virtual_stream_buffer_signalled)
- {
- CLUTTER_GST_NOTE (BUFFERING, "buffer holds %0.2fs of data, buffer-fill "
- "is %.02f", seconds_buffered, priv->buffer_fill);
+ if (priv->buffer_fill != 1.0 || !priv->virtual_stream_buffer_signalled) {
+ CLUTTER_GST_NOTE (BUFFERING, "buffer holds %0.2fs of data, buffer-fill "
+ "is %.02f", seconds_buffered, priv->buffer_fill);
- g_object_notify (G_OBJECT (player), "buffer-fill");
+ g_object_notify (G_OBJECT (player), "buffer-fill");
- if (priv->buffer_fill == 1.0)
- priv->virtual_stream_buffer_signalled = 1;
- }
+ if (priv->buffer_fill == 1.0)
+ priv->virtual_stream_buffer_signalled = 1;
+ }
gst_element_get_state (priv->pipeline, &current_state, NULL, 0);
- if (priv->buffer_fill < 1.0)
- {
- if (current_state != GST_STATE_PAUSED)
- {
- CLUTTER_GST_NOTE (BUFFERING, "pausing the pipeline");
- gst_element_set_state (priv->pipeline, GST_STATE_PAUSED);
- }
+ if (priv->buffer_fill < 1.0) {
+ if (current_state != GST_STATE_PAUSED) {
+ CLUTTER_GST_NOTE (BUFFERING, "pausing the pipeline");
+ gst_element_set_state (priv->pipeline, GST_STATE_PAUSED);
}
- else
- {
- if (current_state != priv->target_state)
- {
- CLUTTER_GST_NOTE (BUFFERING, "restoring the pipeline");
- gst_element_set_state (priv->pipeline, priv->target_state);
- }
+ } else {
+ if (current_state != priv->target_state) {
+ CLUTTER_GST_NOTE (BUFFERING, "restoring the pipeline");
+ gst_element_set_state (priv->pipeline, priv->target_state);
}
+ }
/* the file has finished downloading */
- if (left == G_GINT64_CONSTANT (0))
- {
- priv->buffering_timeout_id = 0;
+ if (left == G_GINT64_CONSTANT (0)) {
+ priv->buffering_timeout_id = 0;
- player_clear_download_buffering (player);
- gst_query_unref (query);
- return FALSE;
- }
+ player_clear_download_buffering (player);
+ gst_query_unref (query);
+ return FALSE;
+ }
gst_query_unref (query);
return TRUE;
}
static void
-bus_message_error_cb (GstBus *bus,
- GstMessage *message,
- ClutterGstPlayer *player)
+bus_message_error_cb (GstBus * bus,
+ GstMessage * message, ClutterGstPlayer * player)
{
ClutterGstPlayerPrivate *priv = PLAYER_GET_PRIVATE (player);
GError *error = NULL;
@@ -933,9 +868,8 @@ bus_message_error_cb (GstBus *bus,
* material when looping
*/
static void
-bus_message_eos_cb (GstBus *bus,
- GstMessage *message,
- ClutterGstPlayer *player)
+bus_message_eos_cb (GstBus * bus,
+ GstMessage * message, ClutterGstPlayer * player)
{
ClutterGstPlayerPrivate *priv = PLAYER_GET_PRIVATE (player);
GstState state, pending;
@@ -951,17 +885,15 @@ bus_message_eos_cb (GstBus *bus,
if (pending)
state = pending;
- if (!(state == GST_STATE_PLAYING || state == GST_STATE_PAUSED))
- {
- priv->is_idle = TRUE;
- g_object_notify (G_OBJECT (player), "idle");
- }
+ if (!(state == GST_STATE_PLAYING || state == GST_STATE_PAUSED)) {
+ priv->is_idle = TRUE;
+ g_object_notify (G_OBJECT (player), "idle");
+ }
}
static void
-bus_message_buffering_cb (GstBus *bus,
- GstMessage *message,
- ClutterGstPlayer *player)
+bus_message_buffering_cb (GstBus * bus,
+ GstMessage * message, ClutterGstPlayer * player)
{
ClutterGstPlayerPrivate *priv = PLAYER_GET_PRIVATE (player);
GstBufferingMode mode;
@@ -973,8 +905,7 @@ bus_message_buffering_cb (GstBus *bus,
if (mode != GST_BUFFERING_DOWNLOAD)
priv->in_download_buffering = FALSE;
- switch (mode)
- {
+ switch (mode) {
case GST_BUFFERING_STREAM:
gst_message_parse_buffering (message, &buffer_percent);
priv->buffer_fill = CLAMP ((gdouble) buffer_percent / 100.0, 0.0, 1.0);
@@ -986,22 +917,17 @@ bus_message_buffering_cb (GstBus *bus,
* gst_element_set_state() */
gst_element_get_state (priv->pipeline, &current_state, NULL, 0);
- if (priv->buffer_fill < 1.0)
- {
- if (current_state != GST_STATE_PAUSED)
- {
- CLUTTER_GST_NOTE (BUFFERING, "pausing the pipeline");
- gst_element_set_state (priv->pipeline, GST_STATE_PAUSED);
- }
+ if (priv->buffer_fill < 1.0) {
+ if (current_state != GST_STATE_PAUSED) {
+ CLUTTER_GST_NOTE (BUFFERING, "pausing the pipeline");
+ gst_element_set_state (priv->pipeline, GST_STATE_PAUSED);
}
- else
- {
- if (current_state != priv->target_state)
- {
- CLUTTER_GST_NOTE (BUFFERING, "restoring the pipeline");
- gst_element_set_state (priv->pipeline, priv->target_state);
- }
+ } else {
+ if (current_state != priv->target_state) {
+ CLUTTER_GST_NOTE (BUFFERING, "restoring the pipeline");
+ gst_element_set_state (priv->pipeline, priv->target_state);
}
+ }
g_object_notify (G_OBJECT (player), "buffer-fill");
break;
@@ -1036,13 +962,12 @@ bus_message_buffering_cb (GstBus *bus,
default:
g_warning ("Buffering mode %d not handled", mode);
break;
- }
+ }
}
static void
-on_source_changed (GstElement *pipeline,
- GParamSpec *pspec,
- ClutterGstPlayer *player)
+on_source_changed (GstElement * pipeline,
+ GParamSpec * pspec, ClutterGstPlayer * player)
{
ClutterGstPlayerPrivate *priv = PLAYER_GET_PRIVATE (player);
@@ -1050,7 +975,7 @@ on_source_changed (GstElement *pipeline,
}
static void
-query_duration (ClutterGstPlayer *player)
+query_duration (ClutterGstPlayer * player)
{
ClutterGstPlayerPrivate *priv = PLAYER_GET_PRIVATE (player);
gboolean success;
@@ -1058,8 +983,7 @@ query_duration (ClutterGstPlayer *player)
gdouble new_duration, difference;
success = gst_element_query_duration (priv->pipeline,
- GST_FORMAT_TIME,
- &duration);
+ GST_FORMAT_TIME, &duration);
if (G_UNLIKELY (success != TRUE))
return;
@@ -1070,20 +994,18 @@ query_duration (ClutterGstPlayer *player)
* from the old one (as the duration signal is mainly used to update the
* time displayed in a UI */
difference = ABS (priv->duration - new_duration);
- if (difference > 1e-3)
- {
- CLUTTER_GST_NOTE (MEDIA, "duration: %.02f", new_duration);
- priv->duration = new_duration;
+ if (difference > 1e-3) {
+ CLUTTER_GST_NOTE (MEDIA, "duration: %.02f", new_duration);
+ priv->duration = new_duration;
- if (difference > 1.0)
- g_object_notify (G_OBJECT (player), "duration");
- }
+ if (difference > 1.0)
+ g_object_notify (G_OBJECT (player), "duration");
+ }
}
static void
-bus_message_duration_cb (GstBus *bus,
- GstMessage *message,
- ClutterGstPlayer *player)
+bus_message_duration_cb (GstBus * bus,
+ GstMessage * message, ClutterGstPlayer * player)
{
gint64 duration;
@@ -1097,9 +1019,8 @@ bus_message_duration_cb (GstBus *bus,
}
static void
-bus_message_state_change_cb (GstBus *bus,
- GstMessage *message,
- ClutterGstPlayer *player)
+bus_message_state_change_cb (GstBus * bus,
+ GstMessage * message, ClutterGstPlayer * player)
{
ClutterGstPlayerPrivate *priv = PLAYER_GET_PRIVATE (player);
GstState old_state, new_state;
@@ -1112,90 +1033,74 @@ bus_message_state_change_cb (GstBus *bus,
gst_message_parse_state_changed (message, &old_state, &new_state, NULL);
CLUTTER_GST_NOTE (MEDIA, "state change: %s -> %s",
- gst_state_to_string (old_state),
- gst_state_to_string (new_state));
+ gst_state_to_string (old_state), gst_state_to_string (new_state));
if (old_state == new_state)
return;
- if (old_state == GST_STATE_READY &&
- new_state == GST_STATE_PAUSED)
- {
- GstQuery *query;
+ if (old_state == GST_STATE_READY && new_state == GST_STATE_PAUSED) {
+ GstQuery *query;
- /* Determine whether we can seek */
- query = gst_query_new_seeking (GST_FORMAT_TIME);
+ /* Determine whether we can seek */
+ query = gst_query_new_seeking (GST_FORMAT_TIME);
- if (gst_element_query (priv->pipeline, query))
- {
- gboolean can_seek = FALSE;
+ if (gst_element_query (priv->pipeline, query)) {
+ gboolean can_seek = FALSE;
- gst_query_parse_seeking (query, NULL, &can_seek,
- NULL,
- NULL);
+ gst_query_parse_seeking (query, NULL, &can_seek, NULL, NULL);
- priv->can_seek = (can_seek == TRUE) ? TRUE : FALSE;
- }
+ priv->can_seek = (can_seek == TRUE) ? TRUE : FALSE;
+ } else {
+ /* could not query for ability to seek by querying the
+ * pipeline; let's crudely try by using the URI
+ */
+ if (priv->uri && g_str_has_prefix (priv->uri, "http://"))
+ priv->can_seek = FALSE;
else
- {
- /* could not query for ability to seek by querying the
- * pipeline; let's crudely try by using the URI
- */
- if (priv->uri && g_str_has_prefix (priv->uri, "http://"))
- priv->can_seek = FALSE;
- else
- priv->can_seek = TRUE;
- }
+ priv->can_seek = TRUE;
+ }
- gst_query_unref (query);
+ gst_query_unref (query);
- CLUTTER_GST_NOTE (MEDIA, "can-seek: %d", priv->can_seek);
+ CLUTTER_GST_NOTE (MEDIA, "can-seek: %d", priv->can_seek);
- g_object_notify (G_OBJECT (player), "can-seek");
+ g_object_notify (G_OBJECT (player), "can-seek");
- query_duration (player);
- }
+ query_duration (player);
+ }
/* is_idle controls the drawing with the idle material */
- if (new_state == GST_STATE_NULL)
- {
- priv->is_idle = TRUE;
- g_object_notify (G_OBJECT (player), "idle");
- }
- else if (new_state == GST_STATE_PLAYING)
- {
- priv->is_idle = FALSE;
- priv->is_changing_uri = FALSE;
- g_object_notify (G_OBJECT (player), "idle");
- }
+ if (new_state == GST_STATE_NULL) {
+ priv->is_idle = TRUE;
+ g_object_notify (G_OBJECT (player), "idle");
+ } else if (new_state == GST_STATE_PLAYING) {
+ priv->is_idle = FALSE;
+ priv->is_changing_uri = FALSE;
+ g_object_notify (G_OBJECT (player), "idle");
+ }
- if (!priv->is_idle)
- {
- if (priv->stacked_progress)
- {
- set_progress (player, priv->stacked_progress);
- }
+ if (!priv->is_idle) {
+ if (priv->stacked_progress) {
+ set_progress (player, priv->stacked_progress);
}
+ }
}
static void
-bus_message_async_done_cb (GstBus *bus,
- GstMessage *message,
- ClutterGstPlayer *player)
+bus_message_async_done_cb (GstBus * bus,
+ GstMessage * message, ClutterGstPlayer * player)
{
ClutterGstPlayerPrivate *priv = PLAYER_GET_PRIVATE (player);
- if (priv->in_seek)
- {
- g_object_notify (G_OBJECT (player), "progress");
+ if (priv->in_seek) {
+ g_object_notify (G_OBJECT (player), "progress");
- set_in_seek (player, FALSE);
+ set_in_seek (player, FALSE);
- if (priv->stacked_progress)
- {
- set_progress (player, priv->stacked_progress);
- }
+ if (priv->stacked_progress) {
+ set_progress (player, priv->stacked_progress);
}
+ }
}
static gboolean
@@ -1206,8 +1111,8 @@ on_volume_changed_main_context (gpointer data)
gdouble volume;
volume =
- gst_stream_volume_get_volume (GST_STREAM_VOLUME (priv->pipeline),
- GST_STREAM_VOLUME_FORMAT_CUBIC);
+ gst_stream_volume_get_volume (GST_STREAM_VOLUME (priv->pipeline),
+ GST_STREAM_VOLUME_FORMAT_CUBIC);
priv->volume = volume;
g_object_notify (G_OBJECT (player), "audio-volume");
@@ -1222,17 +1127,15 @@ on_volume_changed_main_context (gpointer data)
* called from the thread that runs the element, potentially different from
* the main thread */
static void
-on_volume_changed (GstElement *pipeline,
- GParamSpec *pspec,
- ClutterGstPlayer *player)
+on_volume_changed (GstElement * pipeline,
+ GParamSpec * pspec, ClutterGstPlayer * player)
{
g_idle_add (on_volume_changed_main_context, g_object_ref (player));
}
static GList *
-get_tags (GstElement *pipeline,
- const gchar *property_name,
- const gchar *action_signal)
+get_tags (GstElement * pipeline,
+ const gchar * property_name, const gchar * action_signal)
{
GList *ret = NULL;
gint i, n;
@@ -1241,14 +1144,13 @@ get_tags (GstElement *pipeline,
if (n == 0)
return NULL;
- for (i = 0; i < n; i++)
- {
- GstTagList *tags = NULL;
+ for (i = 0; i < n; i++) {
+ GstTagList *tags = NULL;
- g_signal_emit_by_name (G_OBJECT (pipeline), action_signal, i, &tags);
+ g_signal_emit_by_name (G_OBJECT (pipeline), action_signal, i, &tags);
- ret = g_list_prepend (ret, tags);
- }
+ ret = g_list_prepend (ret, tags);
+ }
return g_list_reverse (ret);
}
@@ -1273,16 +1175,14 @@ on_audio_changed_main_context (gpointer data)
/* same explanation as for notify::volume's usage of g_idle_add() */
static void
-on_audio_changed (GstElement *pipeline,
- ClutterGstPlayer *player)
+on_audio_changed (GstElement * pipeline, ClutterGstPlayer * player)
{
g_idle_add (on_audio_changed_main_context, g_object_ref (player));
}
static void
-on_audio_tags_changed (GstElement *pipeline,
- gint stream,
- ClutterGstPlayer *player)
+on_audio_tags_changed (GstElement * pipeline,
+ gint stream, ClutterGstPlayer * player)
{
gint current_stream;
@@ -1308,9 +1208,8 @@ on_current_audio_changed_main_context (gpointer data)
}
static void
-on_current_audio_changed (GstElement *pipeline,
- GParamSpec *pspec,
- ClutterGstPlayer *player)
+on_current_audio_changed (GstElement * pipeline,
+ GParamSpec * pspec, ClutterGstPlayer * player)
{
g_idle_add (on_current_audio_changed_main_context, g_object_ref (player));
}
@@ -1335,16 +1234,14 @@ on_text_changed_main_context (gpointer data)
/* same explanation as for notify::volume's usage of g_idle_add() */
static void
-on_text_changed (GstElement *pipeline,
- ClutterGstPlayer *player)
+on_text_changed (GstElement * pipeline, ClutterGstPlayer * player)
{
g_idle_add (on_text_changed_main_context, g_object_ref (player));
}
static void
-on_text_tags_changed (GstElement *pipeline,
- gint stream,
- ClutterGstPlayer *player)
+on_text_tags_changed (GstElement * pipeline,
+ gint stream, ClutterGstPlayer * player)
{
g_idle_add (on_text_changed_main_context, g_object_ref (player));
}
@@ -1363,9 +1260,8 @@ on_current_text_changed_main_context (gpointer data)
}
static void
-on_current_text_changed (GstElement *pipeline,
- GParamSpec *pspec,
- ClutterGstPlayer *player)
+on_current_text_changed (GstElement * pipeline,
+ GParamSpec * pspec, ClutterGstPlayer * player)
{
g_idle_add (on_current_text_changed_main_context, g_object_ref (player));
}
@@ -1373,16 +1269,13 @@ on_current_text_changed (GstElement *pipeline,
/* GObject's magic/madness */
static void
-clutter_gst_player_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
+clutter_gst_player_set_property (GObject * object,
+ guint property_id, const GValue * value, GParamSpec * pspec)
{
ClutterGstPlayer *player = CLUTTER_GST_PLAYER (object);
ClutterGstPlayerIfacePrivate *iface_priv;
- switch (property_id)
- {
+ switch (property_id) {
case PROP_URI:
set_uri (player, g_value_get_string (value));
break;
@@ -1408,45 +1301,38 @@ clutter_gst_player_set_property (GObject *object,
break;
case PROP_USER_AGENT:
- clutter_gst_player_set_user_agent (player,
- g_value_get_string (value));
+ clutter_gst_player_set_user_agent (player, g_value_get_string (value));
break;
case PROP_SEEK_FLAGS:
- clutter_gst_player_set_seek_flags (player,
- g_value_get_flags (value));
+ clutter_gst_player_set_seek_flags (player, g_value_get_flags (value));
break;
case PROP_AUDIO_STREAM:
- clutter_gst_player_set_audio_stream (player,
- g_value_get_int (value));
+ clutter_gst_player_set_audio_stream (player, g_value_get_int (value));
break;
case PROP_SUBTITLE_TRACK:
- clutter_gst_player_set_subtitle_track (player,
- g_value_get_int (value));
+ clutter_gst_player_set_subtitle_track (player, g_value_get_int (value));
break;
default:
iface_priv = PLAYER_GET_CLASS_PRIVATE (object);
iface_priv->set_property (object, property_id, value, pspec);
- }
+ }
}
static void
-clutter_gst_player_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
+clutter_gst_player_get_property (GObject * object,
+ guint property_id, GValue * value, GParamSpec * pspec)
{
ClutterGstPlayer *player = CLUTTER_GST_PLAYER (object);
ClutterGstPlayerPrivate *priv = PLAYER_GET_PRIVATE (player);
ClutterGstPlayerIfacePrivate *iface_priv;
gchar *str;
- switch (property_id)
- {
+ switch (property_id) {
case PROP_URI:
g_value_set_string (value, priv->uri);
break;
@@ -1489,21 +1375,21 @@ clutter_gst_player_get_property (GObject *object,
break;
case PROP_USER_AGENT:
- {
- gchar *user_agent;
+ {
+ gchar *user_agent;
- user_agent = clutter_gst_player_get_user_agent (player);
- g_value_take_string (value, user_agent);
- }
+ user_agent = clutter_gst_player_get_user_agent (player);
+ g_value_take_string (value, user_agent);
+ }
break;
case PROP_SEEK_FLAGS:
- {
- ClutterGstSeekFlags seek_flags;
+ {
+ ClutterGstSeekFlags seek_flags;
- seek_flags = clutter_gst_player_get_seek_flags (player);
- g_value_set_flags (value, seek_flags);
- }
+ seek_flags = clutter_gst_player_get_seek_flags (player);
+ g_value_set_flags (value, seek_flags);
+ }
break;
case PROP_AUDIO_STREAMS:
@@ -1511,12 +1397,12 @@ clutter_gst_player_get_property (GObject *object,
break;
case PROP_AUDIO_STREAM:
- {
- gint index_;
+ {
+ gint index_;
- index_ = clutter_gst_player_get_audio_stream (player);
- g_value_set_int (value, index_);
- }
+ index_ = clutter_gst_player_get_audio_stream (player);
+ g_value_set_int (value, index_);
+ }
break;
case PROP_SUBTITLE_TRACKS:
@@ -1524,12 +1410,12 @@ clutter_gst_player_get_property (GObject *object,
break;
case PROP_SUBTITLE_TRACK:
- {
- gint index_;
+ {
+ gint index_;
- index_ = clutter_gst_player_get_subtitle_track (player);
- g_value_set_int (value, index_);
- }
+ index_ = clutter_gst_player_get_subtitle_track (player);
+ g_value_set_int (value, index_);
+ }
break;
case PROP_IN_SEEK:
@@ -1539,7 +1425,7 @@ clutter_gst_player_get_property (GObject *object,
default:
iface_priv = PLAYER_GET_CLASS_PRIVATE (object);
iface_priv->get_property (object, property_id, value, pspec);
- }
+ }
}
/**
@@ -1554,14 +1440,13 @@ clutter_gst_player_get_property (GObject *object,
* Since: 1.4
*/
void
-clutter_gst_player_class_init (GObjectClass *object_class)
+clutter_gst_player_class_init (GObjectClass * object_class)
{
ClutterGstPlayerIfacePrivate *priv;
priv = g_new0 (ClutterGstPlayerIfacePrivate, 1);
g_type_set_qdata (G_OBJECT_CLASS_TYPE (object_class),
- clutter_gst_player_class_quark,
- priv);
+ clutter_gst_player_class_quark, priv);
/* Save object's methods we want to override */
priv->set_property = object_class->set_property;
@@ -1572,45 +1457,37 @@ clutter_gst_player_class_init (GObjectClass *object_class)
object_class->get_property = clutter_gst_player_get_property;
/* Override ClutterMedia's properties */
+ g_object_class_override_property (object_class, PROP_URI, "uri");
+ g_object_class_override_property (object_class, PROP_PLAYING, "playing");
+ g_object_class_override_property (object_class, PROP_PROGRESS, "progress");
g_object_class_override_property (object_class,
- PROP_URI, "uri");
- g_object_class_override_property (object_class,
- PROP_PLAYING, "playing");
- g_object_class_override_property (object_class,
- PROP_PROGRESS, "progress");
- g_object_class_override_property (object_class,
- PROP_SUBTITLE_URI, "subtitle-uri");
- g_object_class_override_property (object_class,
- PROP_SUBTITLE_FONT_NAME,
- "subtitle-font-name");
- g_object_class_override_property (object_class,
- PROP_AUDIO_VOLUME, "audio-volume");
+ PROP_SUBTITLE_URI, "subtitle-uri");
g_object_class_override_property (object_class,
- PROP_CAN_SEEK, "can-seek");
+ PROP_SUBTITLE_FONT_NAME, "subtitle-font-name");
g_object_class_override_property (object_class,
- PROP_DURATION, "duration");
+ PROP_AUDIO_VOLUME, "audio-volume");
+ g_object_class_override_property (object_class, PROP_CAN_SEEK, "can-seek");
+ g_object_class_override_property (object_class, PROP_DURATION, "duration");
g_object_class_override_property (object_class,
- PROP_BUFFER_FILL, "buffer-fill");
+ PROP_BUFFER_FILL, "buffer-fill");
/* Override ClutterGstPlayer's properties */
+ g_object_class_override_property (object_class, PROP_IDLE, "idle");
g_object_class_override_property (object_class,
- PROP_IDLE, "idle");
+ PROP_USER_AGENT, "user-agent");
g_object_class_override_property (object_class,
- PROP_USER_AGENT, "user-agent");
- g_object_class_override_property (object_class,
- PROP_SEEK_FLAGS, "seek-flags");
+ PROP_SEEK_FLAGS, "seek-flags");
g_object_class_override_property (object_class,
- PROP_AUDIO_STREAMS, "audio-streams");
+ PROP_AUDIO_STREAMS, "audio-streams");
g_object_class_override_property (object_class,
- PROP_AUDIO_STREAM, "audio-stream");
+ PROP_AUDIO_STREAM, "audio-stream");
g_object_class_override_property (object_class,
- PROP_SUBTITLE_TRACKS, "subtitle-tracks");
- g_object_class_override_property (object_class,
- PROP_SUBTITLE_TRACK, "subtitle-track");
+ PROP_SUBTITLE_TRACKS, "subtitle-tracks");
g_object_class_override_property (object_class,
- PROP_IN_SEEK, "in-seek");
+ PROP_SUBTITLE_TRACK, "subtitle-track");
+ g_object_class_override_property (object_class, PROP_IN_SEEK, "in-seek");
}
static GstElement *
@@ -1619,32 +1496,26 @@ get_pipeline (void)
GstElement *pipeline, *audio_sink;
pipeline = gst_element_factory_make ("playbin", "pipeline");
- if (!pipeline)
- {
- g_critical ("Unable to create playbin element");
- return NULL;
- }
+ if (!pipeline) {
+ g_critical ("Unable to create playbin element");
+ return NULL;
+ }
audio_sink = gst_element_factory_make ("gconfaudiosink", "audio-sink");
- if (!audio_sink)
- {
- audio_sink = gst_element_factory_make ("autoaudiosink", "audio-sink");
+ if (!audio_sink) {
+ audio_sink = gst_element_factory_make ("autoaudiosink", "audio-sink");
+ if (!audio_sink) {
+ audio_sink = gst_element_factory_make ("alsasink", "audio-sink");
+ g_warning ("Could not create a GST audio_sink. " "Audio unavailable.");
+
+ /* do we even need to bother? */
if (!audio_sink)
- {
- audio_sink = gst_element_factory_make ("alsasink", "audio-sink");
- g_warning ("Could not create a GST audio_sink. "
- "Audio unavailable.");
-
- /* do we even need to bother? */
- if (!audio_sink)
- audio_sink = gst_element_factory_make ("fakesink", "audio-sink");
- }
+ audio_sink = gst_element_factory_make ("fakesink", "audio-sink");
}
+ }
g_object_set (G_OBJECT (pipeline),
- "audio-sink", audio_sink,
- "subtitle-font-desc", "Sans 16",
- NULL);
+ "audio-sink", audio_sink, "subtitle-font-desc", "Sans 16", NULL);
return pipeline;
}
@@ -1652,7 +1523,7 @@ get_pipeline (void)
/* ClutterGstPlayerIface implementation */
static GstElement *
-clutter_gst_player_get_pipeline_impl (ClutterGstPlayer *player)
+clutter_gst_player_get_pipeline_impl (ClutterGstPlayer * player)
{
ClutterGstPlayerPrivate *priv;
@@ -1662,7 +1533,7 @@ clutter_gst_player_get_pipeline_impl (ClutterGstPlayer *player)
}
static gchar *
-clutter_gst_player_get_user_agent_impl (ClutterGstPlayer *player)
+clutter_gst_player_get_user_agent_impl (ClutterGstPlayer * player)
{
ClutterGstPlayerPrivate *priv;
GstElement *source;
@@ -1682,7 +1553,7 @@ clutter_gst_player_get_user_agent_impl (ClutterGstPlayer *player)
return NULL;
pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (source),
- "user-agent");
+ "user-agent");
if (pspec == NULL)
return NULL;
@@ -1692,8 +1563,8 @@ clutter_gst_player_get_user_agent_impl (ClutterGstPlayer *player)
}
static void
-clutter_gst_player_set_user_agent_impl (ClutterGstPlayer *player,
- const gchar *user_agent)
+clutter_gst_player_set_user_agent_impl (ClutterGstPlayer * player,
+ const gchar * user_agent)
{
ClutterGstPlayerPrivate *priv;
@@ -1709,7 +1580,7 @@ clutter_gst_player_set_user_agent_impl (ClutterGstPlayer *player,
}
static ClutterGstSeekFlags
-clutter_gst_player_get_seek_flags_impl (ClutterGstPlayer *player)
+clutter_gst_player_get_seek_flags_impl (ClutterGstPlayer * player)
{
ClutterGstPlayerPrivate *priv;
@@ -1722,8 +1593,8 @@ clutter_gst_player_get_seek_flags_impl (ClutterGstPlayer *player)
}
static void
-clutter_gst_player_set_seek_flags_impl (ClutterGstPlayer *player,
- ClutterGstSeekFlags flags)
+clutter_gst_player_set_seek_flags_impl (ClutterGstPlayer * player,
+ ClutterGstSeekFlags flags)
{
ClutterGstPlayerPrivate *priv;
@@ -1736,7 +1607,7 @@ clutter_gst_player_set_seek_flags_impl (ClutterGstPlayer *player,
}
static ClutterGstBufferingMode
-clutter_gst_player_get_buffering_mode_impl (ClutterGstPlayer *player)
+clutter_gst_player_get_buffering_mode_impl (ClutterGstPlayer * player)
{
ClutterGstPlayerPrivate *priv;
GstPlayFlags flags;
@@ -1752,8 +1623,8 @@ clutter_gst_player_get_buffering_mode_impl (ClutterGstPlayer *player)
}
static void
-clutter_gst_player_set_buffering_mode_impl (ClutterGstPlayer *player,
- ClutterGstBufferingMode mode)
+clutter_gst_player_set_buffering_mode_impl (ClutterGstPlayer * player,
+ ClutterGstBufferingMode mode)
{
ClutterGstPlayerPrivate *priv;
GstPlayFlags flags;
@@ -1762,8 +1633,7 @@ clutter_gst_player_set_buffering_mode_impl (ClutterGstPlayer *player,
g_object_get (G_OBJECT (priv->pipeline), "flags", &flags, NULL);
- switch (mode)
- {
+ switch (mode) {
case CLUTTER_GST_BUFFERING_MODE_STREAM:
flags &= ~GST_PLAY_FLAG_DOWNLOAD;
break;
@@ -1775,41 +1645,38 @@ clutter_gst_player_set_buffering_mode_impl (ClutterGstPlayer *player,
default:
g_warning ("Unexpected buffering mode %d", mode);
break;
- }
+ }
g_object_set (G_OBJECT (priv->pipeline), "flags", flags, NULL);
}
static GList *
-clutter_gst_player_get_audio_streams_impl (ClutterGstPlayer *player)
+clutter_gst_player_get_audio_streams_impl (ClutterGstPlayer * player)
{
ClutterGstPlayerPrivate *priv;
priv = PLAYER_GET_PRIVATE (player);
- if (CLUTTER_GST_DEBUG_ENABLED (AUDIO_STREAM))
- {
- gchar *streams;
+ if (CLUTTER_GST_DEBUG_ENABLED (AUDIO_STREAM)) {
+ gchar *streams;
- streams = list_to_string (priv->audio_streams);
- CLUTTER_GST_NOTE (AUDIO_STREAM, "audio streams: %s", streams);
- g_free (streams);
- }
+ streams = list_to_string (priv->audio_streams);
+ CLUTTER_GST_NOTE (AUDIO_STREAM, "audio streams: %s", streams);
+ g_free (streams);
+ }
return priv->audio_streams;
}
static gint
-clutter_gst_player_get_audio_stream_impl (ClutterGstPlayer *player)
+clutter_gst_player_get_audio_stream_impl (ClutterGstPlayer * player)
{
ClutterGstPlayerPrivate *priv;
gint index_ = -1;
priv = PLAYER_GET_PRIVATE (player);
- g_object_get (G_OBJECT (priv->pipeline),
- "current-audio", &index_,
- NULL);
+ g_object_get (G_OBJECT (priv->pipeline), "current-audio", &index_, NULL);
CLUTTER_GST_NOTE (AUDIO_STREAM, "audio stream is #%d", index_);
@@ -1817,53 +1684,48 @@ clutter_gst_player_get_audio_stream_impl (ClutterGstPlayer *player)
}
static void
-clutter_gst_player_set_audio_stream_impl (ClutterGstPlayer *player,
- gint index_)
+clutter_gst_player_set_audio_stream_impl (ClutterGstPlayer * player,
+ gint index_)
{
ClutterGstPlayerPrivate *priv;
priv = PLAYER_GET_PRIVATE (player);
g_return_if_fail (index_ >= 0 &&
- index_ < (gint) g_list_length (priv->audio_streams));
+ index_ < (gint) g_list_length (priv->audio_streams));
CLUTTER_GST_NOTE (AUDIO_STREAM, "set audio audio stream to #%d", index_);
- g_object_set (G_OBJECT (priv->pipeline),
- "current-audio", index_,
- NULL);
+ g_object_set (G_OBJECT (priv->pipeline), "current-audio", index_, NULL);
}
static GList *
-clutter_gst_player_get_subtitle_tracks_impl (ClutterGstPlayer *player)
+clutter_gst_player_get_subtitle_tracks_impl (ClutterGstPlayer * player)
{
ClutterGstPlayerPrivate *priv;
priv = PLAYER_GET_PRIVATE (player);
- if (CLUTTER_GST_DEBUG_ENABLED (SUBTITLES))
- {
- gchar *tracks;
+ if (CLUTTER_GST_DEBUG_ENABLED (SUBTITLES)) {
+ gchar *tracks;
- tracks = list_to_string (priv->subtitle_tracks);
- CLUTTER_GST_NOTE (SUBTITLES, "subtitle tracks: %s", tracks);
- g_free (tracks);
- }
+ tracks = list_to_string (priv->subtitle_tracks);
+ CLUTTER_GST_NOTE (SUBTITLES, "subtitle tracks: %s", tracks);
+ g_free (tracks);
+ }
return priv->subtitle_tracks;
}
static gint
-clutter_gst_player_get_subtitle_track_impl (ClutterGstPlayer *player)
+clutter_gst_player_get_subtitle_track_impl (ClutterGstPlayer * player)
{
ClutterGstPlayerPrivate *priv;
gint index_ = -1;
priv = PLAYER_GET_PRIVATE (player);
- g_object_get (G_OBJECT (priv->pipeline),
- "current-text", &index_,
- NULL);
+ g_object_get (G_OBJECT (priv->pipeline), "current-text", &index_, NULL);
CLUTTER_GST_NOTE (SUBTITLES, "text track is #%d", index_);
@@ -1871,8 +1733,8 @@ clutter_gst_player_get_subtitle_track_impl (ClutterGstPlayer *player)
}
static void
-clutter_gst_player_set_subtitle_track_impl (ClutterGstPlayer *player,
- gint index_)
+clutter_gst_player_set_subtitle_track_impl (ClutterGstPlayer * player,
+ gint index_)
{
ClutterGstPlayerPrivate *priv;
GstPlayFlags flags;
@@ -1880,7 +1742,7 @@ clutter_gst_player_set_subtitle_track_impl (ClutterGstPlayer *player,
priv = PLAYER_GET_PRIVATE (player);
g_return_if_fail (index_ >= -1 &&
- index_ < (gint) g_list_length (priv->subtitle_tracks));
+ index_ < (gint) g_list_length (priv->subtitle_tracks));
CLUTTER_GST_NOTE (SUBTITLES, "set subtitle track to #%d", index_);
@@ -1888,19 +1750,16 @@ clutter_gst_player_set_subtitle_track_impl (ClutterGstPlayer *player,
flags &= ~GST_PLAY_FLAG_TEXT;
g_object_set (priv->pipeline, "flags", flags, NULL);
- if (index_ >= 0)
- {
- g_object_set (G_OBJECT (priv->pipeline),
- "current-text", index_,
- NULL);
+ if (index_ >= 0) {
+ g_object_set (G_OBJECT (priv->pipeline), "current-text", index_, NULL);
- flags |= GST_PLAY_FLAG_TEXT;
- g_object_set (priv->pipeline, "flags", flags, NULL);
- }
+ flags |= GST_PLAY_FLAG_TEXT;
+ g_object_set (priv->pipeline, "flags", flags, NULL);
+ }
}
static gboolean
-clutter_gst_player_get_idle_impl (ClutterGstPlayer *player)
+clutter_gst_player_get_idle_impl (ClutterGstPlayer * player)
{
ClutterGstPlayerPrivate *priv;
@@ -1910,7 +1769,7 @@ clutter_gst_player_get_idle_impl (ClutterGstPlayer *player)
}
static gboolean
-clutter_gst_player_get_in_seek_impl (ClutterGstPlayer *player)
+clutter_gst_player_get_in_seek_impl (ClutterGstPlayer * player)
{
ClutterGstPlayerPrivate *priv;
@@ -1920,8 +1779,7 @@ clutter_gst_player_get_in_seek_impl (ClutterGstPlayer *player)
}
-/**/
-
+ /**/
#if defined (CLUTTER_WINDOWING_X11) && defined (HAVE_HW_DECODER_SUPPORT)
static GstBusSyncReply
on_sync_message (GstBus * bus, GstMessage * message, gpointer user_data)
@@ -1935,10 +1793,9 @@ on_sync_message (GstBus * bus, GstMessage * message, gpointer user_data)
for (i = 0; types[i]; i++) {
- if (!strcmp(types[i], "x11-display")) {
+ if (!strcmp (types[i], "x11-display")) {
gst_video_context_set_context_pointer (context, "x11-display", display);
- }
- else if (!strcmp(types[i], "x11-display-name")) {
+ } else if (!strcmp (types[i], "x11-display-name")) {
gst_video_context_set_context_string (context, "x11-display-name",
DisplayString (display));
} else {
@@ -1971,7 +1828,7 @@ on_sync_message (GstBus * bus, GstMessage * message, gpointer user_data)
* Since: 1.4
*/
gboolean
-clutter_gst_player_init (ClutterGstPlayer *player)
+clutter_gst_player_init (ClutterGstPlayer * player)
{
ClutterGstPlayerPrivate *priv;
ClutterGstPlayerIface *iface;
@@ -2009,14 +1866,13 @@ clutter_gst_player_init (ClutterGstPlayer *player)
priv->in_download_buffering = FALSE;
priv->pipeline = get_pipeline ();
- if (!priv->pipeline)
- {
- g_critical ("Unable to create pipeline");
- return FALSE;
- }
+ if (!priv->pipeline) {
+ g_critical ("Unable to create pipeline");
+ return FALSE;
+ }
g_signal_connect (priv->pipeline, "notify::source",
- G_CALLBACK (on_source_changed), player);
+ G_CALLBACK (on_source_changed), player);
/* We default to not playing until someone calls set_playing(TRUE) */
priv->target_state = GST_STATE_PAUSED;
@@ -2029,47 +1885,34 @@ clutter_gst_player_init (ClutterGstPlayer *player)
gst_bus_add_signal_watch (priv->bus);
g_signal_connect_object (priv->bus, "message::error",
- G_CALLBACK (bus_message_error_cb),
- player, 0);
+ G_CALLBACK (bus_message_error_cb), player, 0);
g_signal_connect_object (priv->bus, "message::eos",
- G_CALLBACK (bus_message_eos_cb),
- player, 0);
+ G_CALLBACK (bus_message_eos_cb), player, 0);
g_signal_connect_object (priv->bus, "message::buffering",
- G_CALLBACK (bus_message_buffering_cb),
- player, 0);
+ G_CALLBACK (bus_message_buffering_cb), player, 0);
g_signal_connect_object (priv->bus, "message::duration",
- G_CALLBACK (bus_message_duration_cb),
- player, 0);
+ G_CALLBACK (bus_message_duration_cb), player, 0);
g_signal_connect_object (priv->bus, "message::state-changed",
- G_CALLBACK (bus_message_state_change_cb),
- player, 0);
+ G_CALLBACK (bus_message_state_change_cb), player, 0);
g_signal_connect_object (priv->bus, "message::async-done",
- G_CALLBACK (bus_message_async_done_cb),
- player, 0);
+ G_CALLBACK (bus_message_async_done_cb), player, 0);
g_signal_connect (priv->pipeline, "notify::volume",
- G_CALLBACK (on_volume_changed),
- player);
+ G_CALLBACK (on_volume_changed), player);
g_signal_connect (priv->pipeline, "audio-changed",
- G_CALLBACK (on_audio_changed),
- player);
+ G_CALLBACK (on_audio_changed), player);
g_signal_connect (priv->pipeline, "audio-tags-changed",
- G_CALLBACK (on_audio_tags_changed),
- player);
+ G_CALLBACK (on_audio_tags_changed), player);
g_signal_connect (priv->pipeline, "notify::current-audio",
- G_CALLBACK (on_current_audio_changed),
- player);
+ G_CALLBACK (on_current_audio_changed), player);
g_signal_connect (priv->pipeline, "text-changed",
- G_CALLBACK (on_text_changed),
- player);
+ G_CALLBACK (on_text_changed), player);
g_signal_connect (priv->pipeline, "text-tags-changed",
- G_CALLBACK (on_text_tags_changed),
- player);
+ G_CALLBACK (on_text_tags_changed), player);
g_signal_connect (priv->pipeline, "notify::current-text",
- G_CALLBACK (on_current_text_changed),
- player);
+ G_CALLBACK (on_current_text_changed), player);
#if defined(CLUTTER_WINDOWING_X11) && defined (HAVE_HW_DECODER_SUPPORT)
gst_bus_set_sync_handler (priv->bus, on_sync_message,
@@ -2092,7 +1935,7 @@ clutter_gst_player_init (ClutterGstPlayer *player)
* Since: 1.4
*/
void
-clutter_gst_player_deinit (ClutterGstPlayer *player)
+clutter_gst_player_deinit (ClutterGstPlayer * player)
{
ClutterGstPlayerPrivate *priv;
@@ -2105,37 +1948,32 @@ clutter_gst_player_deinit (ClutterGstPlayer *player)
PLAYER_SET_PRIVATE (player, NULL);
- if (priv->tick_timeout_id)
- {
- g_source_remove (priv->tick_timeout_id);
- priv->tick_timeout_id = 0;
- }
+ if (priv->tick_timeout_id) {
+ g_source_remove (priv->tick_timeout_id);
+ priv->tick_timeout_id = 0;
+ }
- if (priv->buffering_timeout_id)
- {
- g_source_remove (priv->buffering_timeout_id);
- priv->buffering_timeout_id = 0;
- }
+ if (priv->buffering_timeout_id) {
+ g_source_remove (priv->buffering_timeout_id);
+ priv->buffering_timeout_id = 0;
+ }
- if (priv->download_buffering_element)
- {
- g_object_unref (priv->download_buffering_element);
- priv->download_buffering_element = NULL;
- }
+ if (priv->download_buffering_element) {
+ g_object_unref (priv->download_buffering_element);
+ priv->download_buffering_element = NULL;
+ }
gst_element_set_state (priv->pipeline, GST_STATE_NULL);
- if (priv->bus)
- {
- gst_bus_remove_signal_watch (priv->bus);
- priv->bus = NULL;
- }
+ if (priv->bus) {
+ gst_bus_remove_signal_watch (priv->bus);
+ priv->bus = NULL;
+ }
- if (priv->pipeline)
- {
- gst_object_unref (GST_OBJECT (priv->pipeline));
- priv->pipeline = NULL;
- }
+ if (priv->pipeline) {
+ gst_object_unref (GST_OBJECT (priv->pipeline));
+ priv->pipeline = NULL;
+ }
g_free (priv->uri);
g_free (priv->font_name);
@@ -2147,7 +1985,7 @@ clutter_gst_player_deinit (ClutterGstPlayer *player)
}
static void
-clutter_gst_player_default_init (ClutterGstPlayerIface *iface)
+clutter_gst_player_default_init (ClutterGstPlayerIface * iface)
{
GParamSpec *pspec;
@@ -2159,10 +1997,8 @@ clutter_gst_player_default_init (ClutterGstPlayerIface *iface)
* Since: 1.4
*/
pspec = g_param_spec_boolean ("idle",
- "Idle",
- "Idle state of the player's pipeline",
- TRUE,
- CLUTTER_GST_PARAM_READABLE);
+ "Idle",
+ "Idle state of the player's pipeline", TRUE, CLUTTER_GST_PARAM_READABLE);
g_object_interface_install_property (iface, pspec);
/**
@@ -2173,10 +2009,9 @@ clutter_gst_player_default_init (ClutterGstPlayerIface *iface)
* Since: 1.4
*/
pspec = g_param_spec_string ("user-agent",
- "User Agent",
- "User Agent used with network protocols",
- NULL,
- CLUTTER_GST_PARAM_READWRITE);
+ "User Agent",
+ "User Agent used with network protocols",
+ NULL, CLUTTER_GST_PARAM_READWRITE);
g_object_interface_install_property (iface, pspec);
/**
@@ -2187,11 +2022,10 @@ clutter_gst_player_default_init (ClutterGstPlayerIface *iface)
* Since: 1.4
*/
pspec = g_param_spec_flags ("seek-flags",
- "Seek Flags",
- "Flags to use when seeking",
- CLUTTER_GST_TYPE_SEEK_FLAGS,
- CLUTTER_GST_SEEK_FLAG_NONE,
- CLUTTER_GST_PARAM_READWRITE);
+ "Seek Flags",
+ "Flags to use when seeking",
+ CLUTTER_GST_TYPE_SEEK_FLAGS,
+ CLUTTER_GST_SEEK_FLAG_NONE, CLUTTER_GST_PARAM_READWRITE);
g_object_interface_install_property (iface, pspec);
/**
@@ -2202,9 +2036,8 @@ clutter_gst_player_default_init (ClutterGstPlayerIface *iface)
* Since: 1.4
*/
pspec = g_param_spec_pointer ("audio-streams",
- "Audio Streams",
- "List of the audio streams of the media",
- CLUTTER_GST_PARAM_READABLE);
+ "Audio Streams",
+ "List of the audio streams of the media", CLUTTER_GST_PARAM_READABLE);
g_object_interface_install_property (iface, pspec);
/**
@@ -2215,23 +2048,20 @@ clutter_gst_player_default_init (ClutterGstPlayerIface *iface)
* Since: 1.4
*/
pspec = g_param_spec_int ("audio-stream",
- "Audio Stream",
- "Index of the current audio stream",
- -1, G_MAXINT, -1,
- CLUTTER_GST_PARAM_READWRITE);
+ "Audio Stream",
+ "Index of the current audio stream",
+ -1, G_MAXINT, -1, CLUTTER_GST_PARAM_READWRITE);
g_object_interface_install_property (iface, pspec);
pspec = g_param_spec_pointer ("subtitle-tracks",
- "Subtitles Tracks",
- "List of the subtitles tracks of the media",
- CLUTTER_GST_PARAM_READABLE);
+ "Subtitles Tracks",
+ "List of the subtitles tracks of the media", CLUTTER_GST_PARAM_READABLE);
g_object_interface_install_property (iface, pspec);
pspec = g_param_spec_int ("subtitle-track",
- "Subtitles Track",
- "Index of the current subtitles track",
- -1, G_MAXINT, -1,
- CLUTTER_GST_PARAM_READWRITE);
+ "Subtitles Track",
+ "Index of the current subtitles track",
+ -1, G_MAXINT, -1, CLUTTER_GST_PARAM_READWRITE);
g_object_interface_install_property (iface, pspec);
@@ -2243,10 +2073,8 @@ clutter_gst_player_default_init (ClutterGstPlayerIface *iface)
* Since: 1.6
*/
pspec = g_param_spec_boolean ("in-seek",
- "In seek mode",
- "If currently seeking",
- FALSE,
- CLUTTER_GST_PARAM_READABLE);
+ "In seek mode",
+ "If currently seeking", FALSE, CLUTTER_GST_PARAM_READABLE);
g_object_interface_install_property (iface, pspec);
@@ -2264,23 +2092,22 @@ clutter_gst_player_default_init (ClutterGstPlayerIface *iface)
* Since: 1.4
*/
signals[DOWNLOAD_BUFFERING] =
- g_signal_new ("download-buffering",
- CLUTTER_GST_TYPE_PLAYER,
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (ClutterGstPlayerIface,
- download_buffering),
- NULL, NULL,
- _clutter_gst_marshal_VOID__DOUBLE_DOUBLE,
- G_TYPE_NONE, 2, G_TYPE_DOUBLE, G_TYPE_DOUBLE);
+ g_signal_new ("download-buffering",
+ CLUTTER_GST_TYPE_PLAYER,
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (ClutterGstPlayerIface,
+ download_buffering),
+ NULL, NULL,
+ _clutter_gst_marshal_VOID__DOUBLE_DOUBLE,
+ G_TYPE_NONE, 2, G_TYPE_DOUBLE, G_TYPE_DOUBLE);
/* Setup a quark for per instance private data */
- if (!clutter_gst_player_private_quark)
- {
- clutter_gst_player_private_quark =
+ if (!clutter_gst_player_private_quark) {
+ clutter_gst_player_private_quark =
g_quark_from_static_string ("clutter-gst-player-private-quark");
- clutter_gst_player_class_quark =
+ clutter_gst_player_class_quark =
g_quark_from_static_string ("clutter-gst-player-class-quark");
- }
+ }
}
/* ClutterGstIface */
@@ -2297,7 +2124,7 @@ clutter_gst_player_default_init (ClutterGstPlayerIface *iface)
* Since: 1.4
*/
GstElement *
-clutter_gst_player_get_pipeline (ClutterGstPlayer *player)
+clutter_gst_player_get_pipeline (ClutterGstPlayer * player)
{
ClutterGstPlayerIface *iface;
@@ -2320,7 +2147,7 @@ clutter_gst_player_get_pipeline (ClutterGstPlayer *player)
* Since: 1.4
*/
gchar *
-clutter_gst_player_get_user_agent (ClutterGstPlayer *player)
+clutter_gst_player_get_user_agent (ClutterGstPlayer * player)
{
ClutterGstPlayerIface *iface;
@@ -2345,8 +2172,8 @@ clutter_gst_player_get_user_agent (ClutterGstPlayer *player)
* Since: 1.4
*/
void
-clutter_gst_player_set_user_agent (ClutterGstPlayer *player,
- const gchar *user_agent)
+clutter_gst_player_set_user_agent (ClutterGstPlayer * player,
+ const gchar * user_agent)
{
ClutterGstPlayerIface *iface;
@@ -2368,12 +2195,12 @@ clutter_gst_player_set_user_agent (ClutterGstPlayer *player,
* Since: 1.4
*/
ClutterGstSeekFlags
-clutter_gst_player_get_seek_flags (ClutterGstPlayer *player)
+clutter_gst_player_get_seek_flags (ClutterGstPlayer * player)
{
ClutterGstPlayerIface *iface;
g_return_val_if_fail (CLUTTER_GST_IS_PLAYER (player),
- CLUTTER_GST_SEEK_FLAG_NONE);
+ CLUTTER_GST_SEEK_FLAG_NONE);
iface = CLUTTER_GST_PLAYER_GET_INTERFACE (player);
@@ -2391,8 +2218,8 @@ clutter_gst_player_get_seek_flags (ClutterGstPlayer *player)
* Since: 1.4
*/
void
-clutter_gst_player_set_seek_flags (ClutterGstPlayer *player,
- ClutterGstSeekFlags flags)
+clutter_gst_player_set_seek_flags (ClutterGstPlayer * player,
+ ClutterGstSeekFlags flags)
{
ClutterGstPlayerIface *iface;
@@ -2412,12 +2239,12 @@ clutter_gst_player_set_seek_flags (ClutterGstPlayer *player,
* Since: 1.4
*/
ClutterGstBufferingMode
-clutter_gst_player_get_buffering_mode (ClutterGstPlayer *player)
+clutter_gst_player_get_buffering_mode (ClutterGstPlayer * player)
{
ClutterGstPlayerIface *iface;
g_return_val_if_fail (CLUTTER_GST_IS_PLAYER (player),
- CLUTTER_GST_BUFFERING_MODE_STREAM);
+ CLUTTER_GST_BUFFERING_MODE_STREAM);
iface = CLUTTER_GST_PLAYER_GET_INTERFACE (player);
@@ -2432,8 +2259,8 @@ clutter_gst_player_get_buffering_mode (ClutterGstPlayer *player)
* Since: 1.4
*/
void
-clutter_gst_player_set_buffering_mode (ClutterGstPlayer *player,
- ClutterGstBufferingMode mode)
+clutter_gst_player_set_buffering_mode (ClutterGstPlayer * player,
+ ClutterGstBufferingMode mode)
{
ClutterGstPlayerIface *iface;
@@ -2456,7 +2283,7 @@ clutter_gst_player_set_buffering_mode (ClutterGstPlayer *player,
* Since: 1.4
*/
GList *
-clutter_gst_player_get_audio_streams (ClutterGstPlayer *player)
+clutter_gst_player_get_audio_streams (ClutterGstPlayer * player)
{
ClutterGstPlayerIface *iface;
@@ -2481,7 +2308,7 @@ clutter_gst_player_get_audio_streams (ClutterGstPlayer *player)
* Since: 1.4
*/
gint
-clutter_gst_player_get_audio_stream (ClutterGstPlayer *player)
+clutter_gst_player_get_audio_stream (ClutterGstPlayer * player)
{
ClutterGstPlayerIface *iface;
@@ -2503,8 +2330,7 @@ clutter_gst_player_get_audio_stream (ClutterGstPlayer *player)
* Since: 1.4
*/
void
-clutter_gst_player_set_audio_stream (ClutterGstPlayer *player,
- gint index_)
+clutter_gst_player_set_audio_stream (ClutterGstPlayer * player, gint index_)
{
ClutterGstPlayerIface *iface;
@@ -2527,7 +2353,7 @@ clutter_gst_player_set_audio_stream (ClutterGstPlayer *player,
* Since: 1.4
*/
GList *
-clutter_gst_player_get_subtitle_tracks (ClutterGstPlayer *player)
+clutter_gst_player_get_subtitle_tracks (ClutterGstPlayer * player)
{
ClutterGstPlayerIface *iface;
@@ -2552,7 +2378,7 @@ clutter_gst_player_get_subtitle_tracks (ClutterGstPlayer *player)
* Since: 1.4
*/
gint
-clutter_gst_player_get_subtitle_track (ClutterGstPlayer *player)
+clutter_gst_player_get_subtitle_track (ClutterGstPlayer * player)
{
ClutterGstPlayerIface *iface;
@@ -2576,8 +2402,7 @@ clutter_gst_player_get_subtitle_track (ClutterGstPlayer *player)
* Since: 1.4
*/
void
-clutter_gst_player_set_subtitle_track (ClutterGstPlayer *player,
- gint index_)
+clutter_gst_player_set_subtitle_track (ClutterGstPlayer * player, gint index_)
{
ClutterGstPlayerIface *iface;
@@ -2599,7 +2424,7 @@ clutter_gst_player_set_subtitle_track (ClutterGstPlayer *player,
* Since: 1.4
*/
gboolean
-clutter_gst_player_get_idle (ClutterGstPlayer *player)
+clutter_gst_player_get_idle (ClutterGstPlayer * player)
{
ClutterGstPlayerIface *iface;
@@ -2621,7 +2446,7 @@ clutter_gst_player_get_idle (ClutterGstPlayer *player)
* Since: 1.6
*/
gboolean
-clutter_gst_player_get_in_seek (ClutterGstPlayer *player)
+clutter_gst_player_get_in_seek (ClutterGstPlayer * player)
{
ClutterGstPlayerIface *iface;
diff --git a/clutter-gst/clutter-gst-plugin.c b/clutter-gst/clutter-gst-plugin.c
index 9eabbaf..1ca72de 100644
--- a/clutter-gst/clutter-gst-plugin.c
+++ b/clutter-gst/clutter-gst-plugin.c
@@ -47,14 +47,12 @@ GST_DEBUG_CATEGORY (clutter_gst_auto_video_sink_debug);
* register the features
*/
static gboolean
-plugin_init (GstPlugin *plugin)
+plugin_init (GstPlugin * plugin)
{
gboolean ret;
GST_DEBUG_CATEGORY_INIT (clutter_gst_auto_video_sink_debug,
- "autocluttersink",
- 0,
- "clutter auto video sink");
+ "autocluttersink", 0, "clutter auto video sink");
#if defined (CLUTTER_WINDOWING_X11)
/* Required by some GStreamer element like VA */
@@ -66,29 +64,17 @@ plugin_init (GstPlugin *plugin)
return FALSE;
ret = gst_element_register (plugin,
- "cluttersink",
- GST_RANK_MARGINAL,
- CLUTTER_GST_TYPE_VIDEO_SINK);
+ "cluttersink", GST_RANK_MARGINAL, CLUTTER_GST_TYPE_VIDEO_SINK);
if (!ret)
return FALSE;
ret = gst_element_register (plugin,
- "autocluttersink",
- GST_RANK_NONE,
- CLUTTER_GST_TYPE_AUTO_VIDEO_SINK);
+ "autocluttersink", GST_RANK_NONE, CLUTTER_GST_TYPE_AUTO_VIDEO_SINK);
if (!ret)
return FALSE;
return TRUE;
}
-GST_PLUGIN_DEFINE (GST_VERSION_MAJOR,
- GST_VERSION_MINOR,
- clutter,
- "Elements to render to Clutter textures",
- plugin_init,
- VERSION,
- "LGPL", /* license */
- PACKAGE,
- "http://www.clutter-project.org");
-
+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, GST_VERSION_MINOR, clutter, "Elements to render to Clutter textures", plugin_init, VERSION, "LGPL", /* license */
+ PACKAGE, "http://www.clutter-project.org");
diff --git a/clutter-gst/clutter-gst-util.c b/clutter-gst/clutter-gst-util.c
index 4391372..4c73c50 100644
--- a/clutter-gst/clutter-gst-util.c
+++ b/clutter-gst/clutter-gst-util.c
@@ -124,8 +124,7 @@ static gboolean clutter_gst_is_initialized = FALSE;
* Return value: A #ClutterInitError.
*/
ClutterInitError
-clutter_gst_init (int *argc,
- char ***argv)
+clutter_gst_init (int *argc, char ***argv)
{
ClutterInitError retval;
@@ -142,17 +141,10 @@ clutter_gst_init (int *argc,
/* initialize debugging infrastructure */
#ifdef CLUTTER_GST_ENABLE_DEBUG
- _clutter_gst_debug_init();
+ _clutter_gst_debug_init ();
#endif
- gst_plugin_register_static (GST_VERSION_MAJOR,
- GST_VERSION_MINOR,
- "cluttersink",
- "Element to render to Clutter textures",
- _internal_plugin_init,
- VERSION,
- "LGPL", /* license */
- "clutter-gst", PACKAGE,
- "http://www.clutter-project.org");
+ gst_plugin_register_static (GST_VERSION_MAJOR, GST_VERSION_MINOR, "cluttersink", "Element to render to Clutter textures", _internal_plugin_init, VERSION, "LGPL", /* license */
+ "clutter-gst", PACKAGE, "http://www.clutter-project.org");
clutter_gst_is_initialized = TRUE;
@@ -188,12 +180,10 @@ clutter_gst_init (int *argc,
* Since: 1.0
*/
ClutterInitError
-clutter_gst_init_with_args (int *argc,
- char ***argv,
- const char *parameter_string,
- GOptionEntry *entries,
- const char *translation_domain,
- GError **error)
+clutter_gst_init_with_args (int *argc,
+ char ***argv,
+ const char *parameter_string,
+ GOptionEntry * entries, const char *translation_domain, GError ** error)
{
GOptionContext *context;
gboolean res;
@@ -218,21 +208,14 @@ clutter_gst_init_with_args (int *argc,
g_option_context_free (context);
if (!res)
- return CLUTTER_INIT_ERROR_INTERNAL;
+ return CLUTTER_INIT_ERROR_INTERNAL;
/* initialize debugging infrastructure */
#ifdef CLUTTER_GST_ENABLE_DEBUG
_clutter_gst_debug_init ();
#endif
- gst_plugin_register_static (GST_VERSION_MAJOR,
- GST_VERSION_MINOR,
- "cluttersink",
- "Element to render to Clutter textures",
- _internal_plugin_init,
- VERSION,
- "LGPL", /* license */
- "clutter-gst", PACKAGE,
- "http://www.clutter-project.org");
+ gst_plugin_register_static (GST_VERSION_MAJOR, GST_VERSION_MINOR, "cluttersink", "Element to render to Clutter textures", _internal_plugin_init, VERSION, "LGPL", /* license */
+ "clutter-gst", PACKAGE, "http://www.clutter-project.org");
clutter_gst_is_initialized = TRUE;
@@ -258,9 +241,7 @@ clutter_gst_init_with_args (int *argc,
* "texture" GObject property instead.
*/
GstElement *
-clutter_gst_video_sink_new (ClutterTexture *texture)
+clutter_gst_video_sink_new (ClutterTexture * texture)
{
- return g_object_new (CLUTTER_GST_TYPE_VIDEO_SINK,
- "texture", texture,
- NULL);
+ return g_object_new (CLUTTER_GST_TYPE_VIDEO_SINK, "texture", texture, NULL);
}
diff --git a/clutter-gst/clutter-gst-video-sink.c b/clutter-gst/clutter-gst-video-sink.c
index 6e7590b..9bf6367 100644
--- a/clutter-gst/clutter-gst-video-sink.c
+++ b/clutter-gst/clutter-gst-video-sink.c
@@ -77,40 +77,35 @@
#define CLUTTER_GST_TEXTURE_FLAGS COGL_TEXTURE_NO_SLICING
#endif
-static gchar *ayuv_to_rgba_shader = \
- FRAGMENT_SHADER_VARS
- "uniform sampler2D tex;"
- "void main () {"
- " vec4 color = texture2D (tex, vec2(" TEX_COORD "));"
- " float y = 1.1640625 * (color.g - 0.0625);"
- " float u = color.b - 0.5;"
- " float v = color.a - 0.5;"
- " color.a = color.r;"
- " color.r = y + 1.59765625 * v;"
- " color.g = y - 0.390625 * u - 0.8125 * v;"
- " color.b = y + 2.015625 * u;"
- " gl_FragColor = color;"
- FRAGMENT_SHADER_END
- "}";
-
-static gchar *yv12_to_rgba_shader = \
- FRAGMENT_SHADER_VARS
- "uniform sampler2D ytex;"
- "uniform sampler2D utex;"
- "uniform sampler2D vtex;"
- "void main () {"
- " vec2 coord = vec2(" TEX_COORD ");"
- " float y = 1.1640625 * (texture2D (ytex, coord).g - 0.0625);"
- " float u = texture2D (utex, coord).g - 0.5;"
- " float v = texture2D (vtex, coord).g - 0.5;"
- " vec4 color;"
- " color.r = y + 1.59765625 * v;"
- " color.g = y - 0.390625 * u - 0.8125 * v;"
- " color.b = y + 2.015625 * u;"
- " color.a = 1.0;"
- " gl_FragColor = color;"
- FRAGMENT_SHADER_END
- "}";
+static gchar *ayuv_to_rgba_shader =
+ FRAGMENT_SHADER_VARS
+ "uniform sampler2D tex;"
+ "void main () {"
+ " vec4 color = texture2D (tex, vec2(" TEX_COORD "));"
+ " float y = 1.1640625 * (color.g - 0.0625);"
+ " float u = color.b - 0.5;"
+ " float v = color.a - 0.5;"
+ " color.a = color.r;"
+ " color.r = y + 1.59765625 * v;"
+ " color.g = y - 0.390625 * u - 0.8125 * v;"
+ " color.b = y + 2.015625 * u;"
+ " gl_FragColor = color;" FRAGMENT_SHADER_END "}";
+
+static gchar *yv12_to_rgba_shader =
+ FRAGMENT_SHADER_VARS
+ "uniform sampler2D ytex;"
+ "uniform sampler2D utex;"
+ "uniform sampler2D vtex;"
+ "void main () {"
+ " vec2 coord = vec2(" TEX_COORD ");"
+ " float y = 1.1640625 * (texture2D (ytex, coord).g - 0.0625);"
+ " float u = texture2D (utex, coord).g - 0.5;"
+ " float v = texture2D (vtex, coord).g - 0.5;"
+ " vec4 color;"
+ " color.r = y + 1.59765625 * v;"
+ " color.g = y - 0.390625 * u - 0.8125 * v;"
+ " color.b = y + 2.015625 * u;"
+ " color.a = 1.0;" " gl_FragColor = color;" FRAGMENT_SHADER_END "}";
#define BASE_SINK_CAPS "{ AYUV," \
"YV12," \
@@ -123,11 +118,10 @@ static gchar *yv12_to_rgba_shader = \
#define SINK_CAPS GST_VIDEO_CAPS_MAKE(BASE_SINK_CAPS)
-static GstStaticPadTemplate sinktemplate_all
- = GST_STATIC_PAD_TEMPLATE ("sink",
- GST_PAD_SINK,
- GST_PAD_ALWAYS,
- GST_STATIC_CAPS (SINK_CAPS));
+static GstStaticPadTemplate sinktemplate_all = GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS (SINK_CAPS));
GST_DEBUG_CATEGORY_STATIC (clutter_gst_video_sink_debug);
#define GST_CAT_DEFAULT clutter_gst_video_sink_debug
@@ -156,9 +150,9 @@ typedef enum
*/
typedef enum _ClutterGstFeatures
{
- CLUTTER_GST_FP = 0x1, /* fragment programs (ARB fp1.0) */
- CLUTTER_GST_GLSL = 0x2, /* GLSL */
- CLUTTER_GST_MULTI_TEXTURE = 0x4, /* multi-texturing */
+ CLUTTER_GST_FP = 0x1, /* fragment programs (ARB fp1.0) */
+ CLUTTER_GST_GLSL = 0x2, /* GLSL */
+ CLUTTER_GST_MULTI_TEXTURE = 0x4, /* multi-texturing */
} ClutterGstFeatures;
/*
@@ -169,13 +163,13 @@ typedef enum _ClutterGstFeatures
typedef struct _ClutterGstSource
{
- GSource source;
+ GSource source;
ClutterGstVideoSink *sink;
- GMutex buffer_lock; /* mutex for the buffer */
- GstBuffer *buffer;
- gboolean has_new_caps;
- gboolean stage_lost;
+ GMutex buffer_lock; /* mutex for the buffer */
+ GstBuffer *buffer;
+ gboolean has_new_caps;
+ gboolean stage_lost;
} ClutterGstSource;
/*
@@ -183,19 +177,18 @@ typedef struct _ClutterGstSource
*/
typedef void (ClutterGstRendererPaint) (ClutterActor *, ClutterGstVideoSink *);
typedef void (ClutterGstRendererPostPaint) (ClutterActor *,
- ClutterGstVideoSink *);
+ ClutterGstVideoSink *);
typedef struct _ClutterGstRenderer
{
- const char *name; /* user friendly name */
- ClutterGstVideoFormat format; /* the format handled by this renderer */
- int flags; /* ClutterGstFeatures ORed flags */
- GstStaticCaps caps; /* caps handled by the renderer */
-
- void (*init) (ClutterGstVideoSink *sink);
- void (*deinit) (ClutterGstVideoSink *sink);
- void (*upload) (ClutterGstVideoSink *sink,
- GstBuffer *buffer);
+ const char *name; /* user friendly name */
+ ClutterGstVideoFormat format; /* the format handled by this renderer */
+ int flags; /* ClutterGstFeatures ORed flags */
+ GstStaticCaps caps; /* caps handled by the renderer */
+
+ void (*init) (ClutterGstVideoSink * sink);
+ void (*deinit) (ClutterGstVideoSink * sink);
+ void (*upload) (ClutterGstVideoSink * sink, GstBuffer * buffer);
} ClutterGstRenderer;
typedef enum _ClutterGstRendererState
@@ -207,41 +200,41 @@ typedef enum _ClutterGstRendererState
struct _ClutterGstVideoSinkPrivate
{
- ClutterTexture *texture;
- CoglMaterial *material_template;
+ ClutterTexture *texture;
+ CoglMaterial *material_template;
- ClutterGstVideoFormat format;
- gboolean bgr;
- int width;
- int height;
- int fps_n, fps_d;
- int par_n, par_d;
+ ClutterGstVideoFormat format;
+ gboolean bgr;
+ int width;
+ int height;
+ int fps_n, fps_d;
+ int par_n, par_d;
- GMainContext *clutter_main_context;
- ClutterGstSource *source;
- int priority;
+ GMainContext *clutter_main_context;
+ ClutterGstSource *source;
+ int priority;
- GSList *renderers;
- GstCaps *caps;
- ClutterGstRenderer *renderer;
+ GSList *renderers;
+ GstCaps *caps;
+ ClutterGstRenderer *renderer;
- GArray *signal_handler_ids;
+ GArray *signal_handler_ids;
#ifdef HAVE_HW_DECODER_SUPPORT
- GstSurfaceConverter *converter;
+ GstSurfaceConverter *converter;
#endif
};
static void
-clutter_gst_navigation_interface_init (GstNavigationInterface *iface);
+clutter_gst_navigation_interface_init (GstNavigationInterface * iface);
#define clutter_gst_video_sink_parent_class parent_class
-G_DEFINE_TYPE_WITH_CODE (ClutterGstVideoSink, clutter_gst_video_sink, GST_TYPE_BASE_SINK,
- G_IMPLEMENT_INTERFACE (GST_TYPE_NAVIGATION,
- clutter_gst_navigation_interface_init));
+G_DEFINE_TYPE_WITH_CODE (ClutterGstVideoSink, clutter_gst_video_sink,
+ GST_TYPE_BASE_SINK, G_IMPLEMENT_INTERFACE (GST_TYPE_NAVIGATION,
+ clutter_gst_navigation_interface_init));
-static void clutter_gst_video_sink_set_texture (ClutterGstVideoSink *sink,
- ClutterTexture *texture);
+static void clutter_gst_video_sink_set_texture (ClutterGstVideoSink * sink,
+ ClutterTexture * texture);
/*
* ClutterGstSource implementation
@@ -250,7 +243,7 @@ static void clutter_gst_video_sink_set_texture (ClutterGstVideoSink *sink,
static GSourceFuncs gst_source_funcs;
static ClutterGstSource *
-clutter_gst_source_new (ClutterGstVideoSink *sink)
+clutter_gst_source_new (ClutterGstVideoSink * sink)
{
ClutterGstVideoSinkPrivate *priv = sink->priv;
GSource *source;
@@ -270,7 +263,7 @@ clutter_gst_source_new (ClutterGstVideoSink *sink)
}
static void
-clutter_gst_source_finalize (GSource *source)
+clutter_gst_source_finalize (GSource * source)
{
ClutterGstSource *gst_source = (ClutterGstSource *) source;
@@ -283,8 +276,7 @@ clutter_gst_source_finalize (GSource *source)
}
static gboolean
-clutter_gst_source_prepare (GSource *source,
- gint *timeout)
+clutter_gst_source_prepare (GSource * source, gint * timeout)
{
ClutterGstSource *gst_source = (ClutterGstSource *) source;
@@ -294,7 +286,7 @@ clutter_gst_source_prepare (GSource *source,
}
static gboolean
-clutter_gst_source_check (GSource *source)
+clutter_gst_source_check (GSource * source)
{
ClutterGstSource *gst_source = (ClutterGstSource *) source;
@@ -302,63 +294,59 @@ clutter_gst_source_check (GSource *source)
}
static ClutterGstRenderer *
-clutter_gst_find_renderer_by_format (ClutterGstVideoSink *sink,
- ClutterGstVideoFormat format)
+clutter_gst_find_renderer_by_format (ClutterGstVideoSink * sink,
+ ClutterGstVideoFormat format)
{
ClutterGstVideoSinkPrivate *priv = sink->priv;
ClutterGstRenderer *renderer = NULL;
GSList *element;
- for (element = priv->renderers; element; element = g_slist_next(element))
- {
- ClutterGstRenderer *candidate = (ClutterGstRenderer *)element->data;
+ for (element = priv->renderers; element; element = g_slist_next (element)) {
+ ClutterGstRenderer *candidate = (ClutterGstRenderer *) element->data;
- if (candidate->format == format)
- {
- renderer = candidate;
- break;
- }
+ if (candidate->format == format) {
+ renderer = candidate;
+ break;
}
+ }
return renderer;
}
static void
-ensure_texture_pixel_aspect_ratio (ClutterGstVideoSink *sink)
+ensure_texture_pixel_aspect_ratio (ClutterGstVideoSink * sink)
{
ClutterGstVideoSinkPrivate *priv = sink->priv;
GParamSpec *pspec;
- GValue par = {0, };
+ GValue par = { 0, };
if (priv->texture == NULL)
return;
pspec = g_object_class_find_property (G_OBJECT_GET_CLASS (priv->texture),
- "pixel-aspect-ratio");
- if (pspec)
- {
- g_value_init (&par, GST_TYPE_FRACTION);
- gst_value_set_fraction (&par, priv->par_n, priv->par_d);
- g_object_set_property (G_OBJECT(priv->texture),
- "pixel-aspect-ratio", &par);
- g_value_unset (&par);
- }
+ "pixel-aspect-ratio");
+ if (pspec) {
+ g_value_init (&par, GST_TYPE_FRACTION);
+ gst_value_set_fraction (&par, priv->par_n, priv->par_d);
+ g_object_set_property (G_OBJECT (priv->texture),
+ "pixel-aspect-ratio", &par);
+ g_value_unset (&par);
+ }
}
static gboolean
-clutter_gst_parse_caps (GstCaps *caps,
- ClutterGstVideoSink *sink,
- gboolean save)
+clutter_gst_parse_caps (GstCaps * caps,
+ ClutterGstVideoSink * sink, gboolean save)
{
ClutterGstVideoSinkPrivate *priv = sink->priv;
- GstCaps *intersection;
- GstVideoInfo vinfo;
- gint fps_n, fps_d;
- gint par_n, par_d;
- gint width, height;
- ClutterGstVideoFormat format;
- gboolean bgr;
- ClutterGstRenderer *renderer;
+ GstCaps *intersection;
+ GstVideoInfo vinfo;
+ gint fps_n, fps_d;
+ gint par_n, par_d;
+ gint width, height;
+ ClutterGstVideoFormat format;
+ gboolean bgr;
+ ClutterGstRenderer *renderer;
intersection = gst_caps_intersect (priv->caps, caps);
if (gst_caps_is_empty (intersection))
@@ -369,84 +357,82 @@ clutter_gst_parse_caps (GstCaps *caps,
if (!gst_video_info_from_caps (&vinfo, caps))
goto unknown_format;
- width = vinfo.width;
+ width = vinfo.width;
height = vinfo.height;
/* We dont yet use fps or pixel aspect into but handy to have */
- fps_n = vinfo.fps_n;
- fps_d = vinfo.fps_d;
+ fps_n = vinfo.fps_n;
+ fps_d = vinfo.fps_d;
par_n = vinfo.par_n;
par_d = vinfo.par_d;
switch (vinfo.finfo->format) {
- case GST_VIDEO_FORMAT_YV12:
- format = CLUTTER_GST_YV12;
- break;
- case GST_VIDEO_FORMAT_I420:
- format = CLUTTER_GST_I420;
- break;
- case GST_VIDEO_FORMAT_AYUV:
- format = CLUTTER_GST_AYUV;
- bgr = FALSE;
- break;
- case GST_VIDEO_FORMAT_RGB:
- format = CLUTTER_GST_RGB24;
- bgr = FALSE;
- break;
- case GST_VIDEO_FORMAT_BGR:
- format = CLUTTER_GST_RGB24;
- bgr = TRUE;
- break;
- case GST_VIDEO_FORMAT_RGBA:
- format = CLUTTER_GST_RGB32;
- bgr = FALSE;
- break;
- case GST_VIDEO_FORMAT_BGRA:
- format = CLUTTER_GST_RGB32;
- bgr = TRUE;
- break;
- default:
- break;
+ case GST_VIDEO_FORMAT_YV12:
+ format = CLUTTER_GST_YV12;
+ break;
+ case GST_VIDEO_FORMAT_I420:
+ format = CLUTTER_GST_I420;
+ break;
+ case GST_VIDEO_FORMAT_AYUV:
+ format = CLUTTER_GST_AYUV;
+ bgr = FALSE;
+ break;
+ case GST_VIDEO_FORMAT_RGB:
+ format = CLUTTER_GST_RGB24;
+ bgr = FALSE;
+ break;
+ case GST_VIDEO_FORMAT_BGR:
+ format = CLUTTER_GST_RGB24;
+ bgr = TRUE;
+ break;
+ case GST_VIDEO_FORMAT_RGBA:
+ format = CLUTTER_GST_RGB32;
+ bgr = FALSE;
+ break;
+ case GST_VIDEO_FORMAT_BGRA:
+ format = CLUTTER_GST_RGB32;
+ bgr = TRUE;
+ break;
+ default:
+ break;
}
/* find a renderer that can display our format */
renderer = clutter_gst_find_renderer_by_format (sink, format);
- if (G_UNLIKELY (renderer == NULL))
- {
- GST_ERROR_OBJECT (sink, "could not find a suitable renderer");
- return FALSE;
- }
+ if (G_UNLIKELY (renderer == NULL)) {
+ GST_ERROR_OBJECT (sink, "could not find a suitable renderer");
+ return FALSE;
+ }
GST_INFO_OBJECT (sink, "using the %s renderer", renderer->name);
- if (save)
- {
- priv->width = width;
- priv->height = height;
+ if (save) {
+ priv->width = width;
+ priv->height = height;
- /* We dont yet use fps or pixel aspect into but handy to have */
- priv->fps_n = fps_n;
- priv->fps_d = fps_d;
+ /* We dont yet use fps or pixel aspect into but handy to have */
+ priv->fps_n = fps_n;
+ priv->fps_d = fps_d;
- priv->par_n = par_n;
- priv->par_d = par_d;
+ priv->par_n = par_n;
+ priv->par_d = par_d;
- /* If we happen to use a ClutterGstVideoTexture, now is to good time
- * to instruct it about the pixel aspect ratio so we can have a
- * correct natural width/height */
- ensure_texture_pixel_aspect_ratio (sink);
+ /* If we happen to use a ClutterGstVideoTexture, now is to good time
+ * to instruct it about the pixel aspect ratio so we can have a
+ * correct natural width/height */
+ ensure_texture_pixel_aspect_ratio (sink);
- priv->format = format;
- priv->bgr = bgr;
+ priv->format = format;
+ priv->bgr = bgr;
- priv->renderer = renderer;
- GST_INFO_OBJECT (sink, "using the %s renderer", priv->renderer->name);
- }
+ priv->renderer = renderer;
+ GST_INFO_OBJECT (sink, "using the %s renderer", priv->renderer->name);
+ }
return TRUE;
- unknown_format:
+unknown_format:
{
GST_WARNING_OBJECT (sink, "Could not figure format of input caps");
return FALSE;
@@ -454,9 +440,8 @@ clutter_gst_parse_caps (GstCaps *caps,
}
static gboolean
-on_stage_destroyed (ClutterStage *stage,
- ClutterEvent *event,
- gpointer user_data)
+on_stage_destroyed (ClutterStage * stage,
+ ClutterEvent * event, gpointer user_data)
{
ClutterGstSource *gst_source = user_data;
ClutterGstVideoSinkPrivate *priv = gst_source->sink->priv;
@@ -480,10 +465,8 @@ on_stage_destroyed (ClutterStage *stage,
}
static void
-on_stage_allocation_changed (ClutterStage *stage,
- ClutterActorBox *box,
- ClutterAllocationFlags flags,
- gpointer user_data)
+on_stage_allocation_changed (ClutterStage * stage,
+ ClutterActorBox * box, ClutterAllocationFlags flags, gpointer user_data)
{
ClutterGstSource *gst_source = user_data;
ClutterGstVideoSinkPrivate *priv = gst_source->sink->priv;
@@ -500,9 +483,8 @@ on_stage_allocation_changed (ClutterStage *stage,
}
static gboolean
-clutter_gst_source_dispatch (GSource *source,
- GSourceFunc callback,
- gpointer user_data)
+clutter_gst_source_dispatch (GSource * source,
+ GSourceFunc callback, gpointer user_data)
{
ClutterGstSource *gst_source = (ClutterGstSource *) source;
ClutterGstVideoSinkPrivate *priv = gst_source->sink->priv;
@@ -510,60 +492,56 @@ clutter_gst_source_dispatch (GSource *source,
g_mutex_lock (&gst_source->buffer_lock);
- if (G_UNLIKELY (gst_source->has_new_caps))
- {
- GstCaps *caps = gst_pad_get_current_caps(
- GST_BASE_SINK_PAD((GST_BASE_SINK(gst_source->sink))));
+ if (G_UNLIKELY (gst_source->has_new_caps)) {
+ GstCaps *caps =
+ gst_pad_get_current_caps (GST_BASE_SINK_PAD ((GST_BASE_SINK
+ (gst_source->sink))));
- if (priv->renderer)
- priv->renderer->deinit (gst_source->sink);
+ if (priv->renderer)
+ priv->renderer->deinit (gst_source->sink);
+ clutter_gst_parse_caps (caps, gst_source->sink, TRUE);
+ gst_source->has_new_caps = FALSE;
+
+ if (!priv->texture) {
+ ClutterActor *stage = clutter_stage_get_default ();
+ ClutterActor *actor = g_object_new (CLUTTER_TYPE_TEXTURE,
+ "disable-slicing", TRUE,
+ NULL);
+
+ clutter_gst_video_sink_set_texture (gst_source->sink,
+ CLUTTER_TEXTURE (actor));
+ clutter_stage_set_user_resizable (CLUTTER_STAGE (stage), TRUE);
+ clutter_container_add_actor (CLUTTER_CONTAINER (stage), actor);
+ clutter_stage_set_no_clear_hint (CLUTTER_STAGE (stage), TRUE);
+
+ g_signal_connect (stage, "delete-event",
+ G_CALLBACK (on_stage_destroyed), gst_source);
+ g_signal_connect (stage, "allocation-changed",
+ G_CALLBACK (on_stage_allocation_changed), gst_source);
+
+ clutter_gst_parse_caps (caps, gst_source->sink, TRUE);
+ clutter_actor_set_size (stage, priv->width, priv->height);
+ clutter_actor_show (stage);
+ } else {
clutter_gst_parse_caps (caps, gst_source->sink, TRUE);
- gst_source->has_new_caps = FALSE;
-
- if (!priv->texture)
- {
- ClutterActor *stage = clutter_stage_get_default ();
- ClutterActor *actor = g_object_new (CLUTTER_TYPE_TEXTURE,
- "disable-slicing", TRUE,
- NULL);
-
- clutter_gst_video_sink_set_texture (gst_source->sink,
- CLUTTER_TEXTURE (actor));
- clutter_stage_set_user_resizable (CLUTTER_STAGE (stage), TRUE);
- clutter_container_add_actor (CLUTTER_CONTAINER (stage), actor);
- clutter_stage_set_no_clear_hint (CLUTTER_STAGE (stage), TRUE);
-
- g_signal_connect (stage, "delete-event",
- G_CALLBACK (on_stage_destroyed), gst_source);
- g_signal_connect (stage, "allocation-changed",
- G_CALLBACK (on_stage_allocation_changed), gst_source);
-
- clutter_gst_parse_caps (caps, gst_source->sink, TRUE);
- clutter_actor_set_size (stage, priv->width, priv->height);
- clutter_actor_show (stage);
- }
- else
- {
- clutter_gst_parse_caps (caps, gst_source->sink, TRUE);
- }
-
- priv->renderer->init (gst_source->sink);
- gst_source->has_new_caps = FALSE;
-
- ensure_texture_pixel_aspect_ratio (gst_source->sink);
}
+ priv->renderer->init (gst_source->sink);
+ gst_source->has_new_caps = FALSE;
+
+ ensure_texture_pixel_aspect_ratio (gst_source->sink);
+ }
+
buffer = gst_source->buffer;
gst_source->buffer = NULL;
g_mutex_unlock (&gst_source->buffer_lock);
- if (buffer)
- {
- priv->renderer->upload (gst_source->sink, buffer);
- gst_buffer_unref (buffer);
- }
+ if (buffer) {
+ priv->renderer->upload (gst_source->sink, buffer);
+ gst_buffer_unref (buffer);
+ }
return TRUE;
}
@@ -576,8 +554,7 @@ static GSourceFuncs gst_source_funcs = {
};
static void
-clutter_gst_video_sink_set_priority (ClutterGstVideoSink *sink,
- int priority)
+clutter_gst_video_sink_set_priority (ClutterGstVideoSink * sink, int priority)
{
ClutterGstVideoSinkPrivate *priv = sink->priv;
@@ -593,15 +570,14 @@ clutter_gst_video_sink_set_priority (ClutterGstVideoSink *sink,
#ifdef CLUTTER_COGL_HAS_GL
static void
-_string_array_to_char_array (char *dst,
- const char *src[])
+_string_array_to_char_array (char *dst, const char *src[])
{
int i, n;
for (i = 0; src[i]; i++) {
- n = strlen (src[i]);
- memcpy (dst, src[i], n);
- dst += n;
+ n = strlen (src[i]);
+ memcpy (dst, src[i], n);
+ dst += n;
}
*dst = '\0';
}
@@ -660,10 +636,8 @@ _create_cogl_program (const char *source)
}
static void
-_create_template_material (ClutterGstVideoSink *sink,
- const char *source,
- gboolean set_uniforms,
- int n_layers)
+_create_template_material (ClutterGstVideoSink * sink,
+ const char *source, gboolean set_uniforms, int n_layers)
{
ClutterGstVideoSinkPrivate *priv = sink->priv;
CoglMaterial *template;
@@ -674,36 +648,32 @@ _create_template_material (ClutterGstVideoSink *sink,
template = cogl_material_new ();
- if (source)
- {
- CoglHandle program = _create_cogl_program (source);
-
- if (set_uniforms)
- {
- unsigned int location;
-
- cogl_program_use (program);
-
- location = cogl_program_get_uniform_location (program, "ytex");
- cogl_program_set_uniform_1i (program, location, 0);
- if (n_layers > 1)
- {
- location = cogl_program_get_uniform_location (program, "utex");
- cogl_program_set_uniform_1i (program, location, 1);
- }
- if (n_layers > 2)
- {
- location = cogl_program_get_uniform_location (program, "vtex");
- cogl_program_set_uniform_1i (program, location, 2);
- }
-
- cogl_program_use (COGL_INVALID_HANDLE);
- }
-
- cogl_material_set_user_program (template, program);
- cogl_handle_unref (program);
+ if (source) {
+ CoglHandle program = _create_cogl_program (source);
+
+ if (set_uniforms) {
+ unsigned int location;
+
+ cogl_program_use (program);
+
+ location = cogl_program_get_uniform_location (program, "ytex");
+ cogl_program_set_uniform_1i (program, location, 0);
+ if (n_layers > 1) {
+ location = cogl_program_get_uniform_location (program, "utex");
+ cogl_program_set_uniform_1i (program, location, 1);
+ }
+ if (n_layers > 2) {
+ location = cogl_program_get_uniform_location (program, "vtex");
+ cogl_program_set_uniform_1i (program, location, 2);
+ }
+
+ cogl_program_use (COGL_INVALID_HANDLE);
}
+ cogl_material_set_user_program (template, program);
+ cogl_handle_unref (program);
+ }
+
for (i = 0; i < n_layers; i++)
cogl_material_set_layer (template, i, COGL_INVALID_HANDLE);
@@ -711,41 +681,36 @@ _create_template_material (ClutterGstVideoSink *sink,
}
static void
-_create_paint_material (ClutterGstVideoSink *sink,
- CoglHandle tex0,
- CoglHandle tex1,
- CoglHandle tex2)
+_create_paint_material (ClutterGstVideoSink * sink,
+ CoglHandle tex0, CoglHandle tex1, CoglHandle tex2)
{
- ClutterGstVideoSinkPrivate *priv= sink->priv;
+ ClutterGstVideoSinkPrivate *priv = sink->priv;
CoglMaterial *material = cogl_material_copy (priv->material_template);
- if (tex0 != COGL_INVALID_HANDLE)
- {
- cogl_material_set_layer (material, 0, tex0);
- cogl_handle_unref (tex0);
- }
- if (tex1 != COGL_INVALID_HANDLE)
- {
- cogl_material_set_layer (material, 1, tex1);
- cogl_handle_unref (tex1);
- }
- if (tex2 != COGL_INVALID_HANDLE)
- {
- cogl_material_set_layer (material, 2, tex2);
- cogl_handle_unref (tex2);
- }
+ if (tex0 != COGL_INVALID_HANDLE) {
+ cogl_material_set_layer (material, 0, tex0);
+ cogl_handle_unref (tex0);
+ }
+ if (tex1 != COGL_INVALID_HANDLE) {
+ cogl_material_set_layer (material, 1, tex1);
+ cogl_handle_unref (tex1);
+ }
+ if (tex2 != COGL_INVALID_HANDLE) {
+ cogl_material_set_layer (material, 2, tex2);
+ cogl_handle_unref (tex2);
+ }
clutter_texture_set_cogl_material (priv->texture, material);
cogl_object_unref (material);
}
static void
-clutter_gst_dummy_deinit (ClutterGstVideoSink *sink)
+clutter_gst_dummy_deinit (ClutterGstVideoSink * sink)
{
}
static void
-clutter_gst_rgb_init (ClutterGstVideoSink *sink)
+clutter_gst_rgb_init (ClutterGstVideoSink * sink)
{
_create_template_material (sink, NULL, FALSE, 1);
}
@@ -757,8 +722,7 @@ clutter_gst_rgb_init (ClutterGstVideoSink *sink)
*/
static void
-clutter_gst_rgb24_upload (ClutterGstVideoSink *sink,
- GstBuffer *buffer)
+clutter_gst_rgb24_upload (ClutterGstVideoSink * sink, GstBuffer * buffer)
{
ClutterGstVideoSinkPrivate *priv = sink->priv;
CoglPixelFormat format;
@@ -773,27 +737,20 @@ clutter_gst_rgb24_upload (ClutterGstVideoSink *sink,
gst_buffer_map (buffer, &info, GST_MAP_READ);
tex = cogl_texture_new_from_data (priv->width,
- priv->height,
- CLUTTER_GST_TEXTURE_FLAGS,
- format,
- format,
- GST_ROUND_UP_4 (3 * priv->width),
- info.data);
+ priv->height,
+ CLUTTER_GST_TEXTURE_FLAGS,
+ format, format, GST_ROUND_UP_4 (3 * priv->width), info.data);
gst_buffer_unmap (buffer, &info);
- _create_paint_material (sink,
- tex,
- COGL_INVALID_HANDLE,
- COGL_INVALID_HANDLE);
+ _create_paint_material (sink, tex, COGL_INVALID_HANDLE, COGL_INVALID_HANDLE);
}
-static ClutterGstRenderer rgb24_renderer =
-{
+static ClutterGstRenderer rgb24_renderer = {
"RGB 24",
CLUTTER_GST_RGB24,
0,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE("{ RGB, BGR }")),
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("{ RGB, BGR }")),
clutter_gst_rgb_init,
clutter_gst_dummy_deinit,
clutter_gst_rgb24_upload,
@@ -804,8 +761,7 @@ static ClutterGstRenderer rgb24_renderer =
*/
static void
-clutter_gst_rgb32_upload (ClutterGstVideoSink *sink,
- GstBuffer *buffer)
+clutter_gst_rgb32_upload (ClutterGstVideoSink * sink, GstBuffer * buffer)
{
ClutterGstVideoSinkPrivate *priv = sink->priv;
CoglPixelFormat format;
@@ -820,27 +776,20 @@ clutter_gst_rgb32_upload (ClutterGstVideoSink *sink,
format = COGL_PIXEL_FORMAT_RGBA_8888;
tex = cogl_texture_new_from_data (priv->width,
- priv->height,
- CLUTTER_GST_TEXTURE_FLAGS,
- format,
- format,
- GST_ROUND_UP_4 (4 * priv->width),
- info.data);
+ priv->height,
+ CLUTTER_GST_TEXTURE_FLAGS,
+ format, format, GST_ROUND_UP_4 (4 * priv->width), info.data);
gst_buffer_unmap (buffer, &info);
- _create_paint_material (sink,
- tex,
- COGL_INVALID_HANDLE,
- COGL_INVALID_HANDLE);
+ _create_paint_material (sink, tex, COGL_INVALID_HANDLE, COGL_INVALID_HANDLE);
}
-static ClutterGstRenderer rgb32_renderer =
-{
+static ClutterGstRenderer rgb32_renderer = {
"RGB 32",
CLUTTER_GST_RGB32,
0,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE("{ RGBA, BGRA }")),
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("{ RGBA, BGRA }")),
clutter_gst_rgb_init,
clutter_gst_dummy_deinit,
clutter_gst_rgb32_upload,
@@ -853,11 +802,10 @@ static ClutterGstRenderer rgb32_renderer =
*/
static void
-clutter_gst_yv12_upload (ClutterGstVideoSink *sink,
- GstBuffer *buffer)
+clutter_gst_yv12_upload (ClutterGstVideoSink * sink, GstBuffer * buffer)
{
ClutterGstVideoSinkPrivate *priv = sink->priv;
- gint y_row_stride = GST_ROUND_UP_4 (priv->width);
+ gint y_row_stride = GST_ROUND_UP_4 (priv->width);
gint uv_row_stride = GST_ROUND_UP_4 (priv->width / 2);
CoglHandle y_tex, u_tex, v_tex;
GstMapInfo info;
@@ -865,31 +813,24 @@ clutter_gst_yv12_upload (ClutterGstVideoSink *sink,
gst_buffer_map (buffer, &info, GST_MAP_READ);
y_tex = cogl_texture_new_from_data (priv->width,
- priv->height,
- CLUTTER_GST_TEXTURE_FLAGS,
- COGL_PIXEL_FORMAT_G_8,
- COGL_PIXEL_FORMAT_G_8,
- y_row_stride,
- info.data);
+ priv->height,
+ CLUTTER_GST_TEXTURE_FLAGS,
+ COGL_PIXEL_FORMAT_G_8, COGL_PIXEL_FORMAT_G_8, y_row_stride, info.data);
u_tex = cogl_texture_new_from_data (priv->width / 2,
- priv->height / 2,
- CLUTTER_GST_TEXTURE_FLAGS,
- COGL_PIXEL_FORMAT_G_8,
- COGL_PIXEL_FORMAT_G_8,
- uv_row_stride,
- info.data +
- (y_row_stride * priv->height));
+ priv->height / 2,
+ CLUTTER_GST_TEXTURE_FLAGS,
+ COGL_PIXEL_FORMAT_G_8,
+ COGL_PIXEL_FORMAT_G_8,
+ uv_row_stride, info.data + (y_row_stride * priv->height));
v_tex = cogl_texture_new_from_data (priv->width / 2,
- priv->height / 2,
- CLUTTER_GST_TEXTURE_FLAGS,
- COGL_PIXEL_FORMAT_G_8,
- COGL_PIXEL_FORMAT_G_8,
- uv_row_stride,
- info.data
- + (y_row_stride * priv->height)
- + (uv_row_stride * priv->height / 2));
+ priv->height / 2,
+ CLUTTER_GST_TEXTURE_FLAGS,
+ COGL_PIXEL_FORMAT_G_8,
+ COGL_PIXEL_FORMAT_G_8,
+ uv_row_stride, info.data + (y_row_stride * priv->height)
+ + (uv_row_stride * priv->height / 2));
gst_buffer_unmap (buffer, &info);
@@ -897,14 +838,13 @@ clutter_gst_yv12_upload (ClutterGstVideoSink *sink,
}
static void
-clutter_gst_yv12_glsl_init (ClutterGstVideoSink *sink)
+clutter_gst_yv12_glsl_init (ClutterGstVideoSink * sink)
{
_create_template_material (sink, yv12_to_rgba_shader, TRUE, 3);
}
-static ClutterGstRenderer yv12_glsl_renderer =
-{
+static ClutterGstRenderer yv12_glsl_renderer = {
"YV12 glsl",
CLUTTER_GST_YV12,
CLUTTER_GST_GLSL | CLUTTER_GST_MULTI_TEXTURE,
@@ -922,7 +862,7 @@ static ClutterGstRenderer yv12_glsl_renderer =
#ifdef CLUTTER_COGL_HAS_GL
static void
-clutter_gst_yv12_fp_init (ClutterGstVideoSink *sink)
+clutter_gst_yv12_fp_init (ClutterGstVideoSink * sink)
{
char *shader = g_malloc (YV12_FP_SZ + 1);
_string_array_to_char_array (shader, YV12_fp);
@@ -932,8 +872,7 @@ clutter_gst_yv12_fp_init (ClutterGstVideoSink *sink)
g_free (shader);
}
-static ClutterGstRenderer yv12_fp_renderer =
-{
+static ClutterGstRenderer yv12_fp_renderer = {
"YV12 fp",
CLUTTER_GST_YV12,
CLUTTER_GST_FP | CLUTTER_GST_MULTI_TEXTURE,
@@ -952,13 +891,12 @@ static ClutterGstRenderer yv12_fp_renderer =
*/
static void
-clutter_gst_i420_glsl_init (ClutterGstVideoSink *sink)
+clutter_gst_i420_glsl_init (ClutterGstVideoSink * sink)
{
_create_template_material (sink, yv12_to_rgba_shader, TRUE, 3);
}
-static ClutterGstRenderer i420_glsl_renderer =
-{
+static ClutterGstRenderer i420_glsl_renderer = {
"I420 glsl",
CLUTTER_GST_I420,
CLUTTER_GST_GLSL | CLUTTER_GST_MULTI_TEXTURE,
@@ -977,9 +915,9 @@ static ClutterGstRenderer i420_glsl_renderer =
#ifdef CLUTTER_COGL_HAS_GL
static void
-clutter_gst_i420_fp_init (ClutterGstVideoSink *sink)
+clutter_gst_i420_fp_init (ClutterGstVideoSink * sink)
{
- char *shader = g_malloc(I420_FP_SZ + 1);
+ char *shader = g_malloc (I420_FP_SZ + 1);
_string_array_to_char_array (shader, I420_fp);
_create_template_material (sink, shader, FALSE, 3);
@@ -987,8 +925,7 @@ clutter_gst_i420_fp_init (ClutterGstVideoSink *sink)
g_free (shader);
}
-static ClutterGstRenderer i420_fp_renderer =
-{
+static ClutterGstRenderer i420_fp_renderer = {
"I420 fp",
CLUTTER_GST_I420,
CLUTTER_GST_FP | CLUTTER_GST_MULTI_TEXTURE,
@@ -1008,14 +945,13 @@ static ClutterGstRenderer i420_fp_renderer =
*/
static void
-clutter_gst_ayuv_glsl_init(ClutterGstVideoSink *sink)
+clutter_gst_ayuv_glsl_init (ClutterGstVideoSink * sink)
{
_create_template_material (sink, ayuv_to_rgba_shader, TRUE, 1);
}
static void
-clutter_gst_ayuv_upload (ClutterGstVideoSink *sink,
- GstBuffer *buffer)
+clutter_gst_ayuv_upload (ClutterGstVideoSink * sink, GstBuffer * buffer)
{
ClutterGstVideoSinkPrivate *priv = sink->priv;
CoglHandle tex;
@@ -1024,24 +960,18 @@ clutter_gst_ayuv_upload (ClutterGstVideoSink *sink,
gst_buffer_map (buffer, &info, GST_MAP_READ);
tex =
- cogl_texture_new_from_data (priv->width,
- priv->height,
- CLUTTER_GST_TEXTURE_FLAGS,
- COGL_PIXEL_FORMAT_RGBA_8888,
- COGL_PIXEL_FORMAT_RGBA_8888,
- GST_ROUND_UP_4 (4 * priv->width),
- info.data);
+ cogl_texture_new_from_data (priv->width,
+ priv->height,
+ CLUTTER_GST_TEXTURE_FLAGS,
+ COGL_PIXEL_FORMAT_RGBA_8888,
+ COGL_PIXEL_FORMAT_RGBA_8888, GST_ROUND_UP_4 (4 * priv->width), info.data);
gst_buffer_unmap (buffer, &info);
- _create_paint_material (sink,
- tex,
- COGL_INVALID_HANDLE,
- COGL_INVALID_HANDLE);
+ _create_paint_material (sink, tex, COGL_INVALID_HANDLE, COGL_INVALID_HANDLE);
}
-static ClutterGstRenderer ayuv_glsl_renderer =
-{
+static ClutterGstRenderer ayuv_glsl_renderer = {
"AYUV glsl",
CLUTTER_GST_AYUV,
CLUTTER_GST_GLSL,
@@ -1057,7 +987,7 @@ static ClutterGstRenderer ayuv_glsl_renderer =
#ifdef HAVE_HW_DECODER_SUPPORT
static void
-clutter_gst_hw_init (ClutterGstVideoSink *sink)
+clutter_gst_hw_init (ClutterGstVideoSink * sink)
{
ClutterGstVideoSinkPrivate *priv = sink->priv;
CoglHandle tex;
@@ -1065,8 +995,7 @@ clutter_gst_hw_init (ClutterGstVideoSink *sink)
/* Default texture is 1x1, let's replace it with one big enough. */
tex = cogl_texture_new_with_size (priv->width, priv->height,
- CLUTTER_GST_TEXTURE_FLAGS,
- COGL_PIXEL_FORMAT_BGRA_8888);
+ CLUTTER_GST_TEXTURE_FLAGS, COGL_PIXEL_FORMAT_BGRA_8888);
material = cogl_material_new ();
cogl_material_set_layer (material, 0, tex);
@@ -1077,7 +1006,7 @@ clutter_gst_hw_init (ClutterGstVideoSink *sink)
}
static void
-clutter_gst_hw_deinit (ClutterGstVideoSink *sink)
+clutter_gst_hw_deinit (ClutterGstVideoSink * sink)
{
ClutterGstVideoSinkPrivate *priv = sink->priv;
@@ -1087,8 +1016,7 @@ clutter_gst_hw_deinit (ClutterGstVideoSink *sink)
}
static void
-clutter_gst_hw_upload (ClutterGstVideoSink *sink,
- GstBuffer *buffer)
+clutter_gst_hw_upload (ClutterGstVideoSink * sink, GstBuffer * buffer)
{
ClutterGstVideoSinkPrivate *priv = sink->priv;
GstSurfaceMeta *surface = gst_buffer_get_surface_meta (buffer);
@@ -1099,7 +1027,7 @@ clutter_gst_hw_upload (ClutterGstVideoSink *sink,
CoglHandle tex;
GLuint gl_texture;
GLenum gl_target;
- GValue value = {0};
+ GValue value = { 0 };
tex = clutter_texture_get_cogl_texture (priv->texture);
cogl_texture_get_gl_texture (tex, &gl_texture, &gl_target);
@@ -1108,7 +1036,8 @@ clutter_gst_hw_upload (ClutterGstVideoSink *sink,
g_value_init (&value, G_TYPE_UINT);
g_value_set_uint (&value, gl_texture);
- priv->converter = gst_surface_meta_create_converter (surface, "opengl", &value);
+ priv->converter =
+ gst_surface_meta_create_converter (surface, "opengl", &value);
g_return_if_fail (priv->converter);
}
@@ -1118,8 +1047,7 @@ clutter_gst_hw_upload (ClutterGstVideoSink *sink,
clutter_actor_queue_redraw (CLUTTER_ACTOR (priv->texture));
}
-static ClutterGstRenderer hw_renderer =
-{
+static ClutterGstRenderer hw_renderer = {
"HW surface",
CLUTTER_GST_SURFACE,
0,
@@ -1133,31 +1061,30 @@ static ClutterGstRenderer hw_renderer =
static GSList *
clutter_gst_build_renderers_list (void)
{
- GSList *list = NULL;
- gint nb_texture_units = 0;
- gint features = 0, i;
+ GSList *list = NULL;
+ gint nb_texture_units = 0;
+ gint features = 0, i;
/* The order of the list of renderers is important. They will be prepended
* to a GSList and we'll iterate over that list to choose the first matching
* renderer. Thus if you want to use the fp renderer over the glsl one, the
* fp renderer has to be put after the glsl one in this array */
- ClutterGstRenderer *renderers[] =
- {
- &rgb24_renderer,
- &rgb32_renderer,
- &yv12_glsl_renderer,
- &i420_glsl_renderer,
+ ClutterGstRenderer *renderers[] = {
+ &rgb24_renderer,
+ &rgb32_renderer,
+ &yv12_glsl_renderer,
+ &i420_glsl_renderer,
#ifdef CLUTTER_COGL_HAS_GL
- &yv12_fp_renderer,
- &i420_fp_renderer,
+ &yv12_fp_renderer,
+ &i420_fp_renderer,
#endif
- &ayuv_glsl_renderer,
+ &ayuv_glsl_renderer,
#ifdef HAVE_HW_DECODER_SUPPORT
- &hw_renderer,
+ &hw_renderer,
#endif
- NULL
- };
+ NULL
+ };
- nb_texture_units = get_n_fragment_texture_units();
+ nb_texture_units = get_n_fragment_texture_units ();
if (nb_texture_units >= 3)
features |= CLUTTER_GST_MULTI_TEXTURE;
@@ -1172,13 +1099,12 @@ clutter_gst_build_renderers_list (void)
GST_INFO ("GL features: 0x%08x", features);
- for (i = 0; renderers[i]; i++)
- {
- gint needed = renderers[i]->flags;
+ for (i = 0; renderers[i]; i++) {
+ gint needed = renderers[i]->flags;
- if ((needed & features) == needed)
- list = g_slist_prepend (list, renderers[i]);
- }
+ if ((needed & features) == needed)
+ list = g_slist_prepend (list, renderers[i]);
+ }
return list;
}
@@ -1186,17 +1112,17 @@ clutter_gst_build_renderers_list (void)
static void
append_cap (gpointer data, gpointer user_data)
{
- ClutterGstRenderer *renderer = (ClutterGstRenderer *)data;
- GstCaps *caps = (GstCaps *)user_data;
+ ClutterGstRenderer *renderer = (ClutterGstRenderer *) data;
+ GstCaps *caps = (GstCaps *) user_data;
GstCaps *writable_caps;
writable_caps =
- gst_caps_make_writable (gst_static_caps_get (&renderer->caps));
+ gst_caps_make_writable (gst_static_caps_get (&renderer->caps));
gst_caps_append (caps, writable_caps);
}
static GstCaps *
-clutter_gst_build_caps (GSList *renderers)
+clutter_gst_build_caps (GSList * renderers)
{
GstCaps *caps;
@@ -1209,76 +1135,70 @@ clutter_gst_build_caps (GSList *renderers)
static gboolean
-navigation_event (ClutterActor *actor,
- ClutterEvent *event,
- ClutterGstVideoSink *sink)
-{
- if (event->type == CLUTTER_MOTION)
- {
- ClutterMotionEvent *mevent = (ClutterMotionEvent *) event;
-
- GST_DEBUG ("Received mouse move event to %d,%d", mevent->x, mevent->y);
- gst_navigation_send_mouse_event (GST_NAVIGATION (sink),
- "mouse-move", 0, mevent->x, mevent->y);
- }
- else if (event->type == CLUTTER_BUTTON_PRESS ||
- event->type == CLUTTER_BUTTON_RELEASE)
- {
- ClutterButtonEvent *bevent = (ClutterButtonEvent *) event;
- const char *type;
-
- GST_DEBUG ("Received button %s event at %d,%d",
- (event->type == CLUTTER_BUTTON_PRESS) ? "press" : "release",
- bevent->x, bevent->y);
- type = (event->type == CLUTTER_BUTTON_PRESS) ? "mouse-button-press" : "mouse-button-release";
- gst_navigation_send_mouse_event (GST_NAVIGATION (sink),
- type, bevent->button, bevent->x, bevent->y);
+navigation_event (ClutterActor * actor,
+ ClutterEvent * event, ClutterGstVideoSink * sink)
+{
+ if (event->type == CLUTTER_MOTION) {
+ ClutterMotionEvent *mevent = (ClutterMotionEvent *) event;
+
+ GST_DEBUG ("Received mouse move event to %d,%d", mevent->x, mevent->y);
+ gst_navigation_send_mouse_event (GST_NAVIGATION (sink),
+ "mouse-move", 0, mevent->x, mevent->y);
+ } else if (event->type == CLUTTER_BUTTON_PRESS ||
+ event->type == CLUTTER_BUTTON_RELEASE) {
+ ClutterButtonEvent *bevent = (ClutterButtonEvent *) event;
+ const char *type;
+
+ GST_DEBUG ("Received button %s event at %d,%d",
+ (event->type == CLUTTER_BUTTON_PRESS) ? "press" : "release",
+ bevent->x, bevent->y);
+ type =
+ (event->type ==
+ CLUTTER_BUTTON_PRESS) ? "mouse-button-press" : "mouse-button-release";
+ gst_navigation_send_mouse_event (GST_NAVIGATION (sink), type,
+ bevent->button, bevent->x, bevent->y);
+ } else if (event->type == CLUTTER_KEY_PRESS) {
+ ClutterKeyEvent *kevent = (ClutterKeyEvent *) event;
+ GstNavigationCommand command;
+
+ switch (kevent->keyval) {
+ case CLUTTER_KEY_Up:
+ command = GST_NAVIGATION_COMMAND_UP;
+ break;
+ case CLUTTER_KEY_Down:
+ command = GST_NAVIGATION_COMMAND_DOWN;
+ break;
+ case CLUTTER_KEY_Left:
+ command = GST_NAVIGATION_COMMAND_LEFT;
+ break;
+ case CLUTTER_KEY_Right:
+ command = GST_NAVIGATION_COMMAND_RIGHT;
+ break;
+ case CLUTTER_KEY_Return:
+ command = GST_NAVIGATION_COMMAND_ACTIVATE;
+ break;
+ default:
+ command = GST_NAVIGATION_COMMAND_INVALID;
}
- else if (event->type == CLUTTER_KEY_PRESS)
- {
- ClutterKeyEvent *kevent = (ClutterKeyEvent *) event;
- GstNavigationCommand command;
-
- switch (kevent->keyval)
- {
- case CLUTTER_KEY_Up:
- command = GST_NAVIGATION_COMMAND_UP;
- break;
- case CLUTTER_KEY_Down:
- command = GST_NAVIGATION_COMMAND_DOWN;
- break;
- case CLUTTER_KEY_Left:
- command = GST_NAVIGATION_COMMAND_LEFT;
- break;
- case CLUTTER_KEY_Right:
- command = GST_NAVIGATION_COMMAND_RIGHT;
- break;
- case CLUTTER_KEY_Return:
- command = GST_NAVIGATION_COMMAND_ACTIVATE;
- break;
- default:
- command = GST_NAVIGATION_COMMAND_INVALID;
- }
-
- if (command != GST_NAVIGATION_COMMAND_INVALID)
- {
- gst_navigation_send_command (GST_NAVIGATION (sink), command);
-
- return TRUE;
- }
+
+ if (command != GST_NAVIGATION_COMMAND_INVALID) {
+ gst_navigation_send_command (GST_NAVIGATION (sink), command);
+
+ return TRUE;
}
+ }
return FALSE;
}
static void
-clutter_gst_video_sink_init (ClutterGstVideoSink *sink)
+clutter_gst_video_sink_init (ClutterGstVideoSink * sink)
{
ClutterGstVideoSinkPrivate *priv;
sink->priv = priv =
- G_TYPE_INSTANCE_GET_PRIVATE (sink, CLUTTER_GST_TYPE_VIDEO_SINK,
- ClutterGstVideoSinkPrivate);
+ G_TYPE_INSTANCE_GET_PRIVATE (sink, CLUTTER_GST_TYPE_VIDEO_SINK,
+ ClutterGstVideoSinkPrivate);
/* We are saving the GMainContext of the caller thread (which has to be
* the clutter thread) */
@@ -1292,8 +1212,7 @@ clutter_gst_video_sink_init (ClutterGstVideoSink *sink)
}
static GstFlowReturn
-clutter_gst_video_sink_render (GstBaseSink *bsink,
- GstBuffer *buffer)
+clutter_gst_video_sink_render (GstBaseSink * bsink, GstBuffer * buffer)
{
ClutterGstVideoSink *sink = CLUTTER_GST_VIDEO_SINK (bsink);
ClutterGstVideoSinkPrivate *priv = sink->priv;
@@ -1302,14 +1221,12 @@ clutter_gst_video_sink_render (GstBaseSink *bsink,
g_mutex_lock (&gst_source->buffer_lock);
- if (gst_source->stage_lost)
- {
- GST_ELEMENT_ERROR (bsink, RESOURCE, CLOSE,
- ("The window has been closed."),
- ("The window has been closed."));
- g_mutex_unlock (&gst_source->buffer_lock);
- return GST_FLOW_ERROR;
- }
+ if (gst_source->stage_lost) {
+ GST_ELEMENT_ERROR (bsink, RESOURCE, CLOSE,
+ ("The window has been closed."), ("The window has been closed."));
+ g_mutex_unlock (&gst_source->buffer_lock);
+ return GST_FLOW_ERROR;
+ }
if (gst_source->buffer)
gst_buffer_unref (gst_source->buffer);
@@ -1323,7 +1240,7 @@ clutter_gst_video_sink_render (GstBaseSink *bsink,
}
static GstCaps *
-clutter_gst_video_sink_get_caps (GstBaseSink *bsink, GstCaps *filter)
+clutter_gst_video_sink_get_caps (GstBaseSink * bsink, GstCaps * filter)
{
ClutterGstVideoSink *sink;
@@ -1332,13 +1249,12 @@ clutter_gst_video_sink_get_caps (GstBaseSink *bsink, GstCaps *filter)
}
static gboolean
-clutter_gst_video_sink_set_caps (GstBaseSink *bsink,
- GstCaps *caps)
+clutter_gst_video_sink_set_caps (GstBaseSink * bsink, GstCaps * caps)
{
- ClutterGstVideoSink *sink;
+ ClutterGstVideoSink *sink;
ClutterGstVideoSinkPrivate *priv;
- sink = CLUTTER_GST_VIDEO_SINK(bsink);
+ sink = CLUTTER_GST_VIDEO_SINK (bsink);
priv = sink->priv;
if (!clutter_gst_parse_caps (caps, sink, FALSE))
@@ -1353,7 +1269,7 @@ clutter_gst_video_sink_set_caps (GstBaseSink *bsink,
static void
-clutter_gst_video_sink_dispose (GObject *object)
+clutter_gst_video_sink_dispose (GObject * object)
{
ClutterGstVideoSink *self;
ClutterGstVideoSinkPrivate *priv;
@@ -1361,26 +1277,24 @@ clutter_gst_video_sink_dispose (GObject *object)
self = CLUTTER_GST_VIDEO_SINK (object);
priv = self->priv;
- if (priv->renderer)
- {
- priv->renderer->deinit (self);
- priv->renderer = NULL;
- }
+ if (priv->renderer) {
+ priv->renderer->deinit (self);
+ priv->renderer = NULL;
+ }
if (priv->texture)
clutter_gst_video_sink_set_texture (self, NULL);
- if (priv->caps)
- {
- gst_caps_unref (priv->caps);
- priv->caps = NULL;
- }
+ if (priv->caps) {
+ gst_caps_unref (priv->caps);
+ priv->caps = NULL;
+ }
G_OBJECT_CLASS (parent_class)->dispose (object);
}
static void
-clutter_gst_video_sink_finalize (GObject *object)
+clutter_gst_video_sink_finalize (GObject * object)
{
ClutterGstVideoSink *self;
ClutterGstVideoSinkPrivate *priv;
@@ -1396,8 +1310,8 @@ clutter_gst_video_sink_finalize (GObject *object)
}
static void
-clutter_gst_video_sink_set_texture (ClutterGstVideoSink *sink,
- ClutterTexture *texture)
+clutter_gst_video_sink_set_texture (ClutterGstVideoSink * sink,
+ ClutterTexture * texture)
{
const char const *events[] = {
"key-press-event",
@@ -1409,42 +1323,37 @@ clutter_gst_video_sink_set_texture (ClutterGstVideoSink *sink,
ClutterGstVideoSinkPrivate *priv = sink->priv;
guint i;
- if (priv->texture)
- {
- for (i = 0; i < priv->signal_handler_ids->len; i++)
- {
- gulong id = g_array_index (priv->signal_handler_ids, gulong, i);
- g_signal_handler_disconnect (priv->texture, id);
- }
- g_array_set_size (priv->signal_handler_ids, 0);
+ if (priv->texture) {
+ for (i = 0; i < priv->signal_handler_ids->len; i++) {
+ gulong id = g_array_index (priv->signal_handler_ids, gulong, i);
+ g_signal_handler_disconnect (priv->texture, id);
}
+ g_array_set_size (priv->signal_handler_ids, 0);
+ }
priv->texture = texture;
if (priv->texture == NULL)
return;
clutter_actor_set_reactive (CLUTTER_ACTOR (priv->texture), TRUE);
- g_object_add_weak_pointer (G_OBJECT (priv->texture), (gpointer *) &(priv->texture));
-
- for (i = 0; i < G_N_ELEMENTS (events); i++)
- {
- gulong id;
- id = g_signal_connect (priv->texture, events[i],
- G_CALLBACK (navigation_event), sink);
- g_array_append_val (priv->signal_handler_ids, id);
- }
+ g_object_add_weak_pointer (G_OBJECT (priv->texture),
+ (gpointer *) & (priv->texture));
+
+ for (i = 0; i < G_N_ELEMENTS (events); i++) {
+ gulong id;
+ id = g_signal_connect (priv->texture, events[i],
+ G_CALLBACK (navigation_event), sink);
+ g_array_append_val (priv->signal_handler_ids, id);
+ }
}
static void
-clutter_gst_video_sink_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
+clutter_gst_video_sink_set_property (GObject * object,
+ guint prop_id, const GValue * value, GParamSpec * pspec)
{
ClutterGstVideoSink *sink = CLUTTER_GST_VIDEO_SINK (object);
- switch (prop_id)
- {
+ switch (prop_id) {
case PROP_TEXTURE:
clutter_gst_video_sink_set_texture (sink, g_value_get_object (value));
break;
@@ -1454,20 +1363,17 @@ clutter_gst_video_sink_set_property (GObject *object,
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
- }
+ }
}
static void
-clutter_gst_video_sink_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
+clutter_gst_video_sink_get_property (GObject * object,
+ guint prop_id, GValue * value, GParamSpec * pspec)
{
ClutterGstVideoSink *sink = CLUTTER_GST_VIDEO_SINK (object);
ClutterGstVideoSinkPrivate *priv = sink->priv;
- switch (prop_id)
- {
+ switch (prop_id) {
case PROP_TEXTURE:
g_value_set_object (value, priv->texture);
break;
@@ -1481,9 +1387,9 @@ clutter_gst_video_sink_get_property (GObject *object,
}
static gboolean
-clutter_gst_video_sink_start (GstBaseSink *base_sink)
+clutter_gst_video_sink_start (GstBaseSink * base_sink)
{
- ClutterGstVideoSink *sink = CLUTTER_GST_VIDEO_SINK (base_sink);
+ ClutterGstVideoSink *sink = CLUTTER_GST_VIDEO_SINK (base_sink);
ClutterGstVideoSinkPrivate *priv = sink->priv;
priv->source = clutter_gst_source_new (sink);
@@ -1493,25 +1399,24 @@ clutter_gst_video_sink_start (GstBaseSink *base_sink)
}
static gboolean
-clutter_gst_video_sink_stop (GstBaseSink *base_sink)
+clutter_gst_video_sink_stop (GstBaseSink * base_sink)
{
- ClutterGstVideoSink *sink = CLUTTER_GST_VIDEO_SINK (base_sink);
+ ClutterGstVideoSink *sink = CLUTTER_GST_VIDEO_SINK (base_sink);
ClutterGstVideoSinkPrivate *priv = sink->priv;
- if (priv->source)
- {
- GSource *source = (GSource *) priv->source;
+ if (priv->source) {
+ GSource *source = (GSource *) priv->source;
- g_source_destroy (source);
- g_source_unref (source);
- priv->source = NULL;
- }
+ g_source_destroy (source);
+ g_source_unref (source);
+ priv->source = NULL;
+ }
return TRUE;
}
static void
-clutter_gst_video_sink_class_init (ClutterGstVideoSinkClass *klass)
+clutter_gst_video_sink_class_init (ClutterGstVideoSinkClass * klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
@@ -1519,9 +1424,7 @@ clutter_gst_video_sink_class_init (ClutterGstVideoSinkClass *klass)
GParamSpec *pspec;
GST_DEBUG_CATEGORY_INIT (clutter_gst_video_sink_debug,
- "cluttersink",
- 0,
- "clutter video sink");
+ "cluttersink", 0, "clutter video sink");
g_type_class_add_private (klass, sizeof (ClutterGstVideoSinkPrivate));
@@ -1532,15 +1435,14 @@ clutter_gst_video_sink_class_init (ClutterGstVideoSinkClass *klass)
gobject_class->finalize = clutter_gst_video_sink_finalize;
gst_element_class_add_pad_template (gstelement_class,
- gst_static_pad_template_get (&sinktemplate_all));
+ gst_static_pad_template_get (&sinktemplate_all));
gst_element_class_set_details_simple (gstelement_class,
"Clutter video sink",
"Sink/Video",
"Sends video data from a GStreamer pipeline to a Clutter texture",
"Jonathan Matthew <jonathan@kaolin.wh9.net>, "
- "Matthew Allum <mallum@o-hand.com, "
- "Chris Lord <chris@o-hand.com>");
+ "Matthew Allum <mallum@o-hand.com, " "Chris Lord <chris@o-hand.com>");
gstbase_sink_class->render = clutter_gst_video_sink_render;
gstbase_sink_class->preroll = clutter_gst_video_sink_render;
@@ -1558,10 +1460,9 @@ clutter_gst_video_sink_class_init (ClutterGstVideoSinkClass *klass)
* interface.
*/
pspec = g_param_spec_object ("texture",
- "Texture",
- "Texture the video will be decoded into",
- CLUTTER_TYPE_TEXTURE,
- CLUTTER_GST_PARAM_READWRITE);
+ "Texture",
+ "Texture the video will be decoded into",
+ CLUTTER_TYPE_TEXTURE, CLUTTER_GST_PARAM_READWRITE);
g_object_class_install_property (gobject_class, PROP_TEXTURE, pspec);
/**
@@ -1574,17 +1475,16 @@ clutter_gst_video_sink_class_init (ClutterGstVideoSinkClass *klass)
* Since 1.0
*/
pspec = g_param_spec_int ("update-priority",
- "Update Priority",
- "Priority of video updates in the Clutter thread",
- -G_MAXINT, G_MAXINT,
- CLUTTER_GST_DEFAULT_PRIORITY,
- CLUTTER_GST_PARAM_READWRITE);
+ "Update Priority",
+ "Priority of video updates in the Clutter thread",
+ -G_MAXINT, G_MAXINT,
+ CLUTTER_GST_DEFAULT_PRIORITY, CLUTTER_GST_PARAM_READWRITE);
g_object_class_install_property (gobject_class, PROP_UPDATE_PRIORITY, pspec);
}
static void
-clutter_gst_navigation_send_event (GstNavigation *navigation,
- GstStructure *structure)
+clutter_gst_navigation_send_event (GstNavigation * navigation,
+ GstStructure * structure)
{
ClutterGstVideoSink *sink = CLUTTER_GST_VIDEO_SINK (navigation);
ClutterGstVideoSinkPrivate *priv = sink->priv;
@@ -1596,53 +1496,50 @@ clutter_gst_navigation_send_event (GstNavigation *navigation,
/* Converting pointer coordinates to the non scaled geometry
* if the structure contains pointer coordinates */
if (gst_structure_get_double (structure, "pointer_x", &x) &&
- gst_structure_get_double (structure, "pointer_y", &y))
- {
- if (clutter_actor_transform_stage_point (CLUTTER_ACTOR (priv->texture), x, y, &x_out, &y_out) == FALSE)
- {
- g_warning ("Failed to convert non-scaled coordinates for video-sink");
- return;
- }
-
- x = x_out * priv->width / clutter_actor_get_width (CLUTTER_ACTOR (priv->texture));
- y = y_out * priv->height / clutter_actor_get_height (CLUTTER_ACTOR (priv->texture));
-
- gst_structure_set (structure,
- "pointer_x", G_TYPE_DOUBLE, (gdouble) x,
- "pointer_y", G_TYPE_DOUBLE, (gdouble) y,
- NULL);
+ gst_structure_get_double (structure, "pointer_y", &y)) {
+ if (clutter_actor_transform_stage_point (CLUTTER_ACTOR (priv->texture), x,
+ y, &x_out, &y_out) == FALSE) {
+ g_warning ("Failed to convert non-scaled coordinates for video-sink");
+ return;
}
+ x = x_out * priv->width /
+ clutter_actor_get_width (CLUTTER_ACTOR (priv->texture));
+ y = y_out * priv->height /
+ clutter_actor_get_height (CLUTTER_ACTOR (priv->texture));
+
+ gst_structure_set (structure,
+ "pointer_x", G_TYPE_DOUBLE, (gdouble) x,
+ "pointer_y", G_TYPE_DOUBLE, (gdouble) y, NULL);
+ }
+
event = gst_event_new_navigation (structure);
pad = gst_pad_get_peer (GST_VIDEO_SINK_PAD (sink));
- if (GST_IS_PAD (pad) && GST_IS_EVENT (event))
- {
- gst_pad_send_event (pad, event);
+ if (GST_IS_PAD (pad) && GST_IS_EVENT (event)) {
+ gst_pad_send_event (pad, event);
- gst_object_unref (pad);
- }
+ gst_object_unref (pad);
+ }
}
static void
-clutter_gst_navigation_interface_init (GstNavigationInterface *iface)
+clutter_gst_navigation_interface_init (GstNavigationInterface * iface)
{
iface->send_event = clutter_gst_navigation_send_event;
}
gboolean
-_internal_plugin_init (GstPlugin *plugin)
+_internal_plugin_init (GstPlugin * plugin)
{
gboolean ret = gst_element_register (plugin,
- "cluttersink",
- GST_RANK_PRIMARY,
- CLUTTER_GST_TYPE_VIDEO_SINK);
+ "cluttersink",
+ GST_RANK_PRIMARY,
+ CLUTTER_GST_TYPE_VIDEO_SINK);
GST_DEBUG_CATEGORY_INIT (clutter_gst_video_sink_debug,
- "cluttersink",
- 0,
- "clutter video sink");
+ "cluttersink", 0, "clutter video sink");
return ret;
}
diff --git a/clutter-gst/clutter-gst-video-texture.c b/clutter-gst/clutter-gst-video-texture.c
index 86afd16..fe601d1 100644
--- a/clutter-gst/clutter-gst-video-texture.c
+++ b/clutter-gst/clutter-gst-video-texture.c
@@ -72,54 +72,54 @@ struct _ClutterGstVideoTexturePrivate
CoglColor idle_color_unpre;
};
-enum {
- PROP_0 = 32, /* Avoid overlap with player properties */
+enum
+{
+ PROP_0 = 32, /* Avoid overlap with player properties */
PROP_IDLE_MATERIAL,
PROP_PAR
};
-static void clutter_gst_video_texture_media_init (ClutterMediaIface *iface);
-static void clutter_gst_video_texture_player_init (ClutterGstPlayerIface *iface);
+static void clutter_gst_video_texture_media_init (ClutterMediaIface * iface);
+static void clutter_gst_video_texture_player_init (ClutterGstPlayerIface *
+ iface);
G_DEFINE_TYPE_WITH_CODE (ClutterGstVideoTexture,
- clutter_gst_video_texture,
- CLUTTER_TYPE_TEXTURE,
- G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_MEDIA,
- clutter_gst_video_texture_media_init)
- G_IMPLEMENT_INTERFACE (CLUTTER_GST_TYPE_PLAYER,
- clutter_gst_video_texture_player_init));
+ clutter_gst_video_texture,
+ CLUTTER_TYPE_TEXTURE,
+ G_IMPLEMENT_INTERFACE (CLUTTER_TYPE_MEDIA,
+ clutter_gst_video_texture_media_init)
+ G_IMPLEMENT_INTERFACE (CLUTTER_GST_TYPE_PLAYER,
+ clutter_gst_video_texture_player_init));
/* Clutter 1.4 has this symbol, we don't want to depend on 1.4 just for that
* just yet */
static void
-_cogl_color_unpremultiply (CoglColor *color)
+_cogl_color_unpremultiply (CoglColor * color)
{
gfloat alpha;
alpha = cogl_color_get_alpha (color);
- if (alpha != 0)
- {
- gfloat red, green, blue;
+ if (alpha != 0) {
+ gfloat red, green, blue;
- red = cogl_color_get_red (color);
- green = cogl_color_get_green (color);
- blue = cogl_color_get_blue (color);
+ red = cogl_color_get_red (color);
+ green = cogl_color_get_green (color);
+ blue = cogl_color_get_blue (color);
- red = red / alpha;
- green = green / alpha;
- blue = blue / alpha;
+ red = red / alpha;
+ green = green / alpha;
+ blue = blue / alpha;
- cogl_color_set_from_4f (color, red, green, blue, alpha);
- }
+ cogl_color_set_from_4f (color, red, green, blue, alpha);
+ }
}
/* Clutter 1.4 has this symbol, we don't want to depend on 1.4 just for that
* just yet */
static void
-_cogl_color_set_alpha_byte (CoglColor *color,
- unsigned char alpha)
+_cogl_color_set_alpha_byte (CoglColor * color, unsigned char alpha)
{
unsigned char red, green, blue;
@@ -131,20 +131,18 @@ _cogl_color_set_alpha_byte (CoglColor *color,
}
static void
-gen_texcoords_and_draw_cogl_rectangle (ClutterActor *self)
+gen_texcoords_and_draw_cogl_rectangle (ClutterActor * self)
{
ClutterActorBox box;
clutter_actor_get_allocation_box (self, &box);
cogl_rectangle_with_texture_coords (0, 0,
- box.x2 - box.x1,
- box.y2 - box.y1,
- 0, 0, 1.0, 1.0);
+ box.x2 - box.x1, box.y2 - box.y1, 0, 0, 1.0, 1.0);
}
static void
-create_black_idle_material (ClutterGstVideoTexture *video_texture)
+create_black_idle_material (ClutterGstVideoTexture * video_texture)
{
ClutterGstVideoTexturePrivate *priv = video_texture->priv;
@@ -154,19 +152,18 @@ create_black_idle_material (ClutterGstVideoTexture *video_texture)
}
static void
-clutter_gst_video_texture_media_init (ClutterMediaIface *iface)
+clutter_gst_video_texture_media_init (ClutterMediaIface * iface)
{
}
static void
-clutter_gst_video_texture_player_init (ClutterGstPlayerIface *iface)
+clutter_gst_video_texture_player_init (ClutterGstPlayerIface * iface)
{
}
static void
-clutter_gst_video_texture_size_change (ClutterTexture *texture,
- gint width,
- gint height)
+clutter_gst_video_texture_size_change (ClutterTexture * texture,
+ gint width, gint height)
{
ClutterGstVideoTexture *video_texture = CLUTTER_GST_VIDEO_TEXTURE (texture);
ClutterGstVideoTexturePrivate *priv = video_texture->priv;
@@ -178,19 +175,18 @@ clutter_gst_video_texture_size_change (ClutterTexture *texture,
priv->buffer_width = width;
priv->buffer_height = height;
- if (changed)
- {
- /* reset the computed texture dimensions if the underlying frames have
- * changed size */
- CLUTTER_GST_NOTE (ASPECT_RATIO, "frame size has been updated to %dx%d",
- width, height);
+ if (changed) {
+ /* reset the computed texture dimensions if the underlying frames have
+ * changed size */
+ CLUTTER_GST_NOTE (ASPECT_RATIO, "frame size has been updated to %dx%d",
+ width, height);
- priv->texture_width = priv->texture_height = 0;
+ priv->texture_width = priv->texture_height = 0;
- /* queue a relayout to ask containers/layout manager to ask for
- * the preferred size again */
- clutter_actor_queue_relayout (CLUTTER_ACTOR (texture));
- }
+ /* queue a relayout to ask containers/layout manager to ask for
+ * the preferred size again */
+ clutter_actor_queue_relayout (CLUTTER_ACTOR (texture));
+ }
}
/*
@@ -198,9 +194,8 @@ clutter_gst_video_texture_size_change (ClutterTexture *texture,
*/
static void
-clutter_gst_video_texture_get_natural_size (ClutterGstVideoTexture *texture,
- gfloat *width,
- gfloat *height)
+clutter_gst_video_texture_get_natural_size (ClutterGstVideoTexture * texture,
+ gfloat * width, gfloat * height)
{
ClutterGstVideoTexturePrivate *priv = texture->priv;
guint dar_n, dar_d;
@@ -208,64 +203,50 @@ clutter_gst_video_texture_get_natural_size (ClutterGstVideoTexture *texture,
/* we cache texture_width and texture_height */
- if (G_UNLIKELY (priv->buffer_width == 0 || priv->buffer_height == 0))
- {
- /* we don't know the size of the frames yet default to 0,0 */
- priv->texture_width = 0;
- priv->texture_height = 0;
- }
- else if (G_UNLIKELY (priv->texture_width == 0 || priv->texture_height == 0))
- {
- CLUTTER_GST_NOTE (ASPECT_RATIO, "frame is %dx%d with par %d/%d",
- priv->buffer_width, priv->buffer_height,
- priv->par_n, priv->par_d);
-
- ret = gst_video_calculate_display_ratio (&dar_n, &dar_d,
- priv->buffer_width,
- priv->buffer_height,
- priv->par_n, priv->par_d,
- 1, 1);
- if (ret == FALSE)
- dar_n = dar_d = 1;
-
- if (priv->buffer_height % dar_d == 0)
- {
- priv->texture_width = gst_util_uint64_scale (priv->buffer_height,
- dar_n, dar_d);
- priv->texture_height = priv->buffer_height;
- }
- else if (priv->buffer_width % dar_n == 0)
- {
- priv->texture_width = priv->buffer_width;
- priv->texture_height = gst_util_uint64_scale (priv->buffer_width,
- dar_d, dar_n);
-
- }
- else
- {
- priv->texture_width = gst_util_uint64_scale (priv->buffer_height,
- dar_n, dar_d);
- priv->texture_height = priv->buffer_height;
- }
-
- CLUTTER_GST_NOTE (ASPECT_RATIO,
- "final size is %dx%d (calculated par is %d/%d)",
- priv->texture_width, priv->texture_height,
- dar_n, dar_d);
+ if (G_UNLIKELY (priv->buffer_width == 0 || priv->buffer_height == 0)) {
+ /* we don't know the size of the frames yet default to 0,0 */
+ priv->texture_width = 0;
+ priv->texture_height = 0;
+ } else if (G_UNLIKELY (priv->texture_width == 0 || priv->texture_height == 0)) {
+ CLUTTER_GST_NOTE (ASPECT_RATIO, "frame is %dx%d with par %d/%d",
+ priv->buffer_width, priv->buffer_height, priv->par_n, priv->par_d);
+
+ ret = gst_video_calculate_display_ratio (&dar_n, &dar_d,
+ priv->buffer_width,
+ priv->buffer_height, priv->par_n, priv->par_d, 1, 1);
+ if (ret == FALSE)
+ dar_n = dar_d = 1;
+
+ if (priv->buffer_height % dar_d == 0) {
+ priv->texture_width = gst_util_uint64_scale (priv->buffer_height,
+ dar_n, dar_d);
+ priv->texture_height = priv->buffer_height;
+ } else if (priv->buffer_width % dar_n == 0) {
+ priv->texture_width = priv->buffer_width;
+ priv->texture_height = gst_util_uint64_scale (priv->buffer_width,
+ dar_d, dar_n);
+
+ } else {
+ priv->texture_width = gst_util_uint64_scale (priv->buffer_height,
+ dar_n, dar_d);
+ priv->texture_height = priv->buffer_height;
}
+ CLUTTER_GST_NOTE (ASPECT_RATIO,
+ "final size is %dx%d (calculated par is %d/%d)",
+ priv->texture_width, priv->texture_height, dar_n, dar_d);
+ }
+
if (width)
- *width = (gfloat)priv->texture_width;
+ *width = (gfloat) priv->texture_width;
if (height)
- *height = (gfloat)priv->texture_height;
+ *height = (gfloat) priv->texture_height;
}
static void
-clutter_gst_video_texture_get_preferred_width (ClutterActor *self,
- gfloat for_height,
- gfloat *min_width_p,
- gfloat *natural_width_p)
+clutter_gst_video_texture_get_preferred_width (ClutterActor * self,
+ gfloat for_height, gfloat * min_width_p, gfloat * natural_width_p)
{
ClutterGstVideoTexture *texture = CLUTTER_GST_VIDEO_TEXTURE (self);
ClutterGstVideoTexturePrivate *priv = texture->priv;
@@ -278,43 +259,31 @@ clutter_gst_video_texture_get_preferred_width (ClutterActor *self,
sync_size = clutter_texture_get_sync_size (CLUTTER_TEXTURE (self));
keep_aspect_ratio =
- clutter_texture_get_keep_aspect_ratio (CLUTTER_TEXTURE (self));
+ clutter_texture_get_keep_aspect_ratio (CLUTTER_TEXTURE (self));
clutter_gst_video_texture_get_natural_size (texture,
- &natural_width,
- &natural_height);
-
- if (sync_size)
- {
- if (natural_width_p)
- {
- if (!keep_aspect_ratio ||
- for_height < 0 ||
- priv->buffer_height <= 0)
- {
- *natural_width_p = natural_width;
- }
- else
- {
- /* Set the natural width so as to preserve the aspect ratio */
- gfloat ratio = natural_width / natural_height;
-
- *natural_width_p = ratio * for_height;
- }
- }
- }
- else
- {
- if (natural_width_p)
- *natural_width_p = 0;
+ &natural_width, &natural_height);
+
+ if (sync_size) {
+ if (natural_width_p) {
+ if (!keep_aspect_ratio || for_height < 0 || priv->buffer_height <= 0) {
+ *natural_width_p = natural_width;
+ } else {
+ /* Set the natural width so as to preserve the aspect ratio */
+ gfloat ratio = natural_width / natural_height;
+
+ *natural_width_p = ratio * for_height;
+ }
}
+ } else {
+ if (natural_width_p)
+ *natural_width_p = 0;
+ }
}
static void
-clutter_gst_video_texture_get_preferred_height (ClutterActor *self,
- gfloat for_width,
- gfloat *min_height_p,
- gfloat *natural_height_p)
+clutter_gst_video_texture_get_preferred_height (ClutterActor * self,
+ gfloat for_width, gfloat * min_height_p, gfloat * natural_height_p)
{
ClutterGstVideoTexture *texture = CLUTTER_GST_VIDEO_TEXTURE (self);
ClutterGstVideoTexturePrivate *priv = texture->priv;
@@ -327,36 +296,26 @@ clutter_gst_video_texture_get_preferred_height (ClutterActor *self,
sync_size = clutter_texture_get_sync_size (CLUTTER_TEXTURE (self));
keep_aspect_ratio =
- clutter_texture_get_keep_aspect_ratio (CLUTTER_TEXTURE (self));
+ clutter_texture_get_keep_aspect_ratio (CLUTTER_TEXTURE (self));
clutter_gst_video_texture_get_natural_size (texture,
- &natural_width,
- &natural_height);
-
- if (sync_size)
- {
- if (natural_height_p)
- {
- if (!keep_aspect_ratio ||
- for_width < 0 ||
- priv->buffer_width <= 0)
- {
- *natural_height_p = natural_height;
- }
- else
- {
- /* Set the natural height so as to preserve the aspect ratio */
- gfloat ratio = natural_height / natural_width;
-
- *natural_height_p = ratio * for_width;
- }
- }
- }
- else
- {
- if (natural_height_p)
- *natural_height_p = 0;
+ &natural_width, &natural_height);
+
+ if (sync_size) {
+ if (natural_height_p) {
+ if (!keep_aspect_ratio || for_width < 0 || priv->buffer_width <= 0) {
+ *natural_height_p = natural_height;
+ } else {
+ /* Set the natural height so as to preserve the aspect ratio */
+ gfloat ratio = natural_height / natural_width;
+
+ *natural_height_p = ratio * for_width;
+ }
}
+ } else {
+ if (natural_height_p)
+ *natural_height_p = 0;
+ }
}
/*
@@ -366,7 +325,7 @@ clutter_gst_video_texture_get_preferred_height (ClutterActor *self,
* for now.
*/
static void
-clutter_gst_video_texture_paint (ClutterActor *actor)
+clutter_gst_video_texture_paint (ClutterActor * actor)
{
ClutterGstVideoTexture *video_texture = (ClutterGstVideoTexture *) actor;
ClutterGstVideoTexturePrivate *priv = video_texture->priv;
@@ -374,31 +333,27 @@ clutter_gst_video_texture_paint (ClutterActor *actor)
gboolean is_idle;
is_idle = clutter_gst_player_get_idle (CLUTTER_GST_PLAYER (video_texture));
- if (G_UNLIKELY (is_idle))
- {
- CoglColor *color;
- gfloat alpha;
-
- /* blend the alpha of the idle material with the actor's opacity */
- color = cogl_color_copy (&priv->idle_color_unpre);
- alpha = clutter_actor_get_paint_opacity (actor) *
- cogl_color_get_alpha_byte (color) / 0xff;
- _cogl_color_set_alpha_byte (color, alpha);
- cogl_color_premultiply (color);
- cogl_material_set_color (priv->idle_material, color);
-
- cogl_set_source (priv->idle_material);
-
- /* draw */
- gen_texcoords_and_draw_cogl_rectangle (actor);
- }
- else
- {
- /* when not idle, just chain up to ClutterTexture::paint() */
- actor_class =
- CLUTTER_ACTOR_CLASS (clutter_gst_video_texture_parent_class);
- actor_class->paint (actor);
- }
+ if (G_UNLIKELY (is_idle)) {
+ CoglColor *color;
+ gfloat alpha;
+
+ /* blend the alpha of the idle material with the actor's opacity */
+ color = cogl_color_copy (&priv->idle_color_unpre);
+ alpha = clutter_actor_get_paint_opacity (actor) *
+ cogl_color_get_alpha_byte (color) / 0xff;
+ _cogl_color_set_alpha_byte (color, alpha);
+ cogl_color_premultiply (color);
+ cogl_material_set_color (priv->idle_material, color);
+
+ cogl_set_source (priv->idle_material);
+
+ /* draw */
+ gen_texcoords_and_draw_cogl_rectangle (actor);
+ } else {
+ /* when not idle, just chain up to ClutterTexture::paint() */
+ actor_class = CLUTTER_ACTOR_CLASS (clutter_gst_video_texture_parent_class);
+ actor_class->paint (actor);
+ }
}
@@ -407,7 +362,7 @@ clutter_gst_video_texture_paint (ClutterActor *actor)
*/
static void
-clutter_gst_video_texture_dispose (GObject *object)
+clutter_gst_video_texture_dispose (GObject * object)
{
ClutterGstVideoTexture *self = CLUTTER_GST_VIDEO_TEXTURE (object);
@@ -417,9 +372,9 @@ clutter_gst_video_texture_dispose (GObject *object)
}
static void
-clutter_gst_video_texture_finalize (GObject *object)
+clutter_gst_video_texture_finalize (GObject * object)
{
- ClutterGstVideoTexture *self;
+ ClutterGstVideoTexture *self;
ClutterGstVideoTexturePrivate *priv;
self = CLUTTER_GST_VIDEO_TEXTURE (object);
@@ -432,19 +387,16 @@ clutter_gst_video_texture_finalize (GObject *object)
}
static void
-clutter_gst_video_texture_set_property (GObject *object,
- guint property_id,
- const GValue *value,
- GParamSpec *pspec)
+clutter_gst_video_texture_set_property (GObject * object,
+ guint property_id, const GValue * value, GParamSpec * pspec)
{
ClutterGstVideoTexture *video_texture = CLUTTER_GST_VIDEO_TEXTURE (object);
ClutterGstVideoTexturePrivate *priv = video_texture->priv;
- switch (property_id)
- {
+ switch (property_id) {
case PROP_IDLE_MATERIAL:
clutter_gst_video_texture_set_idle_material (video_texture,
- g_value_get_boxed (value));
+ g_value_get_boxed (value));
break;
case PROP_PAR:
priv->par_n = gst_value_get_fraction_numerator (value);
@@ -453,14 +405,12 @@ clutter_gst_video_texture_set_property (GObject *object,
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
+ }
}
static void
-clutter_gst_video_texture_get_property (GObject *object,
- guint property_id,
- GValue *value,
- GParamSpec *pspec)
+clutter_gst_video_texture_get_property (GObject * object,
+ guint property_id, GValue * value, GParamSpec * pspec)
{
ClutterGstVideoTexture *video_texture;
ClutterGstVideoTexturePrivate *priv;
@@ -468,8 +418,7 @@ clutter_gst_video_texture_get_property (GObject *object,
video_texture = CLUTTER_GST_VIDEO_TEXTURE (object);
priv = video_texture->priv;
- switch (property_id)
- {
+ switch (property_id) {
case PROP_IDLE_MATERIAL:
g_value_set_boxed (value, priv->idle_material);
break;
@@ -479,11 +428,11 @@ clutter_gst_video_texture_get_property (GObject *object,
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- }
+ }
}
static void
-clutter_gst_video_texture_class_init (ClutterGstVideoTextureClass *klass)
+clutter_gst_video_texture_class_init (ClutterGstVideoTextureClass * klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
ClutterActorClass *actor_class = CLUTTER_ACTOR_CLASS (klass);
@@ -492,31 +441,29 @@ clutter_gst_video_texture_class_init (ClutterGstVideoTextureClass *klass)
g_type_class_add_private (klass, sizeof (ClutterGstVideoTexturePrivate));
- object_class->dispose = clutter_gst_video_texture_dispose;
- object_class->finalize = clutter_gst_video_texture_finalize;
+ object_class->dispose = clutter_gst_video_texture_dispose;
+ object_class->finalize = clutter_gst_video_texture_finalize;
object_class->set_property = clutter_gst_video_texture_set_property;
object_class->get_property = clutter_gst_video_texture_get_property;
actor_class->paint = clutter_gst_video_texture_paint;
actor_class->get_preferred_width =
- clutter_gst_video_texture_get_preferred_width;
+ clutter_gst_video_texture_get_preferred_width;
actor_class->get_preferred_height =
- clutter_gst_video_texture_get_preferred_height;
+ clutter_gst_video_texture_get_preferred_height;
texture_class->size_change = clutter_gst_video_texture_size_change;
pspec = g_param_spec_boxed ("idle-material",
- "Idle material",
- "Material to use for drawing when not playing",
- COGL_TYPE_HANDLE,
- CLUTTER_GST_PARAM_READWRITE);
+ "Idle material",
+ "Material to use for drawing when not playing",
+ COGL_TYPE_HANDLE, CLUTTER_GST_PARAM_READWRITE);
g_object_class_install_property (object_class, PROP_IDLE_MATERIAL, pspec);
pspec = gst_param_spec_fraction ("pixel-aspect-ratio",
- "Pixel Aspect Ratio",
- "Pixel aspect ratio of incoming frames",
- 1, 100, 100, 1, 1, 1,
- CLUTTER_GST_PARAM_READWRITE);
+ "Pixel Aspect Ratio",
+ "Pixel aspect ratio of incoming frames",
+ 1, 100, 100, 1, 1, 1, CLUTTER_GST_PARAM_READWRITE);
g_object_class_install_property (object_class, PROP_PAR, pspec);
@@ -524,78 +471,67 @@ clutter_gst_video_texture_class_init (ClutterGstVideoTextureClass *klass)
}
static void
-idle_cb (ClutterGstVideoTexture *video_texture,
- GParamSpec *pspec,
- gpointer data)
+idle_cb (ClutterGstVideoTexture * video_texture,
+ GParamSpec * pspec, gpointer data)
{
/* restore the idle material so we don't just display the last frame */
clutter_actor_queue_redraw (CLUTTER_ACTOR (video_texture));
}
static void
-on_autocluttersink_element_added (GstBin *bin,
- GstElement *element,
- ClutterGstVideoTexture *data)
+on_autocluttersink_element_added (GstBin * bin,
+ GstElement * element, ClutterGstVideoTexture * data)
{
if (GST_IS_BASE_SINK (element))
g_object_set (G_OBJECT (element), "qos", TRUE, NULL);
}
static gboolean
-setup_pipeline (ClutterGstVideoTexture *video_texture)
+setup_pipeline (ClutterGstVideoTexture * video_texture)
{
GstElement *pipeline, *video_sink;
pipeline =
- clutter_gst_player_get_pipeline (CLUTTER_GST_PLAYER (video_texture));
- if (!pipeline)
- {
- g_critical ("Unable to get playbin2 element");
- return FALSE;
- }
+ clutter_gst_player_get_pipeline (CLUTTER_GST_PLAYER (video_texture));
+ if (!pipeline) {
+ g_critical ("Unable to get playbin2 element");
+ return FALSE;
+ }
video_sink = gst_element_factory_make ("cluttersink", NULL);
g_object_set (G_OBJECT (video_sink),
- "texture", CLUTTER_TEXTURE (video_texture),
- NULL);
+ "texture", CLUTTER_TEXTURE (video_texture), NULL);
g_object_set (G_OBJECT (pipeline),
- "video-sink", video_sink,
- "subtitle-font-desc", "Sans 16",
- NULL);
+ "video-sink", video_sink, "subtitle-font-desc", "Sans 16", NULL);
return TRUE;
}
static void
-clutter_gst_video_texture_init (ClutterGstVideoTexture *video_texture)
+clutter_gst_video_texture_init (ClutterGstVideoTexture * video_texture)
{
ClutterGstVideoTexturePrivate *priv;
video_texture->priv = priv =
- G_TYPE_INSTANCE_GET_PRIVATE (video_texture,
- CLUTTER_GST_TYPE_VIDEO_TEXTURE,
- ClutterGstVideoTexturePrivate);
-
- if (!clutter_gst_player_init (CLUTTER_GST_PLAYER (video_texture)))
- {
- g_warning ("Failed to initiate suitable playback pipeline.");
- return;
- }
+ G_TYPE_INSTANCE_GET_PRIVATE (video_texture,
+ CLUTTER_GST_TYPE_VIDEO_TEXTURE, ClutterGstVideoTexturePrivate);
- if (!setup_pipeline (video_texture))
- {
- g_warning ("Failed to initiate suitable sinks for pipeline.");
- return;
- }
+ if (!clutter_gst_player_init (CLUTTER_GST_PLAYER (video_texture))) {
+ g_warning ("Failed to initiate suitable playback pipeline.");
+ return;
+ }
+
+ if (!setup_pipeline (video_texture)) {
+ g_warning ("Failed to initiate suitable sinks for pipeline.");
+ return;
+ }
create_black_idle_material (video_texture);
priv->par_n = priv->par_d = 1;
- g_signal_connect (video_texture, "notify::idle",
- G_CALLBACK (idle_cb),
- NULL);
+ g_signal_connect (video_texture, "notify::idle", G_CALLBACK (idle_cb), NULL);
}
/*
@@ -614,12 +550,11 @@ clutter_gst_video_texture_init (ClutterGstVideoTexture *video_texture)
*
* Return value: the newly created video texture actor
*/
-ClutterActor*
+ClutterActor *
clutter_gst_video_texture_new (void)
{
return g_object_new (CLUTTER_GST_TYPE_VIDEO_TEXTURE,
- "disable-slicing", TRUE,
- NULL);
+ "disable-slicing", TRUE, NULL);
}
/**
@@ -632,7 +567,7 @@ clutter_gst_video_texture_new (void)
* Return value: (transfer none): the pipeline element used by the video texture
*/
GstElement *
-clutter_gst_video_texture_get_pipeline (ClutterGstVideoTexture *texture)
+clutter_gst_video_texture_get_pipeline (ClutterGstVideoTexture * texture)
{
return clutter_gst_player_get_pipeline (CLUTTER_GST_PLAYER (texture));
}
@@ -648,13 +583,14 @@ clutter_gst_video_texture_get_pipeline (ClutterGstVideoTexture *texture)
* Since: 1.2
*/
CoglHandle
-clutter_gst_video_texture_get_idle_material (ClutterGstVideoTexture *texture)
+clutter_gst_video_texture_get_idle_material (ClutterGstVideoTexture * texture)
{
g_return_val_if_fail (CLUTTER_GST_IS_VIDEO_TEXTURE (texture),
- COGL_INVALID_HANDLE);
+ COGL_INVALID_HANDLE);
return texture->priv->idle_material;
}
+
/**
* clutter_gst_video_texture_set_idle_material:
* @texture: a #ClutterGstVideoTexture
@@ -670,8 +606,8 @@ clutter_gst_video_texture_get_idle_material (ClutterGstVideoTexture *texture)
* Since: 1.2
*/
void
-clutter_gst_video_texture_set_idle_material (ClutterGstVideoTexture *texture,
- CoglHandle material)
+clutter_gst_video_texture_set_idle_material (ClutterGstVideoTexture * texture,
+ CoglHandle material)
{
ClutterGstVideoTexturePrivate *priv;
@@ -681,16 +617,13 @@ clutter_gst_video_texture_set_idle_material (ClutterGstVideoTexture *texture,
/* priv->idle_material always has a valid material */
cogl_handle_unref (priv->idle_material);
- if (material != COGL_INVALID_HANDLE)
- {
- priv->idle_material = cogl_handle_ref (material);
- cogl_material_get_color (material, &priv->idle_color_unpre);
- _cogl_color_unpremultiply (&priv->idle_color_unpre);
- }
- else
- {
- create_black_idle_material (texture);
- }
+ if (material != COGL_INVALID_HANDLE) {
+ priv->idle_material = cogl_handle_ref (material);
+ cogl_material_get_color (material, &priv->idle_color_unpre);
+ _cogl_color_unpremultiply (&priv->idle_color_unpre);
+ } else {
+ create_black_idle_material (texture);
+ }
g_object_notify (G_OBJECT (texture), "idle-material");
}
@@ -707,7 +640,7 @@ clutter_gst_video_texture_set_idle_material (ClutterGstVideoTexture *texture,
* Since: 1.2
*/
gchar *
-clutter_gst_video_texture_get_user_agent (ClutterGstVideoTexture *texture)
+clutter_gst_video_texture_get_user_agent (ClutterGstVideoTexture * texture)
{
return clutter_gst_player_get_user_agent (CLUTTER_GST_PLAYER (texture));
}
@@ -726,11 +659,10 @@ clutter_gst_video_texture_get_user_agent (ClutterGstVideoTexture *texture)
* Since: 1.2
*/
void
-clutter_gst_video_texture_set_user_agent (ClutterGstVideoTexture *texture,
- const gchar * user_agent)
+clutter_gst_video_texture_set_user_agent (ClutterGstVideoTexture * texture,
+ const gchar * user_agent)
{
- clutter_gst_player_set_user_agent (CLUTTER_GST_PLAYER (texture),
- user_agent);
+ clutter_gst_player_set_user_agent (CLUTTER_GST_PLAYER (texture), user_agent);
}
/**
@@ -744,7 +676,7 @@ clutter_gst_video_texture_set_user_agent (ClutterGstVideoTexture *texture,
* Since: 1.4
*/
ClutterGstSeekFlags
-clutter_gst_video_texture_get_seek_flags (ClutterGstVideoTexture *texture)
+clutter_gst_video_texture_get_seek_flags (ClutterGstVideoTexture * texture)
{
return clutter_gst_player_get_seek_flags (CLUTTER_GST_PLAYER (texture));
}
@@ -760,8 +692,8 @@ clutter_gst_video_texture_get_seek_flags (ClutterGstVideoTexture *texture)
* Since: 1.4
*/
void
-clutter_gst_video_texture_set_seek_flags (ClutterGstVideoTexture *texture,
- ClutterGstSeekFlags flags)
+clutter_gst_video_texture_set_seek_flags (ClutterGstVideoTexture * texture,
+ ClutterGstSeekFlags flags)
{
clutter_gst_player_set_seek_flags (CLUTTER_GST_PLAYER (texture), flags);
}
@@ -775,7 +707,7 @@ clutter_gst_video_texture_set_seek_flags (ClutterGstVideoTexture *texture,
* Since: 1.4
*/
ClutterGstBufferingMode
-clutter_gst_video_texture_get_buffering_mode (ClutterGstVideoTexture *texture)
+clutter_gst_video_texture_get_buffering_mode (ClutterGstVideoTexture * texture)
{
return clutter_gst_player_get_buffering_mode (CLUTTER_GST_PLAYER (texture));
}
@@ -788,8 +720,8 @@ clutter_gst_video_texture_get_buffering_mode (ClutterGstVideoTexture *texture)
* Since: 1.4
*/
void
-clutter_gst_video_texture_set_buffering_mode (ClutterGstVideoTexture *texture,
- ClutterGstBufferingMode mode)
+clutter_gst_video_texture_set_buffering_mode (ClutterGstVideoTexture * texture,
+ ClutterGstBufferingMode mode)
{
clutter_gst_player_set_buffering_mode (CLUTTER_GST_PLAYER (texture), mode);
}
@@ -806,7 +738,7 @@ clutter_gst_video_texture_set_buffering_mode (ClutterGstVideoTexture *texture,
* Since: 1.4
*/
GList *
-clutter_gst_video_texture_get_audio_streams (ClutterGstVideoTexture *texture)
+clutter_gst_video_texture_get_audio_streams (ClutterGstVideoTexture * texture)
{
return clutter_gst_player_get_audio_streams (CLUTTER_GST_PLAYER (texture));
}
@@ -825,7 +757,7 @@ clutter_gst_video_texture_get_audio_streams (ClutterGstVideoTexture *texture)
* Since: 1.4
*/
gint
-clutter_gst_video_texture_get_audio_stream (ClutterGstVideoTexture *texture)
+clutter_gst_video_texture_get_audio_stream (ClutterGstVideoTexture * texture)
{
return clutter_gst_player_get_audio_stream (CLUTTER_GST_PLAYER (texture));
}
@@ -841,8 +773,8 @@ clutter_gst_video_texture_get_audio_stream (ClutterGstVideoTexture *texture)
* Since: 1.4
*/
void
-clutter_gst_video_texture_set_audio_stream (ClutterGstVideoTexture *texture,
- gint index_)
+clutter_gst_video_texture_set_audio_stream (ClutterGstVideoTexture * texture,
+ gint index_)
{
clutter_gst_player_set_audio_stream (CLUTTER_GST_PLAYER (texture), index_);
}
@@ -859,7 +791,7 @@ clutter_gst_video_texture_set_audio_stream (ClutterGstVideoTexture *texture,
* Since: 1.4
*/
GList *
-clutter_gst_video_texture_get_subtitle_tracks (ClutterGstVideoTexture *texture)
+clutter_gst_video_texture_get_subtitle_tracks (ClutterGstVideoTexture * texture)
{
return clutter_gst_player_get_subtitle_tracks (CLUTTER_GST_PLAYER (texture));
}
@@ -878,7 +810,7 @@ clutter_gst_video_texture_get_subtitle_tracks (ClutterGstVideoTexture *texture)
* Since: 1.4
*/
gint
-clutter_gst_video_texture_get_subtitle_track (ClutterGstVideoTexture *texture)
+clutter_gst_video_texture_get_subtitle_track (ClutterGstVideoTexture * texture)
{
return clutter_gst_player_get_subtitle_track (CLUTTER_GST_PLAYER (texture));
}
@@ -896,8 +828,8 @@ clutter_gst_video_texture_get_subtitle_track (ClutterGstVideoTexture *texture)
* Since: 1.4
*/
void
-clutter_gst_video_texture_set_subtitle_track (ClutterGstVideoTexture *texture,
- gint index_)
+clutter_gst_video_texture_set_subtitle_track (ClutterGstVideoTexture * texture,
+ gint index_)
{
clutter_gst_player_set_subtitle_track (CLUTTER_GST_PLAYER (texture), index_);
}