Send runtime settings to the Audio Processing Module (APM)

This CL includes the following changes:
- APM runtime setting (ID + float payload) and unit tests
- Swap queue of APM runtime settings used in AudioProcessingImpl
- runtime settings handler that forwards the settings to APM
  sub-modules when a message is retrieved from the queue
- Unit test placeholder to check that the pre-gain update message
  is correctly delivered

Bug: webrtc:9138
Change-Id: Id22704af15fde2b87a4431f5ce64ad1aeafc5280
Reviewed-on: https://webrtc-review.googlesource.com/69320
Reviewed-by: Per Åhgren <peah@webrtc.org>
Reviewed-by: Alex Loiko <aleloi@webrtc.org>
Commit-Queue: Alessio Bazzica <alessiob@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22873}
This commit is contained in:
Alessio Bazzica
2018-04-16 12:10:09 +02:00
committed by Commit Bot
parent 5b07c24056
commit c054e78f4e
6 changed files with 131 additions and 0 deletions

View File

@ -66,6 +66,8 @@ class AudioProcessingImpl : public AudioProcessing {
std::unique_ptr<AudioGenerator> audio_generator) override;
void DetachPlayoutAudioGenerator() override;
void SetRuntimeSetting(RuntimeSetting setting) override;
// Capture-side exclusive methods possibly running APM in a
// multi-threaded manner. Acquire the capture lock.
int ProcessStream(AudioFrame* frame) override;
@ -149,6 +151,21 @@ class AudioProcessingImpl : public AudioProcessing {
std::unique_ptr<ApmDataDumper> data_dumper_;
static int instance_count_;
std::unique_ptr<SwapQueue<RuntimeSetting>> runtime_settings_;
// Class providing thread-safe message pipe functionality for
// |runtime_settings_|.
class RuntimeSettingEnqueuer {
public:
explicit RuntimeSettingEnqueuer(
SwapQueue<RuntimeSetting>* runtime_settings);
~RuntimeSettingEnqueuer();
void Enqueue(RuntimeSetting setting);
private:
SwapQueue<RuntimeSetting>* runtime_settings_;
} runtime_settings_enqueuer_;
// Submodule interface implementations.
std::unique_ptr<HighPassFilter> high_pass_filter_impl_;
@ -239,6 +256,9 @@ class AudioProcessingImpl : public AudioProcessing {
void InitializePostProcessor() RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_);
void InitializePreProcessor() RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_render_);
// Handle all the runtime settings in the queue.
void HandleRuntimeSettings() RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_capture_);
void EmptyQueuedRenderAudio();
void AllocateRenderQueue()
RTC_EXCLUSIVE_LOCKS_REQUIRED(crit_render_, crit_capture_);