audio: hal: support app_type for capture usecase
When audio path is enabled app_type, acdb_id details are sent to
driver using mixer controls. Add support for audio recording also.
Change-Id: Id81719485abb710f10fd5171a3dd8551d2cfa7a5
diff --git a/hal/audio_extn/utils.c b/hal/audio_extn/utils.c
index 8e2e1dc..0698e73 100644
--- a/hal/audio_extn/utils.c
+++ b/hal/audio_extn/utils.c
@@ -499,11 +499,13 @@
app_type_cfg->bit_width = 16;
}
+#define GENERAL_RECORDING_APP_TYPE 0x11132
int audio_extn_utils_send_app_type_cfg(struct audio_usecase *usecase)
{
char mixer_ctl_name[MAX_LENGTH_MIXER_CONTROL_IN_INT];
int app_type_cfg[MAX_LENGTH_MIXER_CONTROL_IN_INT], len = 0, rc;
struct stream_out *out;
+ struct stream_in *in;
struct audio_device *adev;
struct mixer_ctl *ctl;
int pcm_device_id, acdb_dev_id, snd_device = usecase->out_snd_device;
@@ -511,25 +513,32 @@
ALOGV("%s", __func__);
- if (usecase->type != PCM_PLAYBACK) {
- ALOGV("%s: not a playback path, no need to cfg app type", __func__);
+ if (usecase->type != PCM_PLAYBACK && usecase->type != PCM_CAPTURE) {
+ ALOGE("%s: not a playback or capture path, no need to cfg app type", __func__);
rc = 0;
goto exit_send_app_type_cfg;
}
if ((usecase->id != USECASE_AUDIO_PLAYBACK_DEEP_BUFFER) &&
(usecase->id != USECASE_AUDIO_PLAYBACK_LOW_LATENCY) &&
(usecase->id != USECASE_AUDIO_PLAYBACK_MULTI_CH) &&
- (!is_offload_usecase(usecase->id))) {
+ (!is_offload_usecase(usecase->id)) &&
+ (usecase->type != PCM_CAPTURE)) {
ALOGV("%s: a playback path where app type cfg is not required %d", __func__, usecase->id);
rc = 0;
goto exit_send_app_type_cfg;
}
- out = usecase->stream.out;
- adev = out->dev;
-
- snd_device = usecase->out_snd_device;
-
- pcm_device_id = platform_get_pcm_device_id(out->usecase, PCM_PLAYBACK);
+ if (usecase->type == PCM_PLAYBACK) {
+ out = usecase->stream.out;
+ adev = out->dev;
+ snd_device = usecase->out_snd_device;
+ pcm_device_id = platform_get_pcm_device_id(out->usecase, PCM_PLAYBACK);
+ }
+ if (usecase->type == PCM_CAPTURE) {
+ in = usecase->stream.in;
+ adev = in->dev;
+ snd_device = usecase->in_snd_device;
+ pcm_device_id = platform_get_pcm_device_id(in->usecase, PCM_CAPTURE);
+ }
snprintf(mixer_ctl_name, sizeof(mixer_ctl_name),
"Audio Stream %d App Type Cfg", pcm_device_id);
@@ -550,32 +559,40 @@
goto exit_send_app_type_cfg;
}
- if ((24 == usecase->stream.out->bit_width) &&
- (usecase->stream.out->devices & AUDIO_DEVICE_OUT_SPEAKER)) {
- sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
- } else if ((snd_device != SND_DEVICE_OUT_HEADPHONES_44_1 &&
- usecase->stream.out->sample_rate == OUTPUT_SAMPLING_RATE_44100) ||
- (usecase->stream.out->sample_rate < OUTPUT_SAMPLING_RATE_44100)) {
- sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
- } else {
- sample_rate = out->app_type_cfg.sample_rate;
- }
+ if (usecase->type == PCM_PLAYBACK) {
+ if ((24 == usecase->stream.out->bit_width) &&
+ (usecase->stream.out->devices & AUDIO_DEVICE_OUT_SPEAKER)) {
+ sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
+ } else if ((snd_device != SND_DEVICE_OUT_HEADPHONES_44_1 &&
+ usecase->stream.out->sample_rate == OUTPUT_SAMPLING_RATE_44100) ||
+ (usecase->stream.out->sample_rate < OUTPUT_SAMPLING_RATE_44100)) {
+ sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
+ } else {
+ sample_rate = out->app_type_cfg.sample_rate;
+ }
- app_type_cfg[len++] = out->app_type_cfg.app_type;
- app_type_cfg[len++] = acdb_dev_id;
- if (((out->format == AUDIO_FORMAT_E_AC3) ||
- (out->format == AUDIO_FORMAT_E_AC3_JOC))
+ app_type_cfg[len++] = out->app_type_cfg.app_type;
+ app_type_cfg[len++] = acdb_dev_id;
+ if (((out->format == AUDIO_FORMAT_E_AC3) ||
+ (out->format == AUDIO_FORMAT_E_AC3_JOC))
#ifdef HDMI_PASSTHROUGH_ENABLED
- && (out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_PASSTHROUGH)
+ && (out->flags & AUDIO_OUTPUT_FLAG_COMPRESS_PASSTHROUGH)
#endif
- )
- app_type_cfg[len++] = sample_rate * 4;
- else
+ )
+ app_type_cfg[len++] = sample_rate * 4;
+ else
+ app_type_cfg[len++] = sample_rate;
+ ALOGI("%s PLAYBACK app_type %d, acdb_dev_id %d, sample_rate %d",
+ __func__, out->app_type_cfg.app_type, acdb_dev_id, sample_rate);
+ }
+ else if (usecase->type == PCM_CAPTURE) {
+ app_type_cfg[len++] = GENERAL_RECORDING_APP_TYPE;
+ app_type_cfg[len++] = acdb_dev_id;
app_type_cfg[len++] = sample_rate;
-
+ ALOGI("%s CAPTURE app_type %d, acdb_dev_id %d, sample_rate %d",
+ __func__, platform_get_default_app_type(adev->platform), acdb_dev_id, sample_rate);
+ }
mixer_ctl_set_array(ctl, app_type_cfg, len);
- ALOGI("%s app_type %d, acdb_dev_id %d, sample_rate %d",
- __func__, out->app_type_cfg.app_type, acdb_dev_id, sample_rate);
rc = 0;
exit_send_app_type_cfg:
return rc;