aaudio: add support for 24 and 32 bit PCM

Add new formats: AAUDIO_FORMAT_PCM_I24_PACKED
and AAUDIO_FORMAT_PCM_I32.

Pass formats to Legacy AudioTrack and AuddioRecord.

Request 24_PACKED in AAudio Service for MMAP streams.
Also add a flowgraph module for converting the I32 data
to/from FLOAT.

Bug:  65067568
Bug: 157671580

Test: To determine which format the MMAP path is using for the DSP,
Test: adb shell dumpsys media.aaudio
Test: then look for the "Exclusive MMAP Endpoints" and "Format:".
Test: The formats listed are the internal AudioFlinger formats:
Test:    1=16_BIT, 3=32_BIT, 4=8_24_BIT, 5=FLOAT, 6=24_BIT_PACKED

Test: atest AAudioTestCases
Test: adb shell write_sine_callback -? # to list new formats
Test: adb shell write_sine_callback -pl -f3 # MMAP LOWLAT I24_PACKED
Test: adb shell write_sine_callback -pl -f4 # MMAP LOWLAT I32
Test: # Legacy LOWLAT I24_PACKED
Test: adb shell write_sine_callback -pl -f3 -m1
Test: adb shell write_sine_callback -pl -f4 -m1 # Legacy LOWLAT I32
Test: adb shell write_sine_callback -pn -f3 # Legacy I24_PACKED
Test: adb shell write_sine_callback -pn -f4 # Legacy I32
Change-Id: Ibe13bfd54425d110f50f89eb10c63872a2f99839
diff --git a/media/libaaudio/src/client/AAudioFlowGraph.cpp b/media/libaaudio/src/client/AAudioFlowGraph.cpp
index 8f2c488..61b50f3 100644
--- a/media/libaaudio/src/client/AAudioFlowGraph.cpp
+++ b/media/libaaudio/src/client/AAudioFlowGraph.cpp
@@ -26,9 +26,11 @@
 #include <flowgraph/SinkFloat.h>
 #include <flowgraph/SinkI16.h>
 #include <flowgraph/SinkI24.h>
+#include <flowgraph/SinkI32.h>
 #include <flowgraph/SourceFloat.h>
 #include <flowgraph/SourceI16.h>
 #include <flowgraph/SourceI24.h>
+#include <flowgraph/SourceI32.h>
 
 using namespace flowgraph;
 
@@ -38,7 +40,8 @@
                           int32_t sinkChannelCount) {
     AudioFloatOutputPort *lastOutput = nullptr;
 
-    ALOGV("%s() source format = 0x%08x, channels = %d, sink format = 0x%08x, channels = %d",
+    // TODO change back to ALOGD
+    ALOGI("%s() source format = 0x%08x, channels = %d, sink format = 0x%08x, channels = %d",
           __func__, sourceFormat, sourceChannelCount, sinkFormat, sinkChannelCount);
 
     switch (sourceFormat) {
@@ -51,7 +54,10 @@
         case AUDIO_FORMAT_PCM_24_BIT_PACKED:
             mSource = std::make_unique<SourceI24>(sourceChannelCount);
             break;
-        default: // TODO add I32
+        case AUDIO_FORMAT_PCM_32_BIT:
+            mSource = std::make_unique<SourceI32>(sourceChannelCount);
+            break;
+        default:
             ALOGE("%s() Unsupported source format = %d", __func__, sourceFormat);
             return AAUDIO_ERROR_UNIMPLEMENTED;
     }
@@ -90,7 +96,10 @@
         case AUDIO_FORMAT_PCM_24_BIT_PACKED:
             mSink = std::make_unique<SinkI24>(sinkChannelCount);
             break;
-        default: // TODO add I32
+        case AUDIO_FORMAT_PCM_32_BIT:
+            mSink = std::make_unique<SinkI32>(sinkChannelCount);
+            break;
+        default:
             ALOGE("%s() Unsupported sink format = %d", __func__, sinkFormat);
             return AAUDIO_ERROR_UNIMPLEMENTED;
     }