Loading hal/audio_hw.c +57 −52 Original line number Diff line number Diff line Loading @@ -934,7 +934,6 @@ static void check_and_enable_effect(struct audio_device *adev) #define check_and_enable_effect(x) ENOSYS #endif int pcm_ioctl(struct pcm *pcm, int request, ...) { va_list ap; Loading Loading @@ -6600,6 +6599,15 @@ static int adev_open_input_stream(struct audio_hw_device *dev, in->standby = 1; in->capture_handle = handle; in->flags = flags; in->bit_width = 16; in->af_period_multiplier = 1; /* Update config params with the requested sample rate and channels */ if ((in->device == AUDIO_DEVICE_IN_TELEPHONY_RX) && (adev->mode != AUDIO_MODE_IN_CALL)) { ret = -EINVAL; goto err_open; } /* restrict 24 bit capture for unprocessed source only * for other sources if 24 bit requested reject 24 and set 16 bit capture only Loading @@ -6622,7 +6630,9 @@ static int adev_open_input_stream(struct audio_hw_device *dev, goto err_open; } channel_count = audio_channel_count_from_in_mask(config->channel_mask); } else if (config->format == AUDIO_FORMAT_DEFAULT) { } if (config->format == AUDIO_FORMAT_DEFAULT) { config->format = AUDIO_FORMAT_PCM_16_BIT; } else if ((config->format == AUDIO_FORMAT_PCM_FLOAT) || (config->format == AUDIO_FORMAT_PCM_32_BIT) || Loading @@ -6645,11 +6655,8 @@ static int adev_open_input_stream(struct audio_hw_device *dev, if (config->sample_rate > 48000) config->sample_rate = 48000; ret_error = true; } else if (config->format == AUDIO_FORMAT_PCM_24_BIT_PACKED) { in->config.format = PCM_FORMAT_S24_3LE; } else if (config->format == AUDIO_FORMAT_PCM_8_24_BIT) { in->config.format = PCM_FORMAT_S24_LE; } else { } else if (!(config->format == AUDIO_FORMAT_PCM_24_BIT_PACKED || config->format == AUDIO_FORMAT_PCM_8_24_BIT)) { config->format = AUDIO_FORMAT_PCM_24_BIT_PACKED; ret_error = true; } Loading Loading @@ -6678,32 +6685,18 @@ static int adev_open_input_stream(struct audio_hw_device *dev, in->realtime = 0; in->usecase = USECASE_AUDIO_RECORD_MMAP; in->config = pcm_config_mmap_capture; in->config.format = pcm_format_from_audio_format(config->format); in->stream.start = in_start; in->stream.stop = in_stop; in->stream.create_mmap_buffer = in_create_mmap_buffer; in->stream.get_mmap_position = in_get_mmap_position; in->af_period_multiplier = 1; ALOGV("%s: USECASE_AUDIO_RECORD_MMAP", __func__); } else if (in->realtime) { in->config = pcm_config_audio_capture_rt; in->config.format = pcm_format_from_audio_format(config->format); in->sample_rate = in->config.rate; in->af_period_multiplier = af_period_multiplier; } else { in->config = pcm_config_audio_capture; in->config.rate = config->sample_rate; in->sample_rate = config->sample_rate; in->af_period_multiplier = 1; } in->bit_width = 16; /* Update config params with the requested sample rate and channels */ if ((in->device == AUDIO_DEVICE_IN_TELEPHONY_RX) && (adev->mode != AUDIO_MODE_IN_CALL)) { ret = -EINVAL; goto err_open; } if (is_usb_dev && may_use_hifi_record) { } else if (is_usb_dev && may_use_hifi_record) { in->usecase = USECASE_AUDIO_RECORD_HIFI; in->config = pcm_config_audio_capture; frame_size = audio_stream_in_frame_size(&in->stream); Loading @@ -6713,7 +6706,6 @@ static int adev_open_input_stream(struct audio_hw_device *dev, false /*is_low_latency*/); in->config.period_size = buffer_size / frame_size; in->config.rate = config->sample_rate; in->af_period_multiplier = 1; in->config.format = pcm_format_from_audio_format(config->format); in->config.channels = channel_count; } else if ((in->device == AUDIO_DEVICE_IN_TELEPHONY_RX) || Loading Loading @@ -6756,41 +6748,54 @@ static int adev_open_input_stream(struct audio_hw_device *dev, ret = audio_extn_cin_configure_input_stream(in); if (ret) goto err_open; } else { in->config.channels = channel_count; if (!in->realtime) { in->format = config->format; frame_size = audio_stream_in_frame_size(&in->stream); buffer_size = get_input_buffer_size(config->sample_rate, config->format, channel_count, is_low_latency); in->config.period_size = buffer_size / frame_size; } } else if (in->source == AUDIO_SOURCE_VOICE_COMMUNICATION) { bool valid_rate = (config->sample_rate == 8000 || config->sample_rate == 16000 || config->sample_rate == 32000 || config->sample_rate == 48000); bool valid_ch = audio_channel_count_from_in_mask(in->channel_mask) == 1; //XXX needed for voice_extn_compress_voip_open_input_stream in->config.rate = config->sample_rate; #ifndef COMPRESS_VOIP_ENABLED if ((in->source == AUDIO_SOURCE_VOICE_COMMUNICATION) && (in->config.rate == 8000 || in->config.rate == 16000 || in->config.rate == 32000 || in->config.rate == 48000) && (audio_channel_count_from_in_mask(in->channel_mask) == 1)) { if (valid_rate && valid_ch) { in->usecase = USECASE_AUDIO_RECORD_VOIP; in->config = default_pcm_config_voip_copp; in->config.period_size = VOIP_IO_BUF_SIZE(in->sample_rate, DEFAULT_VOIP_BUF_DURATION_MS, DEFAULT_VOIP_BIT_DEPTH_BYTE)/2; in->config.rate = in->sample_rate; in->config.period_size = VOIP_IO_BUF_SIZE(in->sample_rate, DEFAULT_VOIP_BUF_DURATION_MS, DEFAULT_VOIP_BIT_DEPTH_BYTE)/2; } #else if ((in->source == AUDIO_SOURCE_VOICE_COMMUNICATION) && (in->dev->mode == AUDIO_MODE_IN_COMMUNICATION || if ((in->dev->mode == AUDIO_MODE_IN_COMMUNICATION || voice_extn_compress_voip_is_active(in->dev)) && (voice_extn_compress_voip_is_format_supported(in->format)) && (in->config.rate == 8000 || in->config.rate == 16000 || in->config.rate == 32000 || in->config.rate == 48000) && (audio_channel_count_from_in_mask(in->channel_mask) == 1)) { valid_rate && valid_ch) { voice_extn_compress_voip_open_input_stream(in); } #endif else { ALOGE("%s AUDIO_SOURCE_VOICE_COMMUNICATION invalid args", __func__); ret = -EINVAL; if (!valid_ch) config->channel_mask = 1; if (!valid_rate) config->sample_rate = 48000; goto err_open; } // update back to whatever was overwritten in->config.rate = config->sample_rate; in->sample_rate = config->sample_rate; } else { in->config = pcm_config_audio_capture; in->config.rate = config->sample_rate; in->config.format = pcm_format_from_audio_format(config->format); in->config.channels = channel_count; in->sample_rate = config->sample_rate; in->format = config->format; frame_size = audio_stream_in_frame_size(&in->stream); buffer_size = get_input_buffer_size(config->sample_rate, config->format, channel_count, is_low_latency); in->config.period_size = buffer_size / frame_size; } audio_extn_utils_update_stream_input_app_type_cfg(adev->platform, &adev->streams_input_cfg_list, devices, flags, in->format, in->sample_rate, Loading Loading
hal/audio_hw.c +57 −52 Original line number Diff line number Diff line Loading @@ -934,7 +934,6 @@ static void check_and_enable_effect(struct audio_device *adev) #define check_and_enable_effect(x) ENOSYS #endif int pcm_ioctl(struct pcm *pcm, int request, ...) { va_list ap; Loading Loading @@ -6600,6 +6599,15 @@ static int adev_open_input_stream(struct audio_hw_device *dev, in->standby = 1; in->capture_handle = handle; in->flags = flags; in->bit_width = 16; in->af_period_multiplier = 1; /* Update config params with the requested sample rate and channels */ if ((in->device == AUDIO_DEVICE_IN_TELEPHONY_RX) && (adev->mode != AUDIO_MODE_IN_CALL)) { ret = -EINVAL; goto err_open; } /* restrict 24 bit capture for unprocessed source only * for other sources if 24 bit requested reject 24 and set 16 bit capture only Loading @@ -6622,7 +6630,9 @@ static int adev_open_input_stream(struct audio_hw_device *dev, goto err_open; } channel_count = audio_channel_count_from_in_mask(config->channel_mask); } else if (config->format == AUDIO_FORMAT_DEFAULT) { } if (config->format == AUDIO_FORMAT_DEFAULT) { config->format = AUDIO_FORMAT_PCM_16_BIT; } else if ((config->format == AUDIO_FORMAT_PCM_FLOAT) || (config->format == AUDIO_FORMAT_PCM_32_BIT) || Loading @@ -6645,11 +6655,8 @@ static int adev_open_input_stream(struct audio_hw_device *dev, if (config->sample_rate > 48000) config->sample_rate = 48000; ret_error = true; } else if (config->format == AUDIO_FORMAT_PCM_24_BIT_PACKED) { in->config.format = PCM_FORMAT_S24_3LE; } else if (config->format == AUDIO_FORMAT_PCM_8_24_BIT) { in->config.format = PCM_FORMAT_S24_LE; } else { } else if (!(config->format == AUDIO_FORMAT_PCM_24_BIT_PACKED || config->format == AUDIO_FORMAT_PCM_8_24_BIT)) { config->format = AUDIO_FORMAT_PCM_24_BIT_PACKED; ret_error = true; } Loading Loading @@ -6678,32 +6685,18 @@ static int adev_open_input_stream(struct audio_hw_device *dev, in->realtime = 0; in->usecase = USECASE_AUDIO_RECORD_MMAP; in->config = pcm_config_mmap_capture; in->config.format = pcm_format_from_audio_format(config->format); in->stream.start = in_start; in->stream.stop = in_stop; in->stream.create_mmap_buffer = in_create_mmap_buffer; in->stream.get_mmap_position = in_get_mmap_position; in->af_period_multiplier = 1; ALOGV("%s: USECASE_AUDIO_RECORD_MMAP", __func__); } else if (in->realtime) { in->config = pcm_config_audio_capture_rt; in->config.format = pcm_format_from_audio_format(config->format); in->sample_rate = in->config.rate; in->af_period_multiplier = af_period_multiplier; } else { in->config = pcm_config_audio_capture; in->config.rate = config->sample_rate; in->sample_rate = config->sample_rate; in->af_period_multiplier = 1; } in->bit_width = 16; /* Update config params with the requested sample rate and channels */ if ((in->device == AUDIO_DEVICE_IN_TELEPHONY_RX) && (adev->mode != AUDIO_MODE_IN_CALL)) { ret = -EINVAL; goto err_open; } if (is_usb_dev && may_use_hifi_record) { } else if (is_usb_dev && may_use_hifi_record) { in->usecase = USECASE_AUDIO_RECORD_HIFI; in->config = pcm_config_audio_capture; frame_size = audio_stream_in_frame_size(&in->stream); Loading @@ -6713,7 +6706,6 @@ static int adev_open_input_stream(struct audio_hw_device *dev, false /*is_low_latency*/); in->config.period_size = buffer_size / frame_size; in->config.rate = config->sample_rate; in->af_period_multiplier = 1; in->config.format = pcm_format_from_audio_format(config->format); in->config.channels = channel_count; } else if ((in->device == AUDIO_DEVICE_IN_TELEPHONY_RX) || Loading Loading @@ -6756,41 +6748,54 @@ static int adev_open_input_stream(struct audio_hw_device *dev, ret = audio_extn_cin_configure_input_stream(in); if (ret) goto err_open; } else { in->config.channels = channel_count; if (!in->realtime) { in->format = config->format; frame_size = audio_stream_in_frame_size(&in->stream); buffer_size = get_input_buffer_size(config->sample_rate, config->format, channel_count, is_low_latency); in->config.period_size = buffer_size / frame_size; } } else if (in->source == AUDIO_SOURCE_VOICE_COMMUNICATION) { bool valid_rate = (config->sample_rate == 8000 || config->sample_rate == 16000 || config->sample_rate == 32000 || config->sample_rate == 48000); bool valid_ch = audio_channel_count_from_in_mask(in->channel_mask) == 1; //XXX needed for voice_extn_compress_voip_open_input_stream in->config.rate = config->sample_rate; #ifndef COMPRESS_VOIP_ENABLED if ((in->source == AUDIO_SOURCE_VOICE_COMMUNICATION) && (in->config.rate == 8000 || in->config.rate == 16000 || in->config.rate == 32000 || in->config.rate == 48000) && (audio_channel_count_from_in_mask(in->channel_mask) == 1)) { if (valid_rate && valid_ch) { in->usecase = USECASE_AUDIO_RECORD_VOIP; in->config = default_pcm_config_voip_copp; in->config.period_size = VOIP_IO_BUF_SIZE(in->sample_rate, DEFAULT_VOIP_BUF_DURATION_MS, DEFAULT_VOIP_BIT_DEPTH_BYTE)/2; in->config.rate = in->sample_rate; in->config.period_size = VOIP_IO_BUF_SIZE(in->sample_rate, DEFAULT_VOIP_BUF_DURATION_MS, DEFAULT_VOIP_BIT_DEPTH_BYTE)/2; } #else if ((in->source == AUDIO_SOURCE_VOICE_COMMUNICATION) && (in->dev->mode == AUDIO_MODE_IN_COMMUNICATION || if ((in->dev->mode == AUDIO_MODE_IN_COMMUNICATION || voice_extn_compress_voip_is_active(in->dev)) && (voice_extn_compress_voip_is_format_supported(in->format)) && (in->config.rate == 8000 || in->config.rate == 16000 || in->config.rate == 32000 || in->config.rate == 48000) && (audio_channel_count_from_in_mask(in->channel_mask) == 1)) { valid_rate && valid_ch) { voice_extn_compress_voip_open_input_stream(in); } #endif else { ALOGE("%s AUDIO_SOURCE_VOICE_COMMUNICATION invalid args", __func__); ret = -EINVAL; if (!valid_ch) config->channel_mask = 1; if (!valid_rate) config->sample_rate = 48000; goto err_open; } // update back to whatever was overwritten in->config.rate = config->sample_rate; in->sample_rate = config->sample_rate; } else { in->config = pcm_config_audio_capture; in->config.rate = config->sample_rate; in->config.format = pcm_format_from_audio_format(config->format); in->config.channels = channel_count; in->sample_rate = config->sample_rate; in->format = config->format; frame_size = audio_stream_in_frame_size(&in->stream); buffer_size = get_input_buffer_size(config->sample_rate, config->format, channel_count, is_low_latency); in->config.period_size = buffer_size / frame_size; } audio_extn_utils_update_stream_input_app_type_cfg(adev->platform, &adev->streams_input_cfg_list, devices, flags, in->format, in->sample_rate, Loading