aaudio: factor the format converstion function
Factor the foramt conversion function into a utility function
Bug: 65067568
Bug: 186892145
Test: OboeTester
Test: atest AAudioTests
Change-Id: I3b5566ae77881638e26915fad168c2e5f675cfcf
diff --git a/media/libaaudio/src/client/AudioStreamInternalCapture.cpp b/media/libaaudio/src/client/AudioStreamInternalCapture.cpp
index f4a40a8..2da5406 100644
--- a/media/libaaudio/src/client/AudioStreamInternalCapture.cpp
+++ b/media/libaaudio/src/client/AudioStreamInternalCapture.cpp
@@ -18,7 +18,7 @@
#include <utils/Log.h>
#include <algorithm>
-#include <audio_utils/primitives.h>
+#include <audio_utils/format.h>
#include <aaudio/AAudio.h>
#include <media/MediaMetricsItem.h>
@@ -190,26 +190,10 @@
const audio_format_t sourceFormat = getDeviceFormat();
const audio_format_t destinationFormat = getFormat();
- // TODO factor this out into a utility function
- if (sourceFormat == destinationFormat) {
- memcpy(destination, wrappingBuffer.data[partIndex], numBytes);
- } else if (sourceFormat == AUDIO_FORMAT_PCM_16_BIT
- && destinationFormat == AUDIO_FORMAT_PCM_FLOAT) {
- memcpy_to_float_from_i16(
- (float *) destination,
- (const int16_t *) wrappingBuffer.data[partIndex],
- numSamples);
- } else if (sourceFormat == AUDIO_FORMAT_PCM_FLOAT
- && destinationFormat == AUDIO_FORMAT_PCM_16_BIT) {
- memcpy_to_i16_from_float(
- (int16_t *) destination,
- (const float *) wrappingBuffer.data[partIndex],
- numSamples);
- } else {
- ALOGE("%s() - Format conversion not supported! audio_format_t source = %u, dest = %u",
- __func__, sourceFormat, destinationFormat);
- return AAUDIO_ERROR_INVALID_FORMAT;
- }
+
+ memcpy_by_audio_format(destination, destinationFormat,
+ wrappingBuffer.data[partIndex], sourceFormat, numSamples);
+
destination += numBytes;
framesLeft -= framesToProcess;
}