summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPreetam Singh Ranawat <apranawat@codeaurora.org>2015-06-16 13:50:23 -0700
committerLinux Build Service Account <lnxbuild@localhost>2015-10-06 03:29:20 -0600
commit5b1bb565e6d8c1382451ce7e9b4bb334409f3a4e (patch)
treec1c2f4776c7c5dd84a084e8b4bac95501f99ebc4
parente11da84383c28a878264e048a998871542540c9f (diff)
downloadandroid_system_media-5b1bb565e6d8c1382451ce7e9b4bb334409f3a4e.tar.gz
android_system_media-5b1bb565e6d8c1382451ce7e9b4bb334409f3a4e.tar.bz2
android_system_media-5b1bb565e6d8c1382451ce7e9b4bb334409f3a4e.zip
audio_utils: Support more format conversions
Support conversion from 24 bit packed PCM to 8_24 bit padded pcm. Support conversion from 8_24 bit and packed 24 bit to 24 bit offload. Change-Id: I09762c4ef4b85fe3c1a74d808f517c659b6d75f4 CRs-Fixed: 809383
-rw-r--r--audio_utils/format.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/audio_utils/format.c b/audio_utils/format.c
index 66b0a6db..ac89f038 100644
--- a/audio_utils/format.c
+++ b/audio_utils/format.c
@@ -134,6 +134,32 @@ void memcpy_by_audio_format(void *dst, audio_format_t dst_format,
break;
}
break;
+ case AUDIO_FORMAT_PCM_24_BIT_OFFLOAD: {
+ // pcm 24 bit with padding at LSB
+ // can assume LE?
+ size_t i;
+ uint8_t * src_ptr = (uint8_t *)src;
+ int32_t * dst_ptr = (int32_t *)dst;
+ switch (src_format) {
+ case AUDIO_FORMAT_PCM_24_BIT_PACKED: {
+ for (i = 0; i < count; i++) {
+ *dst_ptr++ = (int8_t)src_ptr[2] << 24 | src_ptr[1] << 16 | src_ptr[0] << 8;
+ src_ptr += 3;
+ }
+ return;
+ }
+ case AUDIO_FORMAT_PCM_8_24_BIT: { // padding is at MSB
+ for (i = 0; i < count; i++) {
+ *dst_ptr++ = (int8_t)src_ptr[2] << 24 | src_ptr[1] << 16 | src_ptr[0] << 8;
+ src_ptr += 4;
+ }
+ return;
+ }
+ default:
+ break;
+ }
+ break;
+ }
default:
break;
}