GstPipeline * _owr_media_renderer_get_pipeline(OwrMediaRenderer *renderer) { g_return_val_if_fail(OWR_IS_MEDIA_RENDERER(renderer), NULL); g_return_val_if_fail(renderer->priv->pipeline, NULL); return gst_object_ref(GST_PIPELINE(renderer->priv->pipeline)); }
gchar * owr_media_renderer_get_dot_data(OwrMediaRenderer *renderer) { g_return_val_if_fail(OWR_IS_MEDIA_RENDERER(renderer), NULL); g_return_val_if_fail(renderer->priv->pipeline, NULL); #if GST_CHECK_VERSION(1, 5, 0) return gst_debug_bin_to_dot_data(GST_BIN(renderer->priv->pipeline), GST_DEBUG_GRAPH_SHOW_ALL); #else return g_strdup(""); #endif }
static void renderer_disabled(OwrMediaRenderer *renderer, GParamSpec *pspec, GstElement *balance) { gboolean disabled = FALSE; g_return_if_fail(OWR_IS_MEDIA_RENDERER(renderer)); g_return_if_fail(G_IS_PARAM_SPEC(pspec) || !pspec); g_return_if_fail(GST_IS_ELEMENT(balance)); g_object_get(renderer, "disabled", &disabled, NULL); g_object_set(balance, "saturation", (gdouble)!disabled, "brightness", (gdouble)-disabled, NULL); }
static gboolean set_source(GHashTable *args) { OwrMediaRenderer *renderer; OwrMediaSource *source; OwrMediaRendererPrivate *priv; g_return_val_if_fail(args, G_SOURCE_REMOVE); renderer = g_hash_table_lookup(args, "renderer"); source = g_hash_table_lookup(args, "source"); g_return_val_if_fail(OWR_IS_MEDIA_RENDERER(renderer), G_SOURCE_REMOVE); g_return_val_if_fail(!source || OWR_IS_MEDIA_SOURCE(source), G_SOURCE_REMOVE); priv = renderer->priv; g_mutex_lock(&priv->media_renderer_lock); if (source == priv->source) { g_mutex_unlock(&priv->media_renderer_lock); goto end; } if (priv->source) { _owr_media_source_release_source(priv->source, priv->src); gst_element_set_state(priv->src, GST_STATE_NULL); gst_bin_remove(GST_BIN(priv->pipeline), priv->src); priv->src = NULL; g_object_unref(priv->source); priv->source = NULL; } if (!source) { /* Shut down the pipeline if we have no source */ gst_element_set_state(priv->pipeline, GST_STATE_NULL); OWR_POST_EVENT(renderer, RENDERER_STOPPED, NULL); g_mutex_unlock(&priv->media_renderer_lock); goto end; } priv->source = g_object_ref(source); _owr_media_renderer_reconfigure_element(renderer); maybe_start_renderer(renderer); g_mutex_unlock(&priv->media_renderer_lock); end: g_object_unref(renderer); if (source) g_object_unref(source); g_hash_table_unref(args); return G_SOURCE_REMOVE; }
/** * owr_media_renderer_set_source: * @renderer: * @source: (transfer none) (allow-none): * * Returns: */ void owr_media_renderer_set_source(OwrMediaRenderer *renderer, OwrMediaSource *source) { GHashTable *args; g_return_if_fail(OWR_IS_MEDIA_RENDERER(renderer)); g_return_if_fail(!source || OWR_IS_MEDIA_SOURCE(source)); args = g_hash_table_new(g_str_hash, g_str_equal); g_hash_table_insert(args, "renderer", renderer); g_hash_table_insert(args, "source", source); g_object_ref(renderer); if (source) g_object_ref(source); _owr_schedule_with_hash_table((GSourceFunc)set_source, args); }
void _owr_media_renderer_reconfigure_element(OwrMediaRenderer *renderer) { g_return_if_fail(OWR_IS_MEDIA_RENDERER(renderer)); OWR_MEDIA_RENDERER_GET_CLASS(renderer)->reconfigure_element(renderer); }