From 0c8caae88630b2ed1d647b55a26281c3199f66c1 Mon Sep 17 00:00:00 2001
From: Adrien Beraud <adrien.beraud@savoirfairelinux.com>
Date: Fri, 11 Aug 2023 17:51:46 -0400
Subject: [PATCH] audiolayer: use null AudioProcessor instead of
 NullAudioProcessor

Avoids the audio thread processing overhead and memory overhead of the
AudioProcessor, since even the NullAudioProcessor uses queues of frames
and a dequeue mechanism.

Change-Id: I4a76b2f32d9a281519b5118c3be7676f730deb26
---
 src/media/audio/audiolayer.cpp | 31 ++++++++++++++++---------------
 1 file changed, 16 insertions(+), 15 deletions(-)

diff --git a/src/media/audio/audiolayer.cpp b/src/media/audio/audiolayer.cpp
index ac7e4605e8..5a453a61c4 100644
--- a/src/media/audio/audiolayer.cpp
+++ b/src/media/audio/audiolayer.cpp
@@ -209,8 +209,8 @@ AudioLayer::createAudioProcessor()
         audioProcessor.reset(new WebRTCAudioProcessor(formatForProcessor, frame_size));
 #else
         JAMI_ERR("[audiolayer] audioProcessor preference is webrtc, but library not linked! "
-                 "using NullAudioProcessor instead");
-        audioProcessor.reset(new NullAudioProcessor(formatForProcessor, frame_size));
+                 "using null AudioProcessor instead");
+        audioProcessor.reset();
 #endif
     } else if (pref_.getAudioProcessor() == "speex") {
 #if HAVE_SPEEXDSP
@@ -218,27 +218,29 @@ AudioLayer::createAudioProcessor()
         audioProcessor.reset(new SpeexAudioProcessor(formatForProcessor, frame_size));
 #else
         JAMI_ERR("[audiolayer] audioProcessor preference is speex, but library not linked! "
-                 "using NullAudioProcessor instead");
-        audioProcessor.reset(new NullAudioProcessor(formatForProcessor, frame_size));
+                 "using null AudioProcessor instead");
+        audioProcessor.reset();
 #endif
     } else if (pref_.getAudioProcessor() == "null") {
-        JAMI_WARN("[audiolayer] using NullAudioProcessor");
-        audioProcessor.reset(new NullAudioProcessor(formatForProcessor, frame_size));
+        JAMI_WARN("[audiolayer] using null AudioProcessor");
+        audioProcessor.reset();
     } else {
-        JAMI_ERR("[audiolayer] audioProcessor preference not recognized, using NullAudioProcessor "
+        JAMI_ERR("[audiolayer] audioProcessor preference not recognized, using null AudioProcessor "
                  "instead");
-        audioProcessor.reset(new NullAudioProcessor(formatForProcessor, frame_size));
+        audioProcessor.reset();
     }
 
-    audioProcessor->enableNoiseSuppression(
-        shouldUseAudioProcessorNoiseSuppression(hasNativeNS_, pref_.getNoiseReduce()));
+    if (audioProcessor) {
+        audioProcessor->enableNoiseSuppression(
+            shouldUseAudioProcessorNoiseSuppression(hasNativeNS_, pref_.getNoiseReduce()));
 
-    audioProcessor->enableAutomaticGainControl(pref_.isAGCEnabled());
+        audioProcessor->enableAutomaticGainControl(pref_.isAGCEnabled());
 
-    audioProcessor->enableEchoCancel(
-        shouldUseAudioProcessorEchoCancel(hasNativeAEC_, pref_.getEchoCanceller()));
+        audioProcessor->enableEchoCancel(
+            shouldUseAudioProcessorEchoCancel(hasNativeAEC_, pref_.getEchoCanceller()));
 
-    audioProcessor->enableVoiceActivityDetection(pref_.getVadEnabled());
+        audioProcessor->enableVoiceActivityDetection(pref_.getVadEnabled());
+    }
 }
 
 // must acquire lock beforehand
@@ -351,7 +353,6 @@ AudioLayer::putRecorded(std::shared_ptr<AudioFrame>&& frame)
         while (auto rec = audioProcessor->getProcessed()) {
             mainRingBuffer_->put(std::move(rec));
         }
-
     } else {
         mainRingBuffer_->put(std::move(frame));
     }
-- 
GitLab