summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorWim Taymans <wim.taymans@gmail.com>2001-12-25 02:17:53 +0000
committerWim Taymans <wim.taymans@gmail.com>2001-12-25 02:17:53 +0000
commita81b495e22c490be75ac2713ee512fe01cdd18eb (patch)
tree10040d88a8cf8c9b04463f74e7faece82a269a4b /sys
parent150c5bc0b4c4013a598ed7810e78aa04ba3184b1 (diff)
Added better state change handling to osssink
Original commit message from CVS: Added better state change handling to osssink
Diffstat (limited to 'sys')
-rw-r--r--sys/oss/gstosssink.c40
1 files changed, 23 insertions, 17 deletions
diff --git a/sys/oss/gstosssink.c b/sys/oss/gstosssink.c
index 407efd1a..b7dd8d82 100644
--- a/sys/oss/gstosssink.c
+++ b/sys/oss/gstosssink.c
@@ -389,13 +389,9 @@ gst_osssink_chain (GstPad *pad, GstBuffer *buf)
if (GST_IS_EVENT (buf)) {
g_print ("eos on osssink\n");
- gst_element_set_state (osssink, GST_STATE_PAUSED);
+ gst_element_set_state (GST_ELEMENT (osssink), GST_STATE_PAUSED);
gst_event_free (GST_EVENT (buf));
- }
-
- if ((in_flush = GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLUSH))) {
- GST_DEBUG (GST_CAT_PLUGIN_INFO,"osssink: flush\n");
- ioctl (osssink->fd, SNDCTL_DSP_RESET, 0);
+ return;
}
g_signal_emit (G_OBJECT (osssink), gst_osssink_signals[SIGNAL_HANDOFF], 0,
@@ -589,18 +585,28 @@ gst_osssink_change_state (GstElement *element)
osssink = GST_OSSSINK (element);
- /* if going down into NULL state, close the file if it's open */
- if (GST_STATE_PENDING (element) == GST_STATE_NULL) {
- if (GST_FLAG_IS_SET (element, GST_OSSSINK_OPEN))
- gst_osssink_close_audio (osssink);
-
- /* otherwise (READY) we need to open the sound card */
- } else if (GST_STATE_PENDING (element) == GST_STATE_READY) {
- if (!GST_FLAG_IS_SET (element, GST_OSSSINK_OPEN)) {
- if (!gst_osssink_open_audio (osssink)) {
- return GST_STATE_FAILURE;
+ switch (GST_STATE_TRANSITION (element)) {
+ case GST_STATE_NULL_TO_READY:
+ if (!GST_FLAG_IS_SET (element, GST_OSSSINK_OPEN)) {
+ if (!gst_osssink_open_audio (osssink)) {
+ return GST_STATE_FAILURE;
+ }
}
- }
+ break;
+ case GST_STATE_READY_TO_PAUSED:
+ break;
+ case GST_STATE_PAUSED_TO_PLAYING:
+ break;
+ case GST_STATE_PLAYING_TO_PAUSED:
+ if (GST_FLAG_IS_SET (element, GST_OSSSINK_OPEN))
+ ioctl (osssink->fd, SNDCTL_DSP_RESET, 0);
+ break;
+ case GST_STATE_PAUSED_TO_READY:
+ break;
+ case GST_STATE_READY_TO_NULL:
+ if (GST_FLAG_IS_SET (element, GST_OSSSINK_OPEN))
+ gst_osssink_close_audio (osssink);
+ break;
}
if (GST_ELEMENT_CLASS (parent_class)->change_state)