pulseaudio-enum-devices.c 718 B

12345678910111213141516171819202122232425262728293031
  1. #include <obs-internal.h>
  2. #include "pulseaudio-wrapper.h"
  3. static void pulseaudio_output_info(pa_context *c, const pa_sink_info *i, int eol, void *userdata)
  4. {
  5. UNUSED_PARAMETER(c);
  6. if (eol != 0)
  7. goto skip;
  8. struct enum_cb *ecb = (struct enum_cb *)userdata;
  9. if (ecb->cont)
  10. ecb->cont = ecb->cb(ecb->data, i->description, i->name);
  11. skip:
  12. pulseaudio_signal(0);
  13. }
  14. void obs_enum_audio_monitoring_devices(obs_enum_audio_device_cb cb, void *data)
  15. {
  16. struct enum_cb *ecb = bzalloc(sizeof(struct enum_cb));
  17. ecb->cb = cb;
  18. ecb->data = data;
  19. ecb->cont = 1;
  20. pulseaudio_init();
  21. pa_sink_info_cb_t pa_cb = pulseaudio_output_info;
  22. pulseaudio_get_sink_info_list(pa_cb, (void *)ecb);
  23. pulseaudio_unref();
  24. bfree(ecb);
  25. }