Loading hal/audio_extn/utils.c +1 −0 Original line number Diff line number Diff line Loading @@ -78,6 +78,7 @@ struct string_to_enum { const struct string_to_enum s_flag_name_to_enum_table[] = { STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_DIRECT), STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_DIRECT_PCM), STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_PRIMARY), STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_FAST), STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_DEEP_BUFFER), Loading hal/audio_hw.c +24 −7 Original line number Diff line number Diff line Loading @@ -178,6 +178,8 @@ const char * const use_case_table[AUDIO_USECASE_MAX] = { [USECASE_AUDIO_PLAYBACK_OFFLOAD9] = "compress-offload-playback9", #endif [USECASE_AUDIO_PLAYBACK_ULL] = "audio-ull-playback", [USECASE_AUDIO_DIRECT_PCM_OFFLOAD] = "compress-offload-playback2", [USECASE_AUDIO_RECORD] = "audio-record", [USECASE_AUDIO_RECORD_COMPRESS] = "audio-record-compress", [USECASE_AUDIO_RECORD_LOW_LATENCY] = "low-latency-record", Loading Loading @@ -222,6 +224,7 @@ static const audio_usecase_t offload_usecases[] = { USECASE_AUDIO_PLAYBACK_OFFLOAD8, USECASE_AUDIO_PLAYBACK_OFFLOAD9, #endif USECASE_AUDIO_DIRECT_PCM_OFFLOAD, }; #define STRING_TO_ENUM(string) { #string, string } Loading Loading @@ -291,6 +294,7 @@ static bool is_supported_format(audio_format_t format) format == AUDIO_FORMAT_AAC_ADTS_HE_V2 || format == AUDIO_FORMAT_PCM_16_BIT_OFFLOAD || format == AUDIO_FORMAT_PCM_24_BIT_OFFLOAD || format == AUDIO_FORMAT_PCM_16_BIT || format == AUDIO_FORMAT_FLAC || format == AUDIO_FORMAT_ALAC || format == AUDIO_FORMAT_APE || Loading @@ -317,6 +321,7 @@ static int get_snd_codec_id(audio_format_t format) id = SND_AUDIOCODEC_AAC; break; case AUDIO_FORMAT_PCM_OFFLOAD: case AUDIO_FORMAT_PCM: id = SND_AUDIOCODEC_PCM; break; case AUDIO_FORMAT_FLAC: Loading Loading @@ -2911,7 +2916,9 @@ static int adev_open_output_stream(struct audio_hw_device *dev, __func__, ret); goto error_open; } } else if (out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) { } else if ((out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) || (out->flags & AUDIO_OUTPUT_FLAG_DIRECT_PCM)) { if (config->offload_info.version != AUDIO_INFO_INITIALIZER.version || config->offload_info.size != AUDIO_INFO_INITIALIZER.size) { ALOGE("%s: Unsupported Offload information", __func__); Loading @@ -2932,7 +2939,7 @@ static int adev_open_output_stream(struct audio_hw_device *dev, if (!is_supported_format(config->offload_info.format) && !audio_extn_is_dolby_format(config->offload_info.format)) { ALOGE("%s: Unsupported audio format", __func__); ALOGE("%s: Unsupported audio format %x " , __func__, config->offload_info.format); ret = -EINVAL; goto error_open; } Loading @@ -2945,7 +2952,13 @@ static int adev_open_output_stream(struct audio_hw_device *dev, goto error_open; } if (out->flags & AUDIO_OUTPUT_FLAG_DIRECT_PCM) { ALOGV("%s:: inserting DIRECT_PCM _USECASE", __func__); out->usecase = USECASE_AUDIO_DIRECT_PCM_OFFLOAD; } else { ALOGV("%s:: inserting OFFLOAD_USECASE", __func__); out->usecase = get_offload_usecase(adev); } if (config->offload_info.channel_mask) out->channel_mask = config->offload_info.channel_mask; else if (config->channel_mask) { Loading @@ -2969,7 +2982,9 @@ static int adev_open_output_stream(struct audio_hw_device *dev, else out->compr_config.codec->id = get_snd_codec_id(config->offload_info.format); if ((config->offload_info.format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_PCM_OFFLOAD) { if (((config->offload_info.format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_PCM_OFFLOAD)|| ((config->offload_info.format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_PCM)) { out->compr_config.fragment_size = platform_get_pcm_offload_buffer_size(&config->offload_info); } else if (audio_extn_dolby_is_passthrough_stream(out->flags)) { Loading Loading @@ -2999,6 +3014,8 @@ static int adev_open_output_stream(struct audio_hw_device *dev, out->compr_config.codec->format = SNDRV_PCM_FORMAT_S16_LE; if (config->offload_info.format == AUDIO_FORMAT_PCM_24_BIT_OFFLOAD) out->compr_config.codec->format = SNDRV_PCM_FORMAT_S24_LE; if (config->offload_info.format == AUDIO_FORMAT_PCM_16_BIT) out->compr_config.codec->format = SNDRV_PCM_FORMAT_S16_LE; if (out->bit_width == 24) { out->compr_config.codec->format = SNDRV_PCM_FORMAT_S24_LE; Loading hal/audio_hw.h +2 −0 Original line number Diff line number Diff line Loading @@ -96,6 +96,8 @@ enum { #endif USECASE_AUDIO_PLAYBACK_ULL, USECASE_AUDIO_DIRECT_PCM_OFFLOAD, /* FM usecase */ USECASE_AUDIO_PLAYBACK_FM, Loading hal/msm8916/platform.c +5 −0 Original line number Diff line number Diff line Loading @@ -282,6 +282,8 @@ int pcm_device_table[AUDIO_USECASE_MAX][2] = { [USECASE_AUDIO_PLAYBACK_OFFLOAD9] = {-1, -1}, #endif [USECASE_AUDIO_PLAYBACK_ULL] = {MULTIMEDIA3_PCM_DEVICE, MULTIMEDIA3_PCM_DEVICE}, [USECASE_AUDIO_DIRECT_PCM_OFFLOAD] = {PLAYBACK_OFFLOAD_DEVICE2, PLAYBACK_OFFLOAD_DEVICE2}, [USECASE_AUDIO_RECORD] = {AUDIO_RECORD_PCM_DEVICE, AUDIO_RECORD_PCM_DEVICE}, [USECASE_AUDIO_RECORD_COMPRESS] = {COMPRESS_CAPTURE_DEVICE, COMPRESS_CAPTURE_DEVICE}, [USECASE_AUDIO_RECORD_LOW_LATENCY] = {LOWLATENCY_PCM_DEVICE, Loading Loading @@ -666,6 +668,7 @@ static struct name_to_index usecase_name_index[AUDIO_USECASE_MAX] = { {TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_OFFLOAD9)}, #endif {TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_ULL)}, {TO_NAME_INDEX(USECASE_AUDIO_DIRECT_PCM_OFFLOAD)}, {TO_NAME_INDEX(USECASE_AUDIO_RECORD)}, {TO_NAME_INDEX(USECASE_AUDIO_RECORD_LOW_LATENCY)}, {TO_NAME_INDEX(USECASE_VOICE_CALL)}, Loading Loading @@ -3638,6 +3641,7 @@ bool platform_listen_usecase_needs_event(audio_usecase_t uc_id) case USECASE_AUDIO_PLAYBACK_DEEP_BUFFER: case USECASE_AUDIO_PLAYBACK_MULTI_CH: case USECASE_AUDIO_PLAYBACK_OFFLOAD: case USECASE_AUDIO_DIRECT_PCM_OFFLOAD: needs_event = true; break; /* concurrent playback in low latency allowed */ Loading Loading @@ -3701,6 +3705,7 @@ bool platform_sound_trigger_usecase_needs_event(audio_usecase_t uc_id) case USECASE_AUDIO_PLAYBACK_DEEP_BUFFER: case USECASE_AUDIO_PLAYBACK_MULTI_CH: case USECASE_AUDIO_PLAYBACK_OFFLOAD: case USECASE_AUDIO_DIRECT_PCM_OFFLOAD: needs_event = true; break; /* concurrent playback in low latency allowed */ Loading hal/msm8916/platform.h +2 −0 Original line number Diff line number Diff line Loading @@ -248,6 +248,8 @@ enum { #define SPKR_PROT_CALIB_RX_PCM_DEVICE 5 #define SPKR_PROT_CALIB_TX_PCM_DEVICE 26 #define PLAYBACK_OFFLOAD_DEVICE 9 #define PLAYBACK_OFFLOAD_DEVICE2 24 #define COMPRESS_VOIP_CALL_PCM_DEVICE 3 Loading Loading
hal/audio_extn/utils.c +1 −0 Original line number Diff line number Diff line Loading @@ -78,6 +78,7 @@ struct string_to_enum { const struct string_to_enum s_flag_name_to_enum_table[] = { STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_DIRECT), STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_DIRECT_PCM), STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_PRIMARY), STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_FAST), STRING_TO_ENUM(AUDIO_OUTPUT_FLAG_DEEP_BUFFER), Loading
hal/audio_hw.c +24 −7 Original line number Diff line number Diff line Loading @@ -178,6 +178,8 @@ const char * const use_case_table[AUDIO_USECASE_MAX] = { [USECASE_AUDIO_PLAYBACK_OFFLOAD9] = "compress-offload-playback9", #endif [USECASE_AUDIO_PLAYBACK_ULL] = "audio-ull-playback", [USECASE_AUDIO_DIRECT_PCM_OFFLOAD] = "compress-offload-playback2", [USECASE_AUDIO_RECORD] = "audio-record", [USECASE_AUDIO_RECORD_COMPRESS] = "audio-record-compress", [USECASE_AUDIO_RECORD_LOW_LATENCY] = "low-latency-record", Loading Loading @@ -222,6 +224,7 @@ static const audio_usecase_t offload_usecases[] = { USECASE_AUDIO_PLAYBACK_OFFLOAD8, USECASE_AUDIO_PLAYBACK_OFFLOAD9, #endif USECASE_AUDIO_DIRECT_PCM_OFFLOAD, }; #define STRING_TO_ENUM(string) { #string, string } Loading Loading @@ -291,6 +294,7 @@ static bool is_supported_format(audio_format_t format) format == AUDIO_FORMAT_AAC_ADTS_HE_V2 || format == AUDIO_FORMAT_PCM_16_BIT_OFFLOAD || format == AUDIO_FORMAT_PCM_24_BIT_OFFLOAD || format == AUDIO_FORMAT_PCM_16_BIT || format == AUDIO_FORMAT_FLAC || format == AUDIO_FORMAT_ALAC || format == AUDIO_FORMAT_APE || Loading @@ -317,6 +321,7 @@ static int get_snd_codec_id(audio_format_t format) id = SND_AUDIOCODEC_AAC; break; case AUDIO_FORMAT_PCM_OFFLOAD: case AUDIO_FORMAT_PCM: id = SND_AUDIOCODEC_PCM; break; case AUDIO_FORMAT_FLAC: Loading Loading @@ -2911,7 +2916,9 @@ static int adev_open_output_stream(struct audio_hw_device *dev, __func__, ret); goto error_open; } } else if (out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) { } else if ((out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD) || (out->flags & AUDIO_OUTPUT_FLAG_DIRECT_PCM)) { if (config->offload_info.version != AUDIO_INFO_INITIALIZER.version || config->offload_info.size != AUDIO_INFO_INITIALIZER.size) { ALOGE("%s: Unsupported Offload information", __func__); Loading @@ -2932,7 +2939,7 @@ static int adev_open_output_stream(struct audio_hw_device *dev, if (!is_supported_format(config->offload_info.format) && !audio_extn_is_dolby_format(config->offload_info.format)) { ALOGE("%s: Unsupported audio format", __func__); ALOGE("%s: Unsupported audio format %x " , __func__, config->offload_info.format); ret = -EINVAL; goto error_open; } Loading @@ -2945,7 +2952,13 @@ static int adev_open_output_stream(struct audio_hw_device *dev, goto error_open; } if (out->flags & AUDIO_OUTPUT_FLAG_DIRECT_PCM) { ALOGV("%s:: inserting DIRECT_PCM _USECASE", __func__); out->usecase = USECASE_AUDIO_DIRECT_PCM_OFFLOAD; } else { ALOGV("%s:: inserting OFFLOAD_USECASE", __func__); out->usecase = get_offload_usecase(adev); } if (config->offload_info.channel_mask) out->channel_mask = config->offload_info.channel_mask; else if (config->channel_mask) { Loading @@ -2969,7 +2982,9 @@ static int adev_open_output_stream(struct audio_hw_device *dev, else out->compr_config.codec->id = get_snd_codec_id(config->offload_info.format); if ((config->offload_info.format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_PCM_OFFLOAD) { if (((config->offload_info.format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_PCM_OFFLOAD)|| ((config->offload_info.format & AUDIO_FORMAT_MAIN_MASK) == AUDIO_FORMAT_PCM)) { out->compr_config.fragment_size = platform_get_pcm_offload_buffer_size(&config->offload_info); } else if (audio_extn_dolby_is_passthrough_stream(out->flags)) { Loading Loading @@ -2999,6 +3014,8 @@ static int adev_open_output_stream(struct audio_hw_device *dev, out->compr_config.codec->format = SNDRV_PCM_FORMAT_S16_LE; if (config->offload_info.format == AUDIO_FORMAT_PCM_24_BIT_OFFLOAD) out->compr_config.codec->format = SNDRV_PCM_FORMAT_S24_LE; if (config->offload_info.format == AUDIO_FORMAT_PCM_16_BIT) out->compr_config.codec->format = SNDRV_PCM_FORMAT_S16_LE; if (out->bit_width == 24) { out->compr_config.codec->format = SNDRV_PCM_FORMAT_S24_LE; Loading
hal/audio_hw.h +2 −0 Original line number Diff line number Diff line Loading @@ -96,6 +96,8 @@ enum { #endif USECASE_AUDIO_PLAYBACK_ULL, USECASE_AUDIO_DIRECT_PCM_OFFLOAD, /* FM usecase */ USECASE_AUDIO_PLAYBACK_FM, Loading
hal/msm8916/platform.c +5 −0 Original line number Diff line number Diff line Loading @@ -282,6 +282,8 @@ int pcm_device_table[AUDIO_USECASE_MAX][2] = { [USECASE_AUDIO_PLAYBACK_OFFLOAD9] = {-1, -1}, #endif [USECASE_AUDIO_PLAYBACK_ULL] = {MULTIMEDIA3_PCM_DEVICE, MULTIMEDIA3_PCM_DEVICE}, [USECASE_AUDIO_DIRECT_PCM_OFFLOAD] = {PLAYBACK_OFFLOAD_DEVICE2, PLAYBACK_OFFLOAD_DEVICE2}, [USECASE_AUDIO_RECORD] = {AUDIO_RECORD_PCM_DEVICE, AUDIO_RECORD_PCM_DEVICE}, [USECASE_AUDIO_RECORD_COMPRESS] = {COMPRESS_CAPTURE_DEVICE, COMPRESS_CAPTURE_DEVICE}, [USECASE_AUDIO_RECORD_LOW_LATENCY] = {LOWLATENCY_PCM_DEVICE, Loading Loading @@ -666,6 +668,7 @@ static struct name_to_index usecase_name_index[AUDIO_USECASE_MAX] = { {TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_OFFLOAD9)}, #endif {TO_NAME_INDEX(USECASE_AUDIO_PLAYBACK_ULL)}, {TO_NAME_INDEX(USECASE_AUDIO_DIRECT_PCM_OFFLOAD)}, {TO_NAME_INDEX(USECASE_AUDIO_RECORD)}, {TO_NAME_INDEX(USECASE_AUDIO_RECORD_LOW_LATENCY)}, {TO_NAME_INDEX(USECASE_VOICE_CALL)}, Loading Loading @@ -3638,6 +3641,7 @@ bool platform_listen_usecase_needs_event(audio_usecase_t uc_id) case USECASE_AUDIO_PLAYBACK_DEEP_BUFFER: case USECASE_AUDIO_PLAYBACK_MULTI_CH: case USECASE_AUDIO_PLAYBACK_OFFLOAD: case USECASE_AUDIO_DIRECT_PCM_OFFLOAD: needs_event = true; break; /* concurrent playback in low latency allowed */ Loading Loading @@ -3701,6 +3705,7 @@ bool platform_sound_trigger_usecase_needs_event(audio_usecase_t uc_id) case USECASE_AUDIO_PLAYBACK_DEEP_BUFFER: case USECASE_AUDIO_PLAYBACK_MULTI_CH: case USECASE_AUDIO_PLAYBACK_OFFLOAD: case USECASE_AUDIO_DIRECT_PCM_OFFLOAD: needs_event = true; break; /* concurrent playback in low latency allowed */ Loading
hal/msm8916/platform.h +2 −0 Original line number Diff line number Diff line Loading @@ -248,6 +248,8 @@ enum { #define SPKR_PROT_CALIB_RX_PCM_DEVICE 5 #define SPKR_PROT_CALIB_TX_PCM_DEVICE 26 #define PLAYBACK_OFFLOAD_DEVICE 9 #define PLAYBACK_OFFLOAD_DEVICE2 24 #define COMPRESS_VOIP_CALL_PCM_DEVICE 3 Loading