summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGlenn Kasten <gkasten@google.com>2016-07-12 17:20:26 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2016-07-12 17:20:26 +0000
commit712aefac45dc9eaf8bc9536b63c48ca4d31fe9aa (patch)
tree0d2c219623eae4b7724d91cb0d7bd2d1ffeb887e
parent9f212e587dda647540fe4df68ffc7e05c7e1e599 (diff)
parentbad0898a944d6a7886b4ab8ca8e0157885d9aadf (diff)
downloadandroid_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.c9
-rw-r--r--audio_utils/tests/primitives_tests.cpp33
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