diff options
author | Edward Hervey <edward.hervey@collabora.co.uk> | 2012-09-17 11:05:55 +0200 |
---|---|---|
committer | Edward Hervey <edward.hervey@collabora.co.uk> | 2012-09-17 11:07:48 +0200 |
commit | befe626916b10fdb34b3c7da713715b4cd0b4add (patch) | |
tree | 7e0484625d01ea7cc54396b7ab696e578e409629 | |
parent | 28bf1d99fc45f2f8bc37c50aad21e0d55e9489d4 (diff) |
gst-indent code
-rw-r--r-- | clutter-gst/clutter-gst-auto-video-sink.c | 567 | ||||
-rw-r--r-- | clutter-gst/clutter-gst-debug.c | 25 | ||||
-rw-r--r-- | clutter-gst/clutter-gst-player.c | 1407 | ||||
-rw-r--r-- | clutter-gst/clutter-gst-plugin.c | 26 | ||||
-rw-r--r-- | clutter-gst/clutter-gst-util.c | 45 | ||||
-rw-r--r-- | clutter-gst/clutter-gst-video-sink.c | 1057 | ||||
-rw-r--r-- | clutter-gst/clutter-gst-video-texture.c | 504 |
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, ¤t_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, ¤t_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_); } |