diff options
author | Glenn Kasten <gkasten@google.com> | 2016-07-12 17:20:26 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2016-07-12 17:20:26 +0000 |
commit | 712aefac45dc9eaf8bc9536b63c48ca4d31fe9aa (patch) | |
tree | 0d2c219623eae4b7724d91cb0d7bd2d1ffeb887e | |
parent | 9f212e587dda647540fe4df68ffc7e05c7e1e599 (diff) | |
parent | bad0898a944d6a7886b4ab8ca8e0157885d9aadf (diff) | |
download | android_system_media-712aefac45dc9eaf8bc9536b63c48ca4d31fe9aa.tar.gz android_system_media-712aefac45dc9eaf8bc9536b63c48ca4d31fe9aa.tar.bz2 android_system_media-712aefac45dc9eaf8bc9536b63c48ca4d31fe9aa.zip |
Merge "audio_utils: Support more format conversions" into nyc-mr1-dev
-rw-r--r-- | audio_utils/format.c | 9 | ||||
-rw-r--r-- | audio_utils/tests/primitives_tests.cpp | 33 |
2 files changed, 42 insertions, 0 deletions
diff --git a/audio_utils/format.c b/audio_utils/format.c index 66b0a6db..3eda4849 100644 --- a/audio_utils/format.c +++ b/audio_utils/format.c @@ -102,6 +102,12 @@ void memcpy_by_audio_format(void *dst, audio_format_t dst_format, case AUDIO_FORMAT_PCM_FLOAT: memcpy_to_p24_from_float((uint8_t*)dst, (float*)src, count); return; + case AUDIO_FORMAT_PCM_32_BIT: + memcpy_to_p24_from_i32((uint8_t*)dst, (int32_t*)src, count); + return; + case AUDIO_FORMAT_PCM_8_24_BIT: + memcpy_to_p24_from_q8_23((uint8_t*)dst, (int32_t*)src, count); + return; default: break; } @@ -114,6 +120,9 @@ void memcpy_by_audio_format(void *dst, audio_format_t dst_format, case AUDIO_FORMAT_PCM_FLOAT: memcpy_to_i32_from_float((int32_t*)dst, (float*)src, count); return; + case AUDIO_FORMAT_PCM_24_BIT_PACKED: + memcpy_to_i32_from_p24((int32_t*)dst, (uint8_t *)src, count); + return; default: break; } diff --git a/audio_utils/tests/primitives_tests.cpp b/audio_utils/tests/primitives_tests.cpp index 5b3cd2d7..178490b4 100644 --- a/audio_utils/tests/primitives_tests.cpp +++ b/audio_utils/tests/primitives_tests.cpp @@ -103,6 +103,14 @@ void checkMonotone(const T *ary, size_t size) } } +void checkMonotonep24(uint8_t * pary, size_t size) +{ + size_t frames = size/3; + for (size_t i = 1; i < frames; ++i) { + EXPECT_LT(i32_from_p24(pary + 3*(i-1)), i32_from_p24(pary + 3*i)); + } +} + TEST(audio_utils_primitives, clamp_to_int) { static const float testArray[] = { -NAN, -INFINITY, @@ -256,6 +264,31 @@ TEST(audio_utils_primitives, memcpy) { memset(i32ary, 0, 65536 * sizeof(i32ary[0])); checkMonotone(i16ary, 65536); + // do round-trip test i16 -> p24 -> i32 -> p24 -> q8_23 -> p24 -> i16 + memcpy_to_p24_from_i16(pary, i16ary, 65536); + memset(i16ary, 0, 65536 * sizeof(i16ary[0])); + checkMonotonep24(pary, 65536 * 3); + + memcpy_to_i32_from_p24(i32ary, pary, 65536); + memset(pary, 0, 65536 * 3 * sizeof(pary[0])); + checkMonotone(i32ary, 65536); + + memcpy_to_p24_from_i32(pary, i32ary, 65536); + memset(i32ary, 0, 65536 * sizeof(i32ary[0])); + checkMonotonep24(pary, 65536 * 3); + + memcpy_to_q8_23_from_p24(i32ary, pary, 65536); + memset(pary, 0, 65536 * 3 * sizeof(pary[0])); + checkMonotone(i32ary, 65536); + + memcpy_to_p24_from_q8_23(pary, i32ary, 65536); + memset(i32ary, 0, 65536 * sizeof(i32ary[0])); + checkMonotonep24(pary, 65536 * 3); + + memcpy_to_i16_from_p24(i16ary, pary, 65536); + memset(pary, 0, 65536 * 3 * sizeof(pary[0])); + checkMonotone(i16ary, 65536); + // do partial round-trip testing q4_27 to i16 and float memcpy_to_float_from_i16(fary, i16ary, 65536); //memset(i16ary, 0, 65536 * sizeof(i16ary[0])); // not cleared: we don't do full roundtrip |