invert-audio-polarity.c 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #include <obs-module.h>
  2. static const char *invert_polarity_name(void *unused)
  3. {
  4. UNUSED_PARAMETER(unused);
  5. return obs_module_text("InvertPolarity");
  6. }
  7. static void invert_polarity_destroy(void *data)
  8. {
  9. UNUSED_PARAMETER(data);
  10. }
  11. static void *invert_polarity_create(obs_data_t *settings, obs_source_t *filter)
  12. {
  13. UNUSED_PARAMETER(settings);
  14. return filter;
  15. }
  16. static struct obs_audio_data *
  17. invert_polarity_filter_audio(void *unused, struct obs_audio_data *audio)
  18. {
  19. float **adata = (float **)audio->data;
  20. for (size_t c = 0; c < MAX_AV_PLANES; c++) {
  21. register float *channel_data = adata[c];
  22. register float *channel_end = channel_data + audio->frames;
  23. if (!channel_data)
  24. break;
  25. while (channel_data < channel_end) {
  26. *(channel_data++) *= -1.0f;
  27. }
  28. }
  29. UNUSED_PARAMETER(unused);
  30. return audio;
  31. }
  32. struct obs_source_info invert_polarity_filter = {
  33. .id = "invert_polarity_filter",
  34. .type = OBS_SOURCE_TYPE_FILTER,
  35. .output_flags = OBS_SOURCE_AUDIO,
  36. .get_name = invert_polarity_name,
  37. .create = invert_polarity_create,
  38. .destroy = invert_polarity_destroy,
  39. .filter_audio = invert_polarity_filter_audio,
  40. };