X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=libchimara%2Fschannel.c;fp=libchimara%2Fschannel.c;h=a4935a923278e601f6263618e8ed42128b961181;hb=f33fc94053b392178e9cec7cb6bd7152129863cb;hp=373a9afa65aa9aa3a3e54b7ea733b25dbe827817;hpb=02fe9bcc172622d8dc62d6f6104ab272b80257fc;p=projects%2Fchimara%2Fchimara.git diff --git a/libchimara/schannel.c b/libchimara/schannel.c index 373a9af..a4935a9 100644 --- a/libchimara/schannel.c +++ b/libchimara/schannel.c @@ -463,8 +463,9 @@ glk_schannel_play_ext(schanid_t chan, glui32 snd, glui32 repeats, glui32 notify) g_object_set(chan->source, "stream", stream, NULL); g_object_unref(stream); /* Now owned by GStreamer element */ - if(!gst_element_set_state(chan->pipeline, GST_STATE_PLAYING)) { - WARNING_S(_("Could not set GstElement state to"), "PLAYING"); + /* Play the sound; unless the channel is paused, then pause it instead */ + if(!gst_element_set_state(chan->pipeline, chan->paused? GST_STATE_PAUSED : GST_STATE_PLAYING)) { + WARNING_S(_("Could not set GstElement state to"), chan->paused? "PAUSED" : "PLAYING"); return 0; } return 1; @@ -553,6 +554,10 @@ glk_schannel_pause(schanid_t chan) if(chan->paused) return; /* Silently do nothing */ + + /* Mark the channel as paused even if there is no sound playing yet */ + chan->paused = TRUE; + GstState state; if(gst_element_get_state(chan->pipeline, &state, NULL, GST_CLOCK_TIME_NONE) != GST_STATE_CHANGE_SUCCESS) { WARNING(_("Could not get GstElement state")); @@ -565,7 +570,6 @@ glk_schannel_pause(schanid_t chan) WARNING_S(_("Could not set GstElement state to"), "PAUSED"); return; } - chan->paused = TRUE; } /** @@ -585,6 +589,9 @@ glk_schannel_unpause(schanid_t chan) if(!chan->paused) return; /* Silently do nothing */ + /* Mark the channel as not paused in any case */ + chan->paused = FALSE; + GstState state; if(gst_element_get_state(chan->pipeline, &state, NULL, GST_CLOCK_TIME_NONE) != GST_STATE_CHANGE_SUCCESS) { WARNING(_("Could not get GstElement state")); @@ -597,7 +604,6 @@ glk_schannel_unpause(schanid_t chan) WARNING_S(_("Could not set GstElement state to"), "PLAYING"); return; } - chan->paused = FALSE; } /**