Пример #1
0
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));
}
Пример #2
0
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
}
Пример #3
0
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);
}
Пример #4
0
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;
}
Пример #5
0
/**
 * 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);
}
Пример #6
0
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);
}