1
0

invert-audio-polarity.c 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  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 *invert_polarity_filter_audio(void *unused, struct obs_audio_data *audio)
  17. {
  18. float **adata = (float **)audio->data;
  19. for (size_t c = 0; c < MAX_AV_PLANES; c++) {
  20. register float *channel_data = adata[c];
  21. register float *channel_end = channel_data + audio->frames;
  22. if (!channel_data)
  23. break;
  24. while (channel_data < channel_end) {
  25. *(channel_data++) *= -1.0f;
  26. }
  27. }
  28. UNUSED_PARAMETER(unused);
  29. return audio;
  30. }
  31. struct obs_source_info invert_polarity_filter = {
  32. .id = "invert_polarity_filter",
  33. .type = OBS_SOURCE_TYPE_FILTER,
  34. .output_flags = OBS_SOURCE_AUDIO,
  35. .get_name = invert_polarity_name,
  36. .create = invert_polarity_create,
  37. .destroy = invert_polarity_destroy,
  38. .filter_audio = invert_polarity_filter_audio,
  39. };