aaudio: use new flowgraph to simplify processing
Construct a flowgraph based on the source and destination
format and channelCount. This is groundwork for supporting 24-bit
PCM formats.
Also cleaned up handling of device related format.
This CL removes more code than it adds.
Bug: 65067568
Test: write_sine_callback.cpp -pl
Test: write_sine_callback.cpp -pl -x
Test: input_monitor -pl
Test: input_monitor -pl -x
Change-Id: Ia155bff0164912011d09b61b54f983ccf4490bd1
diff --git a/media/libaaudio/src/legacy/AudioStreamLegacy.h b/media/libaaudio/src/legacy/AudioStreamLegacy.h
index 494edbc..8e78554 100644
--- a/media/libaaudio/src/legacy/AudioStreamLegacy.h
+++ b/media/libaaudio/src/legacy/AudioStreamLegacy.h
@@ -77,7 +77,6 @@
virtual int64_t incrementClientFrameCounter(int32_t frames) = 0;
-
virtual int64_t getFramesWritten() override {
return mFramesWritten.get();
}
diff --git a/media/libaaudio/src/legacy/AudioStreamRecord.cpp b/media/libaaudio/src/legacy/AudioStreamRecord.cpp
index 505f2ee..dbf00a9 100644
--- a/media/libaaudio/src/legacy/AudioStreamRecord.cpp
+++ b/media/libaaudio/src/legacy/AudioStreamRecord.cpp
@@ -81,8 +81,8 @@
}
// Preserve behavior of API 26
- if (getFormat() == AAUDIO_FORMAT_UNSPECIFIED) {
- setFormat(AAUDIO_FORMAT_PCM_FLOAT);
+ if (getFormat() == AUDIO_FORMAT_DEFAULT) {
+ setFormat(AUDIO_FORMAT_PCM_FLOAT);
}
// Maybe change device format to get a FAST path.
@@ -99,12 +99,12 @@
// We just may not get a FAST track.
// But we wouldn't have anyway without this hack.
constexpr int32_t kMostLikelySampleRateForFast = 48000;
- if (getFormat() == AAUDIO_FORMAT_PCM_FLOAT
+ if (getFormat() == AUDIO_FORMAT_PCM_FLOAT
&& perfMode == AAUDIO_PERFORMANCE_MODE_LOW_LATENCY
&& (samplesPerFrame <= 2) // FAST only for mono and stereo
&& (getSampleRate() == kMostLikelySampleRateForFast
|| getSampleRate() == AAUDIO_UNSPECIFIED)) {
- setDeviceFormat(AAUDIO_FORMAT_PCM_I16);
+ setDeviceFormat(AUDIO_FORMAT_PCM_16_BIT);
} else {
setDeviceFormat(getFormat());
}
@@ -147,8 +147,7 @@
// ----------- open the AudioRecord ---------------------
// Might retry, but never more than once.
for (int i = 0; i < 2; i ++) {
- audio_format_t requestedInternalFormat =
- AAudioConvert_aaudioToAndroidDataFormat(getDeviceFormat());
+ const audio_format_t requestedInternalFormat = getDeviceFormat();
mAudioRecord = new AudioRecord(
mOpPackageName // const String16& opPackageName TODO does not compile
@@ -214,8 +213,8 @@
}
// Allocate format conversion buffer if needed.
- if (getDeviceFormat() == AAUDIO_FORMAT_PCM_I16
- && getFormat() == AAUDIO_FORMAT_PCM_FLOAT) {
+ if (getDeviceFormat() == AUDIO_FORMAT_PCM_16_BIT
+ && getFormat() == AUDIO_FORMAT_PCM_FLOAT) {
if (builder.getDataCallbackProc() != nullptr) {
// If we have a callback then we need to convert the data into an internal float
diff --git a/media/libaaudio/src/legacy/AudioStreamTrack.cpp b/media/libaaudio/src/legacy/AudioStreamTrack.cpp
index 505cd77..1572f0d 100644
--- a/media/libaaudio/src/legacy/AudioStreamTrack.cpp
+++ b/media/libaaudio/src/legacy/AudioStreamTrack.cpp
@@ -88,9 +88,9 @@
int32_t notificationFrames = 0;
- audio_format_t format = (getFormat() == AAUDIO_FORMAT_UNSPECIFIED)
+ const audio_format_t format = (getFormat() == AUDIO_FORMAT_DEFAULT)
? AUDIO_FORMAT_PCM_FLOAT
- : AAudioConvert_aaudioToAndroidDataFormat(getFormat());
+ : getFormat();
// Setup the callback if there is one.
AudioTrack::callback_t callback = nullptr;
@@ -178,10 +178,8 @@
// Get the actual values from the AudioTrack.
setSamplesPerFrame(mAudioTrack->channelCount());
- aaudio_format_t aaudioFormat =
- AAudioConvert_androidToAAudioDataFormat(mAudioTrack->format());
- setFormat(aaudioFormat);
- setDeviceFormat(aaudioFormat);
+ setFormat(mAudioTrack->format());
+ setDeviceFormat(mAudioTrack->format());
int32_t actualSampleRate = mAudioTrack->getSampleRate();
ALOGW_IF(actualSampleRate != getSampleRate(),