From: Seungbae Shin Date: Mon, 4 Jun 2018 10:03:44 +0000 (+0900) Subject: Support 24bit sample format and up-to 192kHz sample rate X-Git-Tag: submit/tizen/20180810.072258^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3834fdd8f85758a071e619677f903d478edf15aa;p=platform%2Fcore%2Fapi%2Faudio-io.git Support 24bit sample format and up-to 192kHz sample rate [Version] 0.5.9 [Issue Type] Enhancement Change-Id: I1f5dafa187781e60041ce6667cdc66c156466076 --- diff --git a/include/CAudioInfo.h b/include/CAudioInfo.h index 5f3fb13..8c674aa 100644 --- a/include/CAudioInfo.h +++ b/include/CAudioInfo.h @@ -43,6 +43,8 @@ namespace tizen_media_audio { enum class ESampleType : unsigned int { SAMPLE_TYPE_U8 = 1, /**< Unsigned 8-bit audio samples */ SAMPLE_TYPE_S16_LE, /**< Signed 16-bit audio samples */ + SAMPLE_TYPE_S24_LE, /**< Signed 24-bit audio samples */ + SAMPLE_TYPE_S24_32_LE, /**< Signed 24-bit packed in 32-bit audio samples */ SAMPLE_TYPE_MAX }; @@ -101,7 +103,7 @@ namespace tizen_media_audio { }; const static unsigned int MIN_SYSTEM_SAMPLERATE = 8000; - const static unsigned int MAX_SYSTEM_SAMPLERATE = 48000; + const static unsigned int MAX_SYSTEM_SAMPLERATE = 192000; /* Constructors */ CAudioInfo(); diff --git a/include/audio_io.h b/include/audio_io.h index 92b2573..85ea8cb 100644 --- a/include/audio_io.h +++ b/include/audio_io.h @@ -72,6 +72,8 @@ typedef struct audio_io_s *audio_out_h; typedef enum { AUDIO_SAMPLE_TYPE_U8 = 0x70, /**< Unsigned 8-bit audio samples */ AUDIO_SAMPLE_TYPE_S16_LE, /**< Signed 16-bit audio samples */ + AUDIO_SAMPLE_TYPE_S24_LE, /**< Signed 24-bit audio samples (Since 5.0) */ + AUDIO_SAMPLE_TYPE_S24_32_LE, /**< Signed 24-bit (packed in 32-bit) audio samples (Since 5.0) */ } audio_sample_type_e; /** @@ -164,7 +166,7 @@ typedef void (*audio_in_state_changed_cb)(audio_in_h handle, audio_io_state_e pr * * @remarks @a input must be released using audio_in_destroy(). * - * @param[in] sample_rate The audio sample rate in 8000[Hz] ~ 48000[Hz] + * @param[in] sample_rate The audio sample rate in 8000[Hz] ~ 48000[Hz] (Before 5.0), 8000[Hz] ~ 192000[Hz] (Since 5.0) * @param[in] channel The audio channel type (mono or stereo) * @param[in] type The type of audio sample (8- or 16-bit) * @param[out] input An audio input handle is created on success @@ -362,7 +364,7 @@ int audio_in_get_buffer_size(audio_in_h input, int *size); * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif * * @param[in] input The handle to the audio input - * @param[out] sample_rate The audio sample rate in Hertz (8000 ~ 48000) + * @param[out] sample_rate The audio sample rate in Hertz (8000 ~ 48000) (Before 5.0), (8000 ~ 192000) (Since 5.0) * @return @c 0 on success, * otherwise a negative error value * @retval #AUDIO_IO_ERROR_NONE Successful @@ -581,7 +583,7 @@ typedef void (*audio_out_state_changed_cb)(audio_out_h handle, audio_io_state_e * @remarks @a output must be released by audio_out_destroy(). * It is recommended to call audio_out_set_sound_stream_info() after this API. * - * @param[in] sample_rate The audio sample rate in 8000[Hz] ~ 48000[Hz] + * @param[in] sample_rate The audio sample rate in 8000[Hz] ~ 48000[Hz] (Before 5.0), 8000[Hz] ~ 192000[Hz] (Since 5.0) * @param[in] channel The audio channel type (mono or stereo) * @param[in] type The type of audio sample (8-bit or 16-bit) * @param[out] output An audio output handle is created on success @@ -790,7 +792,7 @@ int audio_out_get_buffer_size(audio_out_h output, int *size); * @since_tizen @if MOBILE 2.3 @elseif WEARABLE 2.3.1 @endif * * @param[in] output The handle to the audio output - * @param[out] sample_rate The audio sample rate in Hertz (8000 ~ 48000) + * @param[out] sample_rate The audio sample rate in Hertz (8000 ~ 48000) (Before 5.0), (8000 ~ 192000) (Since 5.0) * @return @c 0 on success, * otherwise a negative error value * @retval #AUDIO_IO_ERROR_NONE Successful diff --git a/packaging/capi-media-audio-io.spec b/packaging/capi-media-audio-io.spec index 18656f6..baec8b5 100644 --- a/packaging/capi-media-audio-io.spec +++ b/packaging/capi-media-audio-io.spec @@ -1,6 +1,6 @@ Name: capi-media-audio-io Summary: An Audio Input & Audio Output library in Tizen Native API -Version: 0.5.8 +Version: 0.5.9 Release: 0 Group: Multimedia/API License: Apache-2.0 diff --git a/src/cpp/CAudioInfo.cpp b/src/cpp/CAudioInfo.cpp index 503a1c5..c02f0f4 100644 --- a/src/cpp/CAudioInfo.cpp +++ b/src/cpp/CAudioInfo.cpp @@ -99,6 +99,12 @@ int CAudioInfo::getSampleSize() { case ESampleType::SAMPLE_TYPE_S16_LE: bytes_in_sample = 2; break; + case ESampleType::SAMPLE_TYPE_S24_LE: + bytes_in_sample = 3; + break; + case ESampleType::SAMPLE_TYPE_S24_32_LE: + bytes_in_sample = 4; + break; default: AUDIO_IO_LOGW("As unrecognized sample type %d, let's assume S16_LE", static_cast(__mSampleType)); bytes_in_sample = 2; diff --git a/src/cpp/CPulseStreamSpec.cpp b/src/cpp/CPulseStreamSpec.cpp index 380935f..92dc4c8 100644 --- a/src/cpp/CPulseStreamSpec.cpp +++ b/src/cpp/CPulseStreamSpec.cpp @@ -89,6 +89,17 @@ void CPulseStreamSpec::__adjustSpec() { break; case CAudioInfo::ESampleType::SAMPLE_TYPE_S16_LE: + __mSampleSpec.format = PA_SAMPLE_S16LE; + break; + + case CAudioInfo::ESampleType::SAMPLE_TYPE_S24_LE: + __mSampleSpec.format = PA_SAMPLE_S24LE; + break; + + case CAudioInfo::ESampleType::SAMPLE_TYPE_S24_32_LE: + __mSampleSpec.format = PA_SAMPLE_S24_32LE; + break; + default: __mSampleSpec.format = PA_SAMPLE_S16LE; break; diff --git a/src/cpp/cpp_audio_io.cpp b/src/cpp/cpp_audio_io.cpp index 461291b..8df8dde 100644 --- a/src/cpp/cpp_audio_io.cpp +++ b/src/cpp/cpp_audio_io.cpp @@ -174,6 +174,12 @@ static void __convert_sample_type_2_audio_info_sample_type(const audio_sample_ty case AUDIO_SAMPLE_TYPE_S16_LE: dst_type = CAudioInfo::ESampleType::SAMPLE_TYPE_S16_LE; break; + case AUDIO_SAMPLE_TYPE_S24_LE: + dst_type = CAudioInfo::ESampleType::SAMPLE_TYPE_S24_LE; + break; + case AUDIO_SAMPLE_TYPE_S24_32_LE: + dst_type = CAudioInfo::ESampleType::SAMPLE_TYPE_S24_32_LE; + break; default: dst_type = CAudioInfo::ESampleType::SAMPLE_TYPE_U8; break; @@ -189,6 +195,12 @@ static void __convert_audio_info_sample_type_2_sample_type(const CAudioInfo::ESa case CAudioInfo::ESampleType::SAMPLE_TYPE_S16_LE: dst_type = AUDIO_SAMPLE_TYPE_S16_LE; break; + case CAudioInfo::ESampleType::SAMPLE_TYPE_S24_LE: + dst_type = AUDIO_SAMPLE_TYPE_S24_LE; + break; + case CAudioInfo::ESampleType::SAMPLE_TYPE_S24_32_LE: + dst_type = AUDIO_SAMPLE_TYPE_S24_32_LE; + break; default: dst_type = AUDIO_SAMPLE_TYPE_U8; break; @@ -289,7 +301,10 @@ static void __check_audio_param(int sample_rate, audio_channel_e channel, audio_ if (channel != AUDIO_CHANNEL_MONO && channel != AUDIO_CHANNEL_STEREO) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Invalid channel :%d", channel); - if (type != AUDIO_SAMPLE_TYPE_U8 && type != AUDIO_SAMPLE_TYPE_S16_LE) + if (type != AUDIO_SAMPLE_TYPE_U8 && + type != AUDIO_SAMPLE_TYPE_S16_LE && + type != AUDIO_SAMPLE_TYPE_S24_LE && + type != AUDIO_SAMPLE_TYPE_S24_32_LE) THROW_ERROR_MSG_FORMAT(CAudioError::EError::ERROR_INVALID_ARGUMENT, "Invalid sample type :%d", type); } diff --git a/test/audio_io_test.c b/test/audio_io_test.c index 61ea8eb..0d9ba34 100644 --- a/test/audio_io_test.c +++ b/test/audio_io_test.c @@ -127,10 +127,7 @@ void play_file_sample(char *file, int frequency, int ch, int type) fseek(fp, 0, SEEK_SET); printf("start to play [%s] of size [%d] with [%d][%d][%d]\n", file, file_size, frequency, ch, type); - if (type) - audio_out_create_new(frequency, ch_table[ch], AUDIO_SAMPLE_TYPE_S16_LE, &output); - else - audio_out_create_new(frequency, ch_table[ch], AUDIO_SAMPLE_TYPE_U8, &output); + audio_out_create_new(frequency, ch_table[ch], AUDIO_SAMPLE_TYPE_U8 + type, &output); audio_out_prepare(output); audio_out_get_buffer_size(output, &buffer_size); @@ -676,7 +673,7 @@ int main(int argc, char **argv) printf("2. usage : audio_io_test call-forwarding-in\n"); printf("3. usage : audio_io_test [length to read] [number of iteration] [channels]\n"); printf("4. usage : audio_io_test async [write(1) | read(2)]\n"); - printf("5. Uasge : audio_io_test play [filename] [sample rate] [channels] [type(0:U8)]\n"); + printf("5. Uasge : audio_io_test play [filename] [sample rate] [channels] [type(0:U8,1:S16LE,2:S24LE,3:S24_32LE)]\n"); } return 0; }