Blend MMAP streams for accessibility
There is an accessibility feature called Mono audio. This feature
allows stereo audio to be blended into mono audio.
Currently, this feature works perfectly in most scenarios. However,
this feature is not used when MMAP is enabled. This cl fixes MMAP
scenarios.
Bug: 69635707
Test: Tested on Bramble and MMAP through the following six scenarios:
1. MMAP Exclusive Mono Audio Enabled
2. MMAP Shared Mono Audio Enabled
3. No MMAP Mono Audio Enabled
4. MMAP Exclusive Mono Audio Disabled
5. MMAP Shared Mono Audio Disabled
6. No MMAP Mono Audio Disabled
You can enable Mono Audio from Settings -> Accessibility -> Audio
adjustment -> Mono audio
With OboeTester playing a different frequency on each ear, this seems
to work as expected.
atest test_flowgraph
Change-Id: I2688f06cc8c6ef0f2965845e65e2582f3cc9788e
diff --git a/media/libaaudio/src/client/AAudioFlowGraph.cpp b/media/libaaudio/src/client/AAudioFlowGraph.cpp
index 68b84c8..d3e2912 100644
--- a/media/libaaudio/src/client/AAudioFlowGraph.cpp
+++ b/media/libaaudio/src/client/AAudioFlowGraph.cpp
@@ -21,6 +21,7 @@
#include "AAudioFlowGraph.h"
#include <flowgraph/ClipToRange.h>
+#include <flowgraph/MonoBlend.h>
#include <flowgraph/MonoToMultiConverter.h>
#include <flowgraph/RampLinear.h>
#include <flowgraph/SinkFloat.h>
@@ -37,7 +38,8 @@
aaudio_result_t AAudioFlowGraph::configure(audio_format_t sourceFormat,
int32_t sourceChannelCount,
audio_format_t sinkFormat,
- int32_t sinkChannelCount) {
+ int32_t sinkChannelCount,
+ bool useMonoBlend) {
FlowGraphPortFloatOutput *lastOutput = nullptr;
// TODO change back to ALOGD
@@ -76,6 +78,12 @@
lastOutput = &mClipper->output;
}
+ if (useMonoBlend) {
+ mMonoBlend = std::make_unique<MonoBlend>(sourceChannelCount);
+ lastOutput->connect(&mMonoBlend->input);
+ lastOutput = &mMonoBlend->output;
+ }
+
// Expand the number of channels if required.
if (sourceChannelCount == 1 && sinkChannelCount > 1) {
mChannelConverter = std::make_unique<MonoToMultiConverter>(sinkChannelCount);