|
|
@@ -0,0 +1,49 @@
|
|
|
+#include <obs-module.h>
|
|
|
+
|
|
|
+static const char *invert_polarity_name(void *unused)
|
|
|
+{
|
|
|
+ UNUSED_PARAMETER(unused);
|
|
|
+ return obs_module_text("InvertPolarity");
|
|
|
+}
|
|
|
+
|
|
|
+static void invert_polarity_destroy(void *data)
|
|
|
+{
|
|
|
+ UNUSED_PARAMETER(data);
|
|
|
+}
|
|
|
+
|
|
|
+static void *invert_polarity_create(obs_data_t *settings, obs_source_t *filter)
|
|
|
+{
|
|
|
+ UNUSED_PARAMETER(settings);
|
|
|
+ return filter;
|
|
|
+}
|
|
|
+
|
|
|
+static struct obs_audio_data *invert_polarity_filter_audio(void *unused,
|
|
|
+ struct obs_audio_data *audio)
|
|
|
+{
|
|
|
+ float **adata = (float**)audio->data;
|
|
|
+
|
|
|
+ for (size_t c = 0; c < MAX_AV_PLANES; c++) {
|
|
|
+ register float *channel_data = adata[c];
|
|
|
+ register float *channel_end = channel_data + audio->frames;
|
|
|
+
|
|
|
+ if (!channel_data)
|
|
|
+ break;
|
|
|
+
|
|
|
+ while (channel_data < channel_end) {
|
|
|
+ *(channel_data++) *= -1.0f;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ UNUSED_PARAMETER(unused);
|
|
|
+ return audio;
|
|
|
+}
|
|
|
+
|
|
|
+struct obs_source_info invert_polarity_filter = {
|
|
|
+ .id = "invert_polarity_filter",
|
|
|
+ .type = OBS_SOURCE_TYPE_FILTER,
|
|
|
+ .output_flags = OBS_SOURCE_AUDIO,
|
|
|
+ .get_name = invert_polarity_name,
|
|
|
+ .create = invert_polarity_create,
|
|
|
+ .destroy = invert_polarity_destroy,
|
|
|
+ .filter_audio = invert_polarity_filter_audio,
|
|
|
+};
|