tools: Add an option to disable mixing

+ Add a a GObject property so that the info is seralized

https://bugzilla.gnome.org/show_bug.cgi?id=729382
This commit is contained in:
Thibault Saunier 2014-04-30 20:58:42 +02:00
parent cba79c09ac
commit 2dd59ab53a
2 changed files with 29 additions and 1 deletions

View file

@ -83,6 +83,7 @@ enum
ARG_RESTRICTION_CAPS, ARG_RESTRICTION_CAPS,
ARG_TYPE, ARG_TYPE,
ARG_DURATION, ARG_DURATION,
ARG_MIXING,
ARG_LAST, ARG_LAST,
TRACK_ELEMENT_ADDED, TRACK_ELEMENT_ADDED,
TRACK_ELEMENT_REMOVED, TRACK_ELEMENT_REMOVED,
@ -386,6 +387,9 @@ ges_track_get_property (GObject * object, guint property_id,
case ARG_RESTRICTION_CAPS: case ARG_RESTRICTION_CAPS:
gst_value_set_caps (value, track->priv->restriction_caps); gst_value_set_caps (value, track->priv->restriction_caps);
break; break;
case ARG_MIXING:
g_value_set_boolean (value, track->priv->mixing);
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
} }
@ -407,6 +411,9 @@ ges_track_set_property (GObject * object, guint property_id,
case ARG_RESTRICTION_CAPS: case ARG_RESTRICTION_CAPS:
ges_track_set_restriction_caps (track, gst_value_get_caps (value)); ges_track_set_restriction_caps (track, gst_value_get_caps (value));
break; break;
case ARG_MIXING:
ges_track_set_mixing (track, g_value_get_boolean (value));
break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
} }
@ -471,6 +478,7 @@ ges_track_constructed (GObject * object)
gnlobject = gst_element_factory_make ("gnloperation", "mixing-operation"); gnlobject = gst_element_factory_make ("gnloperation", "mixing-operation");
if (!gst_bin_add (GST_BIN (gnlobject), mixer)) { if (!gst_bin_add (GST_BIN (gnlobject), mixer)) {
GST_WARNING_OBJECT (self, "Could not add the mixer to our composition"); GST_WARNING_OBJECT (self, "Could not add the mixer to our composition");
gst_object_unref (gnlobject);
return; return;
} }
@ -562,6 +570,17 @@ ges_track_class_init (GESTrackClass * klass)
g_object_class_install_property (object_class, ARG_TYPE, g_object_class_install_property (object_class, ARG_TYPE,
properties[ARG_TYPE]); properties[ARG_TYPE]);
/**
* GESTrack:mixing:
*
* Whether layer mixing is activated or not on the track.
*/
properties[ARG_MIXING] = g_param_spec_boolean ("mixing", "Mixing",
"Whether layer mixing is activated on the track or not",
TRUE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT);
g_object_class_install_property (object_class, ARG_MIXING,
properties[ARG_MIXING]);
/** /**
* GESTrack::track-element-added: * GESTrack::track-element-added:
* @object: the #GESTrack * @object: the #GESTrack
@ -759,7 +778,7 @@ ges_track_set_mixing (GESTrack * track, gboolean mixing)
} }
if (mixing) { if (mixing) {
// increase ref count to hold the object /* increase ref count to hold the object */
gst_object_ref (track->priv->mixing_operation); gst_object_ref (track->priv->mixing_operation);
if (!gst_bin_add (GST_BIN (track->priv->composition), if (!gst_bin_add (GST_BIN (track->priv->composition),
track->priv->mixing_operation)) { track->priv->mixing_operation)) {

View file

@ -35,6 +35,7 @@
/* GLOBAL VARIABLE */ /* GLOBAL VARIABLE */
static guint repeat = 0; static guint repeat = 0;
static gboolean mute = FALSE; static gboolean mute = FALSE;
static gboolean disable_mixing = FALSE;
static GESPipeline *pipeline = NULL; static GESPipeline *pipeline = NULL;
static gboolean seenerrors = FALSE; static gboolean seenerrors = FALSE;
static gchar *save_path = NULL; static gchar *save_path = NULL;
@ -232,6 +233,9 @@ create_timeline (int nbargs, gchar ** argv, const gchar * proj_uri)
if (track_types & GES_TRACK_TYPE_AUDIO) { if (track_types & GES_TRACK_TYPE_AUDIO) {
tracka = GES_TRACK (ges_audio_track_new ()); tracka = GES_TRACK (ges_audio_track_new ());
if (disable_mixing)
ges_track_set_mixing (tracka, FALSE);
if (!(ges_timeline_add_track (timeline, tracka))) if (!(ges_timeline_add_track (timeline, tracka)))
goto build_failure; goto build_failure;
} }
@ -239,6 +243,9 @@ create_timeline (int nbargs, gchar ** argv, const gchar * proj_uri)
if (track_types & GES_TRACK_TYPE_VIDEO) { if (track_types & GES_TRACK_TYPE_VIDEO) {
trackv = GES_TRACK (ges_video_track_new ()); trackv = GES_TRACK (ges_video_track_new ());
if (disable_mixing)
ges_track_set_mixing (trackv, FALSE);
if (!(ges_timeline_add_track (timeline, trackv))) if (!(ges_timeline_add_track (timeline, trackv)))
goto build_failure; goto build_failure;
} }
@ -691,6 +698,8 @@ main (int argc, gchar ** argv)
"Defines the track types to be created"}, "Defines the track types to be created"},
{"mute", 0, 0, G_OPTION_ARG_NONE, &mute, {"mute", 0, 0, G_OPTION_ARG_NONE, &mute,
"Mute playback output, which means that we use faksinks"}, "Mute playback output, which means that we use faksinks"},
{"disable-mixing", 0, 0, G_OPTION_ARG_NONE, &disable_mixing,
"Do not use mixing element in the tracks"},
#ifdef HAVE_GST_VALIDATE #ifdef HAVE_GST_VALIDATE
{"set-scenario", 0, 0, G_OPTION_ARG_STRING, &scenario, {"set-scenario", 0, 0, G_OPTION_ARG_STRING, &scenario,
"Specify a GstValidate scenario to run, 'none' means load gst-validate" "Specify a GstValidate scenario to run, 'none' means load gst-validate"