wasapi: Fix double call to Start when resetting the element
authorNirbheek Chauhan <nirbheek@centricular.com>
Fri, 4 Jan 2019 13:06:43 +0000 (18:36 +0530)
committerNirbheek Chauhan <nirbheek@centricular.com>
Fri, 4 Jan 2019 13:17:07 +0000 (18:47 +0530)
When either the source or sink goes from PLAYING -> NULL -> PLAYING,
we call _reset() which sets client_needs_restart, and then we call
prepare() which calls IAudioClient_Start(), so we don't need to call
it again in src_read() or sink_write(). Unlike when we're just going
PLAYING -> PAUSED -> PLAYING.

sys/wasapi/gstwasapisink.c
sys/wasapi/gstwasapisrc.c

index 4adebe8..1e3b07a 100644 (file)
@@ -557,6 +557,7 @@ gst_wasapi_sink_prepare (GstAudioSink * asink, GstAudioRingBufferSpec * spec)
 
   hr = IAudioClient_Start (self->client);
   HR_FAILED_GOTO (hr, IAudioClient::Start, beach);
+  self->client_needs_restart = FALSE;
 
   gst_audio_ring_buffer_set_channel_positions (GST_AUDIO_BASE_SINK
       (self)->ringbuffer, self->positions);
index aecf0bd..3d28b5c 100644 (file)
@@ -508,6 +508,7 @@ gst_wasapi_src_prepare (GstAudioSrc * asrc, GstAudioRingBufferSpec * spec)
 
   hr = IAudioClient_Start (self->client);
   HR_FAILED_GOTO (hr, IAudioClock::Start, beach);
+  self->client_needs_restart = FALSE;
 
   gst_audio_ring_buffer_set_channel_positions (GST_AUDIO_BASE_SRC
       (self)->ringbuffer, self->positions);