I have a stream state change callback that fires a signal when the stream is 
PA_STREAM_READY, PA_STREAM_FAILED, or PA_STREAM_TERMINATED
When trying to get a ready stream state in pulseaudio, I first wrote this. This 
hangs

    do {
          stream_state = pa_stream_get_state (device.stream);
          if (! PA_STREAM_IS_GOOD (stream_state))
          {
               error_number = pa_context_errno (device.context);
               fprintf (stderr, "Could not acquire PulseAudio stream: %s\n", 
pa_strerror (error_number));
               return;
          }
          else
          {
               fprintf (stderr, "PulseAudio stream state is %d.\n", 
stream_state);
          }
          pa_threaded_mainloop_wait (device.mainloop);
     } while (stream_state != PA_STREAM_READY);


Then I wrote this, based on the pa_simple code, and this doesn't hang

     stream_state = pa_stream_get_state (device.stream);
     while (stream_state != PA_STREAM_READY)
     {
          stream_state = pa_stream_get_state (device.stream);
          if (! PA_STREAM_IS_GOOD (stream_state))
          {
               error_number = pa_context_errno (device.context);
               fprintf (stderr, "Could not acquire PulseAudio stream: %s\n", 
pa_strerror (error_number));
               return;
          }
          else if (stream_state == PA_STREAM_READY)
               break;
          else
               fprintf (stderr, "PulseAudio stream state is %d.\n", 
stream_state);
          pa_threaded_mainloop_wait (device.mainloop);
     }

Why do I have to explicitly check inside the loop to see if the stream is 
ready, and then break? Do I have to have called wait() while the callback 
executes?


      
_______________________________________________
pulseaudio-discuss mailing list
[email protected]
https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss

Reply via email to