/** * ges_timeline_pipeline_set_render_settings: * @pipeline: a #GESTimelinePipeline * @output_uri: the URI to which the timeline will be rendered * @profile: the #GstEncodingProfile to use to render the timeline. * * Specify where the pipeline shall be rendered and with what settings. * * A copy of @profile and @output_uri will be done internally, the caller can * safely free those values afterwards. * * This method must be called before setting the pipeline mode to * #TIMELINE_MODE_RENDER * * Returns: %TRUE if the settings were aknowledged properly, else %FALSE */ gboolean ges_timeline_pipeline_set_render_settings (GESTimelinePipeline * pipeline, gchar * output_uri, GstEncodingProfile * profile) { /* Clear previous URI sink if it existed */ /* FIXME : We should figure out if it was added to the pipeline, * and if so, remove it. */ if (pipeline->priv->urisink) { g_object_unref (pipeline->priv->urisink); pipeline->priv->urisink = NULL; } pipeline->priv->urisink = gst_element_make_from_uri (GST_URI_SINK, output_uri, "urisink"); if (G_UNLIKELY (pipeline->priv->urisink == NULL)) { GST_ERROR_OBJECT (pipeline, "Couldn't not create sink for URI %s", output_uri); return FALSE; } if (pipeline->priv->profile) gst_encoding_profile_unref (pipeline->priv->profile); g_object_set (pipeline->priv->encodebin, "avoid-reencoding", !(!(pipeline->priv->mode & TIMELINE_MODE_SMART_RENDER)), NULL); g_object_set (pipeline->priv->encodebin, "profile", profile, NULL); pipeline->priv->profile = (GstEncodingProfile *) gst_encoding_profile_ref (profile); return TRUE; }
static void sj_extractor_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { GstEncodingProfile *profile; SjExtractorPrivate *priv = SJ_EXTRACTOR (object)->priv; switch (property_id) { case PROP_PROFILE: if (priv->profile) gst_encoding_profile_unref (priv->profile); profile = GST_ENCODING_PROFILE (g_value_get_pointer (value)); priv->profile = GST_ENCODING_PROFILE(gst_encoding_profile_ref (profile)); priv->rebuild_pipeline = TRUE; g_object_notify (object, "profile"); break; case PROP_PARANOIA: priv->paranoia_mode = g_value_get_int (value); if (priv->cdsrc) g_object_set (G_OBJECT (priv->cdsrc), "paranoia-mode", priv->paranoia_mode, NULL); break; case PROP_DEVICE: /* We need to cache this as the source will be recreated */ g_free (priv->device_path); priv->device_path = g_value_dup_string (value); if (priv->cdsrc != NULL) g_object_set (G_OBJECT (priv->cdsrc), "device", priv->device_path, NULL); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } }
static void sj_extractor_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { SjExtractorPrivate *priv = SJ_EXTRACTOR (object)->priv; switch (property_id) { case PROP_PROFILE: g_value_set_pointer (value, gst_encoding_profile_ref (priv->profile)); break; case PROP_DEVICE: g_value_set_string (value, priv->device_path); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } }
GstEncodingProfile *get_encoding_profile(const char *media_type) { const GList *l; GstEncodingTarget *target; target = get_default_encoding_target(); for(l = gst_encoding_target_get_profiles(target); l != NULL; l = l->next) { GstEncodingProfile *profile = l->data; if (media_type_matches_profile(profile, media_type)) { gst_encoding_profile_ref(profile); return profile; } } return NULL; }
GstEncodingTarget * gst_encoding_target_new (const gchar * name, const gchar * category, const gchar * description, const GList * profiles) { GstEncodingTarget *res; g_return_val_if_fail (name != NULL, NULL); g_return_val_if_fail (category != NULL, NULL); g_return_val_if_fail (description != NULL, NULL); /* Validate name */ if (!validate_name (name)) goto invalid_name; if (category && !validate_name (category)) goto invalid_category; res = (GstEncodingTarget *) g_object_new (GST_TYPE_ENCODING_TARGET, NULL); res->name = g_strdup (name); res->category = g_strdup (category); res->description = g_strdup (description); while (profiles) { GstEncodingProfile *prof = (GstEncodingProfile *) profiles->data; res->profiles = g_list_append (res->profiles, gst_encoding_profile_ref (prof)); profiles = profiles->next; } return res; invalid_name: { GST_ERROR ("Invalid name for encoding target : '%s'", name); return NULL; } invalid_category: { GST_ERROR ("Invalid name for encoding category : '%s'", category); return NULL; } }
/** * gst_encoding_target_get_profile: * @target: a #GstEncodingTarget * @name: the name of the profile to retrieve * * Returns: (transfer full): The matching #GstEncodingProfile, or %NULL. */ GstEncodingProfile * gst_encoding_target_get_profile (GstEncodingTarget * target, const gchar * name) { GList *tmp; g_return_val_if_fail (GST_IS_ENCODING_TARGET (target), NULL); g_return_val_if_fail (name != NULL, NULL); for (tmp = target->profiles; tmp; tmp = tmp->next) { GstEncodingProfile *tprof = (GstEncodingProfile *) tmp->data; if (!g_strcmp0 (gst_encoding_profile_get_name (tprof), name)) { gst_encoding_profile_ref (tprof); return tprof; } } return NULL; }