1
0

pulseaudio-enum-devices.c 772 B

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