diff options
author | Thibault Saunier <tsaunier@gnome.org> | 2016-07-26 11:59:39 -0400 |
---|---|---|
committer | Thibault Saunier <tsaunier@gnome.org> | 2016-07-26 12:08:47 -0400 |
commit | 1338bfd5a0146d9e68f9ae6c09caa6bcd702837d (patch) | |
tree | 41680da9b4f31418753407eaa110527571fe8f5e | |
parent | 21ba30dd934a5719132b807b559c1a4c3c8a341a (diff) |
uri-sources: Make sure to set decodebin 'caps' property
Fixes a regression where we decode streams twice,
this was introduced when we started creating NLE
object at GESTrackElement construct time.
Fixes https://bugzilla.gnome.org/show_bug.cgi?id=769193
-rw-r--r-- | ges/ges-audio-uri-source.c | 28 | ||||
-rw-r--r-- | ges/ges-video-uri-source.c | 28 |
2 files changed, 52 insertions, 4 deletions
diff --git a/ges/ges-audio-uri-source.c b/ges/ges-audio-uri-source.c index e75ee2d7..945ff032 100644 --- a/ges/ges-audio-uri-source.c +++ b/ges/ges-audio-uri-source.c @@ -32,7 +32,7 @@ struct _GESAudioUriSourcePrivate { - void *nothing; + GstElement *decodebin; /* Reference owned by parent class */ }; enum @@ -41,6 +41,26 @@ enum PROP_URI }; +static void +ges_audio_uri_source_track_set_cb (GESAudioUriSource * self, + GParamSpec * arg G_GNUC_UNUSED, gpointer nothing) +{ + GESTrack *track; + const GstCaps *caps = NULL; + + if (!self->priv->decodebin) + return; + + track = ges_track_element_get_track (GES_TRACK_ELEMENT (self)); + if (!track) + return; + + caps = ges_track_get_caps (track); + + GST_INFO_OBJECT (self, "Setting caps to: %" GST_PTR_FORMAT, caps); + g_object_set (self->priv->decodebin, "caps", caps, NULL); +} + /* GESSource VMethod */ static GstElement * ges_audio_uri_source_create_source (GESTrackElement * trksrc) @@ -54,7 +74,8 @@ ges_audio_uri_source_create_source (GESTrackElement * trksrc) track = ges_track_element_get_track (trksrc); - decodebin = gst_element_factory_make ("uridecodebin", NULL); + self->priv->decodebin = decodebin = + gst_element_factory_make ("uridecodebin", NULL); if (track) caps = ges_track_get_caps (track); @@ -177,6 +198,9 @@ ges_audio_uri_source_init (GESAudioUriSource * self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GES_TYPE_AUDIO_URI_SOURCE, GESAudioUriSourcePrivate); + + g_signal_connect (self, "notify::track", + G_CALLBACK (ges_audio_uri_source_track_set_cb), NULL); } /** diff --git a/ges/ges-video-uri-source.c b/ges/ges-video-uri-source.c index c3dc4ac6..d5235277 100644 --- a/ges/ges-video-uri-source.c +++ b/ges/ges-video-uri-source.c @@ -34,7 +34,7 @@ struct _GESVideoUriSourcePrivate { - void *nothing; + GstElement *decodebin; /* Reference owned by parent class */ }; enum @@ -43,6 +43,26 @@ enum PROP_URI }; +static void +ges_video_uri_source_track_set_cb (GESVideoUriSource * self, + GParamSpec * arg G_GNUC_UNUSED, gpointer nothing) +{ + GESTrack *track; + const GstCaps *caps = NULL; + + if (!self->priv->decodebin) + return; + + track = ges_track_element_get_track (GES_TRACK_ELEMENT (self)); + if (!track) + return; + + caps = ges_track_get_caps (track); + + GST_INFO_OBJECT (self, "Setting caps to: %" GST_PTR_FORMAT, caps); + g_object_set (self->priv->decodebin, "caps", caps, NULL); +} + /* GESSource VMethod */ static GstElement * ges_video_uri_source_create_source (GESTrackElement * trksrc) @@ -58,7 +78,8 @@ ges_video_uri_source_create_source (GESTrackElement * trksrc) if (track) caps = ges_track_get_caps (track); - decodebin = gst_element_factory_make ("uridecodebin", NULL); + decodebin = self->priv->decodebin = gst_element_factory_make ("uridecodebin", + NULL); g_object_set (decodebin, "caps", caps, "expose-all-streams", FALSE, "uri", self->uri, NULL); @@ -178,6 +199,9 @@ ges_video_uri_source_init (GESVideoUriSource * self) { self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GES_TYPE_VIDEO_URI_SOURCE, GESVideoUriSourcePrivate); + + g_signal_connect (self, "notify::track", + G_CALLBACK (ges_video_uri_source_track_set_cb), NULL); } /** |