static GESTrackElement * ges_test_clip_create_track_element (GESClip * clip, GESTrackType type) { GESTestClipPrivate *priv = GES_TEST_CLIP (clip)->priv; GESTrackElement *res = NULL; GST_DEBUG ("Creating a GESTrackTestSource for type: %s", ges_track_type_name (type)); if (type == GES_TRACK_TYPE_VIDEO) { res = (GESTrackElement *) ges_video_test_source_new (); ges_video_test_source_set_pattern ( (GESVideoTestSource *) res, priv->vpattern); } else if (type == GES_TRACK_TYPE_AUDIO) { res = (GESTrackElement *) ges_audio_test_source_new (); if (priv->mute) ges_track_element_set_active (res, FALSE); ges_audio_test_source_set_freq ((GESAudioTestSource *) res, priv->freq); ges_audio_test_source_set_volume ((GESAudioTestSource *) res, priv->volume); } return res; }
static GESTrackElement * ges_uri_clip_create_track_element (GESClip * clip, GESTrackType type) { GESUriClipPrivate *priv = GES_URI_CLIP (clip)->priv; GESTrackElement *res; if (priv->is_image) { if (type != GES_TRACK_TYPE_VIDEO) { GST_DEBUG ("Object is still image, not adding any audio source"); return NULL; } else { GST_DEBUG ("Creating a GESImageSource"); res = (GESTrackElement *) ges_image_source_new (priv->uri); } } else { GST_DEBUG ("Creating a GESUriSource"); /* FIXME : Implement properly ! */ res = (GESTrackElement *) ges_track_filesource_new (priv->uri); /* If mute and track is audio, deactivate the track element */ if (type == GES_TRACK_TYPE_AUDIO && priv->mute) ges_track_element_set_active (res, FALSE); } if (res) ges_track_element_set_track_type (res, type); return res; }
static void ges_track_element_set_property (GObject * object, guint property_id, const GValue * value, GParamSpec * pspec) { GESTrackElement *track_element = GES_TRACK_ELEMENT (object); switch (property_id) { case PROP_ACTIVE: ges_track_element_set_active (track_element, g_value_get_boolean (value)); break; case PROP_TRACK_TYPE: track_element->priv->track_type = g_value_get_flags (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } }
/** * ges_test_clip_set_mute: * @self: the #GESTestClip on which to mute or unmute the audio track * @mute: %TRUE to mute the audio track, %FALSE to unmute it * * Sets whether the audio track of this clip is muted or not. * */ void ges_test_clip_set_mute (GESTestClip * self, gboolean mute) { GList *tmp; GST_DEBUG ("self:%p, mute:%d", self, mute); self->priv->mute = mute; /* Go over tracked objects, and update 'active' status on all audio objects */ for (tmp = GES_CONTAINER_CHILDREN (self); tmp; tmp = tmp->next) { GESTrackElement *trackelement = (GESTrackElement *) tmp->data; if (ges_track_element_get_track (trackelement)->type == GES_TRACK_TYPE_AUDIO) ges_track_element_set_active (trackelement, !mute); } }
static void make_source (GESFormatter * self, GList * reflist, GHashTable * source_table) { GHashTable *props_table, *effect_table; gchar **prio_array; GESLayer *layer; GESPitiviFormatterPrivate *priv = GES_PITIVI_FORMATTER (self)->priv; gchar *fac_ref = NULL, *media_type = NULL, *filename = NULL, *prio_str; GList *tmp = NULL, *keys, *tmp_key; GESUriClip *src = NULL; gint prio; gboolean a_avail = FALSE, v_avail = FALSE, video; GHashTable *trackelement_table = priv->track_elements_table; for (tmp = reflist; tmp; tmp = tmp->next) { /* Get the layer */ props_table = g_hash_table_lookup (trackelement_table, (gchar *) tmp->data); prio_str = (gchar *) g_hash_table_lookup (props_table, "priority"); prio_array = g_strsplit (prio_str, ")", 0); prio = (gint) g_ascii_strtod (prio_array[1], NULL); g_strfreev (prio_array); /* If we do not have any layer with this priority, create it */ if (!(layer = g_hash_table_lookup (priv->layers_table, &prio))) { layer = ges_layer_new (); g_object_set (layer, "auto-transition", TRUE, "priority", prio, NULL); ges_timeline_add_layer (self->timeline, layer); g_hash_table_insert (priv->layers_table, g_memdup (&prio, sizeof (guint64)), layer); } fac_ref = (gchar *) g_hash_table_lookup (props_table, "fac_ref"); media_type = (gchar *) g_hash_table_lookup (props_table, "media_type"); if (!g_strcmp0 (media_type, "pitivi.stream.VideoStream")) video = TRUE; else video = FALSE; /* FIXME I am sure we could reimplement this whole part * in a simpler way */ if (g_strcmp0 (fac_ref, (gchar *) "effect")) { /* FIXME this is a hack to get a ref to the formatter when receiving * child-added */ g_hash_table_insert (props_table, (gchar *) "current-formatter", self); if (a_avail && (!video)) { a_avail = FALSE; } else if (v_avail && (video)) { v_avail = FALSE; } else { /* If we only have audio or only video in the previous source, * set it has such */ if (a_avail) { ges_clip_set_supported_formats (GES_CLIP (src), GES_TRACK_TYPE_VIDEO); } else if (v_avail) { ges_clip_set_supported_formats (GES_CLIP (src), GES_TRACK_TYPE_AUDIO); } filename = (gchar *) g_hash_table_lookup (source_table, "filename"); src = ges_uri_clip_new (filename); if (!video) { v_avail = TRUE; a_avail = FALSE; } else { a_avail = TRUE; v_avail = FALSE; } set_properties (G_OBJECT (src), props_table); ges_layer_add_clip (layer, GES_CLIP (src)); g_signal_connect (src, "child-added", G_CALLBACK (track_element_added_cb), props_table); priv->sources_to_load = g_list_prepend (priv->sources_to_load, src); } } else { GESEffect *effect; gchar *active = (gchar *) g_hash_table_lookup (props_table, "active"); effect = ges_effect_new ((gchar *) g_hash_table_lookup (props_table, (gchar *) "effect_name")); ges_track_element_set_track_type (GES_TRACK_ELEMENT (effect), (video ? GES_TRACK_TYPE_VIDEO : GES_TRACK_TYPE_AUDIO)); effect_table = g_hash_table_lookup (props_table, (gchar *) "effect_props"); ges_container_add (GES_CONTAINER (src), GES_TIMELINE_ELEMENT (effect)); if (!g_strcmp0 (active, (gchar *) "(bool)False")) ges_track_element_set_active (GES_TRACK_ELEMENT (effect), FALSE); /* Set effect properties */ keys = g_hash_table_get_keys (effect_table); for (tmp_key = keys; tmp_key; tmp_key = tmp_key->next) { GstStructure *structure; const GValue *value; GParamSpec *spec; GstCaps *caps; gchar *prop_val; prop_val = (gchar *) g_hash_table_lookup (effect_table, (gchar *) tmp_key->data); if (g_strstr_len (prop_val, -1, "(GEnum)")) { gchar **val = g_strsplit (prop_val, ")", 2); ges_track_element_set_child_properties (GES_TRACK_ELEMENT (effect), (gchar *) tmp_key->data, atoi (val[1]), NULL); g_strfreev (val); } else if (ges_track_element_lookup_child (GES_TRACK_ELEMENT (effect), (gchar *) tmp->data, NULL, &spec)) { gchar *caps_str = g_strdup_printf ("structure1, property1=%s;", prop_val); caps = gst_caps_from_string (caps_str); g_free (caps_str); structure = gst_caps_get_structure (caps, 0); value = gst_structure_get_value (structure, "property1"); ges_track_element_set_child_property_by_pspec (GES_TRACK_ELEMENT (effect), spec, (GValue *) value); gst_caps_unref (caps); } } } } if (a_avail) { ges_clip_set_supported_formats (GES_CLIP (src), GES_TRACK_TYPE_VIDEO); } else if (v_avail) { ges_clip_set_supported_formats (GES_CLIP (src), GES_TRACK_TYPE_AUDIO); } }