From c323fec2a2639c0cf7463016d592d0eb0539657c Mon Sep 17 00:00:00 2001 From: Andy Hung Date: Fri, 23 May 2014 16:24:25 -0700 Subject: Add 24 bit and 32 bit playback capability to OpenSL ES slesTest_playbq is the test application. Change-Id: Iaa453471d2e9ff4e6b11ac5c68690993179fea2b --- src/android/AudioPlayer_to_android.cpp | 4 +++- src/android/android_sles_conversions.h | 38 +++++++++++++++++----------------- src/data.c | 2 +- 3 files changed, 23 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/android/AudioPlayer_to_android.cpp b/src/android/AudioPlayer_to_android.cpp index 356d38b..33140b8 100644 --- a/src/android/AudioPlayer_to_android.cpp +++ b/src/android/AudioPlayer_to_android.cpp @@ -972,6 +972,7 @@ SLresult android_audioPlayer_checkSourceSink(CAudioPlayer *pAudioPlayer) case SL_PCMSAMPLEFORMAT_FIXED_8: case SL_PCMSAMPLEFORMAT_FIXED_16: case SL_PCMSAMPLEFORMAT_FIXED_24: + case SL_PCMSAMPLEFORMAT_FIXED_32: break; // others default: @@ -984,6 +985,7 @@ SLresult android_audioPlayer_checkSourceSink(CAudioPlayer *pAudioPlayer) case 8: case 16: case 24: + case 32: break; // others default: @@ -1489,7 +1491,7 @@ SLresult android_audioPlayer_realize(CAudioPlayer *pAudioPlayer, SLboolean async pAudioPlayer->mAudioTrack = new android::AudioTrack( pAudioPlayer->mStreamType, // streamType sampleRate, // sampleRate - sles_to_android_sampleFormat(df_pcm->bitsPerSample), // format + sles_to_android_sampleFormat(df_pcm->formatType, df_pcm->containerSize), // format sles_to_android_channelMaskOut(df_pcm->numChannels, df_pcm->channelMask), // channel mask 0, // frameCount diff --git a/src/android/android_sles_conversions.h b/src/android/android_sles_conversions.h index 6e53ac9..27552b4 100644 --- a/src/android/android_sles_conversions.h +++ b/src/android/android_sles_conversions.h @@ -44,25 +44,25 @@ static inline uint32_t sles_to_android_sampleRate(SLuint32 sampleRateMilliHertz) return (uint32_t)(sampleRateMilliHertz / 1000); } -static inline audio_format_t sles_to_android_sampleFormat(SLuint32 pcmFormat) { - switch (pcmFormat) { - case SL_PCMSAMPLEFORMAT_FIXED_16: - return AUDIO_FORMAT_PCM_16_BIT; - break; - case SL_PCMSAMPLEFORMAT_FIXED_8: - return AUDIO_FORMAT_PCM_8_BIT; - break; - case SL_PCMSAMPLEFORMAT_FIXED_24: - return AUDIO_FORMAT_PCM_8_24_BIT; - // Maybe one of these??? - // return AUDIO_FORMAT_PCM_32_BIT; - // return AUDIO_FORMAT_PCM_24_BIT_PACKED; - break; - case SL_PCMSAMPLEFORMAT_FIXED_20: - case SL_PCMSAMPLEFORMAT_FIXED_28: - case SL_PCMSAMPLEFORMAT_FIXED_32: - default: - return AUDIO_FORMAT_INVALID; +static inline audio_format_t sles_to_android_sampleFormat(SLuint32 formatType, + SLuint32 containerSize) { + switch (formatType) { + case SL_DATAFORMAT_PCM: + switch (containerSize) { + case 8: + return AUDIO_FORMAT_PCM_8_BIT; + case 16: + return AUDIO_FORMAT_PCM_16_BIT; + case 24: + return AUDIO_FORMAT_PCM_24_BIT_PACKED; + case 32: + return AUDIO_FORMAT_PCM_32_BIT; + default: + return AUDIO_FORMAT_INVALID; + } + break; + default: + return AUDIO_FORMAT_INVALID; } } diff --git a/src/data.c b/src/data.c index 4b25632..f840885 100644 --- a/src/data.c +++ b/src/data.c @@ -412,10 +412,10 @@ static SLresult checkDataFormat(const char *name, void *pFormat, DataFormat *pDa case SL_PCMSAMPLEFORMAT_FIXED_8: case SL_PCMSAMPLEFORMAT_FIXED_16: case SL_PCMSAMPLEFORMAT_FIXED_24: + case SL_PCMSAMPLEFORMAT_FIXED_32: break; case SL_PCMSAMPLEFORMAT_FIXED_20: case SL_PCMSAMPLEFORMAT_FIXED_28: - case SL_PCMSAMPLEFORMAT_FIXED_32: result = SL_RESULT_CONTENT_UNSUPPORTED; break; default: -- cgit v1.2.3