diff options
author | Preetam Singh Ranawat <apranawat@codeaurora.org> | 2015-06-16 13:50:23 -0700 |
---|---|---|
committer | Linux Build Service Account <lnxbuild@localhost> | 2015-10-06 03:29:20 -0600 |
commit | 5b1bb565e6d8c1382451ce7e9b4bb334409f3a4e (patch) | |
tree | c1c2f4776c7c5dd84a084e8b4bac95501f99ebc4 | |
parent | e11da84383c28a878264e048a998871542540c9f (diff) | |
download | android_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.c | 26 |
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; } |