2004-11-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+ * gst/playback/gstplaybin.c: (gen_video_element),
+ (gen_audio_element), (setup_sinks), (gst_play_bin_change_state):
+ Don't reference all sinks, but only the video- and audiosinks.
+ The vis. element should be disposed when we're done with it.
+ We don't have any reason to keep it around. This fixes warnings
+ when reusing playbin for playing multiple audio files with
+ vis. enabled. Also release audio device on pause - idea stolen
+ from Rhythmbox.
+
+2004-11-25 Ronald S. Bultje <rbultje@ronald.bitfreak.net>
+
* ext/a52dec/gsta52dec.c: (gst_a52dec_channels), (gst_a52dec_push),
(gst_a52dec_reneg), (gst_a52dec_loop), (plugin_init):
* ext/alsa/gstalsa.c: (gst_alsa_get_caps):
done:
play_bin->seekables = g_list_append (play_bin->seekables, sink);
+ /* since we're gonna add it to a bin but don't want to lose it,
+ * we keep a reference. */
+ gst_object_ref (GST_OBJECT (element));
+
return element;
}
done:
play_bin->seekables = g_list_prepend (play_bin->seekables, sink);
+ /* since we're gonna add it to a bin but don't want to lose it,
+ * we keep a reference. */
+ gst_object_ref (GST_OBJECT (element));
+
return element;
}
/* we found a sink for this stream, now try to install it */
if (sink != NULL) {
- gst_object_ref (GST_OBJECT (sink));
gst_bin_add (GST_BIN (play_bin), sink);
GST_DEBUG ("Adding sink with state %d (parent: %d, peer: %d)\n",
GST_STATE (sink), GST_STATE (play_bin),
return ret;
switch (transition) {
- case GST_STATE_NULL_TO_READY:
- break;
- case GST_STATE_READY_TO_PAUSED:
- break;
- case GST_STATE_PAUSED_TO_PLAYING:
- break;
case GST_STATE_PLAYING_TO_PAUSED:
+ /* Set audio sink state to NULL to release the sound device,
+ * but only if we own it (else we might be in chain-transition). */
+ if (GST_STATE (play_bin->audio_sink) == GST_STATE_PAUSED) {
+ gst_element_set_state (play_bin->audio_sink, GST_STATE_NULL);
+ }
break;
case GST_STATE_PAUSED_TO_READY:
remove_sinks (play_bin);
break;
- case GST_STATE_READY_TO_NULL:
- break;
default:
break;
}