Loading hal/audio_extn/audio_extn.c +16 −15 Original line number Diff line number Diff line Loading @@ -475,7 +475,7 @@ void audio_extn_set_custom_mtmx_params_v2(struct audio_device *adev, int num_devices = 0, pcm_device_id = -1, i = 0, ret = 0; snd_device_t new_snd_devices[SND_DEVICE_OUT_END] = {0}; struct audio_backend_cfg backend_cfg = {0}; uint32_t feature_id = 0; uint32_t feature_id = 0, idx = 0; switch(usecase->type) { case PCM_PLAYBACK: Loading Loading @@ -520,7 +520,7 @@ void audio_extn_set_custom_mtmx_params_v2(struct audio_device *adev, * if features like dual_mono is enabled and overrides the default(i.e. 0). */ info.id = feature_id; info.usecase_id = usecase->id; info.usecase_id[0] = usecase->id; for (i = 0, ret = 0; i < num_devices; i++) { info.snd_device = new_snd_devices[i]; platform_get_codec_backend_cfg(adev, info.snd_device, &backend_cfg); Loading @@ -533,7 +533,7 @@ void audio_extn_set_custom_mtmx_params_v2(struct audio_device *adev, info.op_channels = audio_channel_count_from_in_mask( usecase->stream.in->channel_mask); } params = platform_get_custom_mtmx_params(adev->platform, &info); params = platform_get_custom_mtmx_params(adev->platform, &info, &idx); if (params) { if (enable) ret = update_custom_mtmx_coefficients_v2(adev, params, Loading Loading @@ -678,7 +678,8 @@ static int update_custom_mtmx_coefficients_v1(struct audio_device *adev, struct audio_custom_mtmx_in_params *in_params, int pcm_device_id, usecase_type_t type, bool enable) bool enable, uint32_t idx) { struct mixer_ctl *ctl = NULL; char mixer_ctl_name[128] = {0}; Loading @@ -692,13 +693,13 @@ static int update_custom_mtmx_coefficients_v1(struct audio_device *adev, __func__, pinfo->ip_channels, pinfo->op_channels, pcm_device_id, type, enable); if (!strcmp(pinfo->fe_name, "")) { if (pinfo->fe_id[idx] == 0) { ALOGE("%s: Error. no front end defined", __func__); return -EINVAL; } strlcpy(mixer_name_prefix, pinfo->fe_name, sizeof(mixer_name_prefix)); snprintf(mixer_name_prefix, sizeof(mixer_name_prefix), "%s%d", "MultiMedia", pinfo->fe_id[idx]); /* * Enable/Disable channel mixer. * If enable, use params and in_params to configure mixer. Loading Loading @@ -840,7 +841,7 @@ void audio_extn_set_custom_mtmx_params_v1(struct audio_device *adev, struct audio_custom_mtmx_in_params_info in_info = {0}; struct audio_custom_mtmx_in_params *in_params = NULL; int pcm_device_id = -1, ret = 0; uint32_t feature_id = 0; uint32_t feature_id = 0, idx = 0; switch(usecase->type) { case PCM_CAPTURE: Loading @@ -862,26 +863,26 @@ void audio_extn_set_custom_mtmx_params_v1(struct audio_device *adev, ALOGD("%s: snd device %d", __func__, info.snd_device); info.id = feature_id; info.usecase_id = usecase->id; info.usecase_id[0] = usecase->id; info.op_channels = audio_channel_count_from_in_mask( usecase->stream.in->channel_mask); in_info.usecase_id = info.usecase_id; in_info.usecase_id[0] = info.usecase_id[0]; in_info.op_channels = info.op_channels; in_params = platform_get_custom_mtmx_in_params(adev->platform, &in_info); if (!in_params) { ALOGE("%s: Could not get in params for usecase %d, channels %d", __func__, in_info.usecase_id, in_info.op_channels); __func__, in_info.usecase_id[0], in_info.op_channels); return; } info.ip_channels = in_params->ip_channels; ALOGD("%s: ip channels %d, op channels %d", __func__, info.ip_channels, info.op_channels); params = platform_get_custom_mtmx_params(adev->platform, &info); params = platform_get_custom_mtmx_params(adev->platform, &info, &idx); if (params) { ret = update_custom_mtmx_coefficients_v1(adev, params, in_params, pcm_device_id, usecase->type, enable); pcm_device_id, usecase->type, enable, idx); if (ret < 0) ALOGE("%s: error updating mtmx coeffs err:%d", __func__, ret); } Loading @@ -900,12 +901,12 @@ snd_device_t audio_extn_get_loopback_snd_device(struct audio_device *adev, return snd_device; } in_info.usecase_id = usecase->id; in_info.usecase_id[0] = usecase->id; in_info.op_channels = channel_count; in_params = platform_get_custom_mtmx_in_params(adev->platform, &in_info); if (!in_params) { ALOGE("%s: Could not get in params for usecase %d, channels %d", __func__, in_info.usecase_id, in_info.op_channels); __func__, in_info.usecase_id[0], in_info.op_channels); return snd_device; } Loading hal/msm8916/platform.c +32 −9 Original line number Diff line number Diff line Loading @@ -2778,11 +2778,18 @@ acdb_init_fail: struct audio_custom_mtmx_params * platform_get_custom_mtmx_params(void *platform, struct audio_custom_mtmx_params_info *info) struct audio_custom_mtmx_params_info *info, uint32_t *idx) { struct platform_data *my_data = (struct platform_data *)platform; struct listnode *node = NULL; struct audio_custom_mtmx_params *params = NULL; int i = 0; if (!info || !idx) { ALOGE("%s: Invalid params", __func__); return NULL; } list_for_each(node, &my_data->custom_mtmx_params_list) { params = node_to_item(node, struct audio_custom_mtmx_params, list); Loading @@ -2790,17 +2797,22 @@ struct audio_custom_mtmx_params * params->info.id == info->id && params->info.ip_channels == info->ip_channels && params->info.op_channels == info->op_channels && params->info.usecase_id == info->usecase_id && params->info.snd_device == info->snd_device) { while (params->info.usecase_id[i] != 0) { if (params->info.usecase_id[i] == info->usecase_id[0]) { ALOGV("%s: found params with ip_ch %d op_ch %d uc_id %d snd_dev %d", __func__, info->ip_channels, info->op_channels, info->usecase_id, info->snd_device); info->usecase_id[0], info->snd_device); *idx = i; return params; } i++; } } } ALOGI("%s: no matching param with id %d ip_ch %d op_ch %d uc_id %d snd_dev %d", __func__, info->id, info->ip_channels, info->op_channels, info->usecase_id, info->snd_device); info->usecase_id[0], info->snd_device); return NULL; } Loading @@ -2810,6 +2822,12 @@ int platform_add_custom_mtmx_params(void *platform, struct platform_data *my_data = (struct platform_data *)platform; struct audio_custom_mtmx_params *params = NULL; uint32_t size = sizeof(*params); int i = 0; if (!info) { ALOGE("%s: Invalid params", __func__); return NULL; } if (info->ip_channels > AUDIO_CHANNEL_COUNT_MAX || info->op_channels > AUDIO_CHANNEL_COUNT_MAX) { Loading @@ -2825,9 +2843,14 @@ int platform_add_custom_mtmx_params(void *platform, return -ENOMEM; } ALOGI("%s: adding mtmx params with id %d ip_ch %d op_ch %d uc_id %d snd_dev %d", ALOGI("%s: adding mtmx params with id %d ip_ch %d op_ch %d snd_dev %d", __func__, info->id, info->ip_channels, info->op_channels, info->usecase_id, info->snd_device); info->snd_device); while (info->usecase_id[i] != 0) { ALOGI("%s: supported usecase ids for added mtmx params %d", __func__, info->usecase_id[i]); i++; } params->info = *info; list_add_tail(&my_data->custom_mtmx_params_list, ¶ms->list); Loading hal/msm8960/platform.c +2 −1 Original line number Diff line number Diff line Loading @@ -357,7 +357,8 @@ struct audio_custom_mtmx_params * platform_get_custom_mtmx_params ( void *platform __unused, struct audio_custom_mtmx_params_info *info __unused struct audio_custom_mtmx_params_info *info __unused, uint32_t *idx __unused ) { ALOGW("%s: not implemented!", __func__); Loading hal/msm8974/platform.c +64 −18 Original line number Diff line number Diff line Loading @@ -3700,11 +3700,18 @@ acdb_init_fail: struct audio_custom_mtmx_params * platform_get_custom_mtmx_params(void *platform, struct audio_custom_mtmx_params_info *info) struct audio_custom_mtmx_params_info *info, uint32_t *idx) { struct platform_data *my_data = (struct platform_data *)platform; struct listnode *node = NULL; struct audio_custom_mtmx_params *params = NULL; int i = 0; if (!info || !idx) { ALOGE("%s: Invalid params", __func__); return NULL; } list_for_each(node, &my_data->custom_mtmx_params_list) { params = node_to_item(node, struct audio_custom_mtmx_params, list); Loading @@ -3712,17 +3719,22 @@ struct audio_custom_mtmx_params * params->info.id == info->id && params->info.ip_channels == info->ip_channels && params->info.op_channels == info->op_channels && params->info.usecase_id == info->usecase_id && params->info.snd_device == info->snd_device) { while (params->info.usecase_id[i] != 0) { if (params->info.usecase_id[i] == info->usecase_id[0]) { ALOGV("%s: found params with ip_ch %d op_ch %d uc_id %d snd_dev %d", __func__, info->ip_channels, info->op_channels, info->usecase_id, info->snd_device); info->usecase_id[0], info->snd_device); *idx = i; return params; } i++; } } } ALOGI("%s: no matching param with id %d ip_ch %d op_ch %d uc_id %d snd_dev %d", __func__, info->id, info->ip_channels, info->op_channels, info->usecase_id, info->snd_device); info->usecase_id[0], info->snd_device); return NULL; } Loading @@ -3732,6 +3744,12 @@ int platform_add_custom_mtmx_params(void *platform, struct platform_data *my_data = (struct platform_data *)platform; struct audio_custom_mtmx_params *params = NULL; uint32_t size = sizeof(*params); int i = 0; if (!info) { ALOGE("%s: Invalid params", __func__); return -EINVAL; } if (info->ip_channels > AUDIO_CHANNEL_COUNT_MAX || info->op_channels > AUDIO_CHANNEL_COUNT_MAX) { Loading @@ -3747,9 +3765,14 @@ int platform_add_custom_mtmx_params(void *platform, return -ENOMEM; } ALOGI("%s: adding mtmx params with id %d ip_ch %d op_ch %d uc_id %d snd_dev %d", ALOGI("%s: adding mtmx params with id %d ip_ch %d op_ch %d snd_dev %d", __func__, info->id, info->ip_channels, info->op_channels, info->usecase_id, info->snd_device); info->snd_device); while (info->usecase_id[i] != 0) { ALOGI("%s: supported usecase ids for added mtmx params %d", __func__, info->usecase_id[i]); i++; } params->info = *info; list_add_tail(&my_data->custom_mtmx_params_list, ¶ms->list); Loading @@ -3773,20 +3796,30 @@ struct audio_custom_mtmx_in_params *platform_get_custom_mtmx_in_params(void *pla struct platform_data *my_data = (struct platform_data *)platform; struct listnode *node = NULL; struct audio_custom_mtmx_in_params *params = NULL; int i = 0; if (!info) { ALOGE("%s: Invalid params", __func__); return NULL; } list_for_each(node, &my_data->custom_mtmx_in_params_list) { params = node_to_item(node, struct audio_custom_mtmx_in_params, list); if (params && params->in_info.op_channels == info->op_channels && params->in_info.usecase_id == info->usecase_id) { params->in_info.op_channels == info->op_channels) { while (params->in_info.usecase_id[i] != 0) { if (params->in_info.usecase_id[i] == info->usecase_id[0]) { ALOGV("%s: found params with op_ch %d uc_id %d", __func__, info->op_channels, info->usecase_id); __func__, info->op_channels, info->usecase_id[0]); return params; } i++; } } } ALOGI("%s: no matching param with op_ch %d uc_id %d", __func__, info->op_channels, info->usecase_id); __func__, info->op_channels, info->usecase_id[0]); return NULL; } Loading @@ -3796,6 +3829,12 @@ int platform_add_custom_mtmx_in_params(void *platform, struct platform_data *my_data = (struct platform_data *)platform; struct audio_custom_mtmx_in_params *params = NULL; uint32_t size = sizeof(*params); int i = 0; if (!info) { ALOGE("%s: Invalid params", __func__); return -EINVAL; } if (info->op_channels > AUDIO_CHANNEL_COUNT_MAX) { ALOGE("%s: unusupported channels in %d", __func__, info->op_channels); Loading @@ -3808,8 +3847,14 @@ int platform_add_custom_mtmx_in_params(void *platform, return -ENOMEM; } ALOGI("%s: adding mtmx in params with op_ch %d uc_id %d", __func__, info->op_channels, info->usecase_id); ALOGI("%s: adding mtmx in params with op_ch %d", __func__, info->op_channels); while (info->usecase_id[i] != 0) { ALOGI("%s: supported usecase ids for added mtmx in params %d", __func__, info->usecase_id[i]); i++; } params->in_info = *info; list_add_tail(&my_data->custom_mtmx_in_params_list, ¶ms->list); Loading Loading @@ -6231,6 +6276,7 @@ snd_device_t platform_get_input_snd_device(void *platform, int str_bitwidth = (in == NULL) ? CODEC_BACKEND_DEFAULT_BIT_WIDTH : in->bit_width; int sample_rate = (in == NULL) ? 8000 : in->sample_rate; struct audio_usecase *usecase = NULL; audio_usecase_t uc_id = (in == NULL) ? USECASE_AUDIO_RECORD : in->usecase; ALOGV("%s: enter: out_device(%#x) in_device(%#x) channel_count (%d) channel_mask (0x%x)", __func__, out_device, in_device, channel_count, channel_mask); Loading Loading @@ -6640,7 +6686,7 @@ snd_device_t platform_get_input_snd_device(void *platform, } } else if (in_device & AUDIO_DEVICE_IN_LOOPBACK) { if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) { usecase = get_usecase_from_list(adev, USECASE_AUDIO_RECORD); usecase = get_usecase_from_list(adev, uc_id); if (usecase == NULL) { ALOGE("%s: Could not find the record usecase", __func__); snd_device = SND_DEVICE_NONE; Loading hal/platform_api.h +6 −4 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ #define PRODUCT_FFV "ffv" #define PRODUCT_ALLPLAY "allplay" #define MAX_IN_CHANNELS 32 #define CUSTOM_MTRX_PARAMS_MAX_USECASE 8 typedef enum { PLATFORM, Loading Loading @@ -103,9 +104,9 @@ struct audio_custom_mtmx_params_info { uint32_t id; uint32_t ip_channels; uint32_t op_channels; uint32_t usecase_id; uint32_t usecase_id[CUSTOM_MTRX_PARAMS_MAX_USECASE]; uint32_t snd_device; char fe_name[128]; uint32_t fe_id[CUSTOM_MTRX_PARAMS_MAX_USECASE]; }; struct audio_custom_mtmx_params { Loading @@ -116,7 +117,7 @@ struct audio_custom_mtmx_params { struct audio_custom_mtmx_in_params_info { uint32_t op_channels; uint32_t usecase_id; uint32_t usecase_id[CUSTOM_MTRX_PARAMS_MAX_USECASE]; }; struct audio_custom_mtmx_params_in_ch_info { Loading Loading @@ -377,7 +378,8 @@ int platform_set_qtime(void *platform, int audio_pcm_device_id, int platform_get_delay(void *platform, int pcm_device_id); struct audio_custom_mtmx_params * platform_get_custom_mtmx_params(void *platform, struct audio_custom_mtmx_params_info *info); struct audio_custom_mtmx_params_info *info, uint32_t *idx); int platform_add_custom_mtmx_params(void *platform, struct audio_custom_mtmx_params_info *info); /* callback functions from platform to common audio HAL */ Loading Loading
hal/audio_extn/audio_extn.c +16 −15 Original line number Diff line number Diff line Loading @@ -475,7 +475,7 @@ void audio_extn_set_custom_mtmx_params_v2(struct audio_device *adev, int num_devices = 0, pcm_device_id = -1, i = 0, ret = 0; snd_device_t new_snd_devices[SND_DEVICE_OUT_END] = {0}; struct audio_backend_cfg backend_cfg = {0}; uint32_t feature_id = 0; uint32_t feature_id = 0, idx = 0; switch(usecase->type) { case PCM_PLAYBACK: Loading Loading @@ -520,7 +520,7 @@ void audio_extn_set_custom_mtmx_params_v2(struct audio_device *adev, * if features like dual_mono is enabled and overrides the default(i.e. 0). */ info.id = feature_id; info.usecase_id = usecase->id; info.usecase_id[0] = usecase->id; for (i = 0, ret = 0; i < num_devices; i++) { info.snd_device = new_snd_devices[i]; platform_get_codec_backend_cfg(adev, info.snd_device, &backend_cfg); Loading @@ -533,7 +533,7 @@ void audio_extn_set_custom_mtmx_params_v2(struct audio_device *adev, info.op_channels = audio_channel_count_from_in_mask( usecase->stream.in->channel_mask); } params = platform_get_custom_mtmx_params(adev->platform, &info); params = platform_get_custom_mtmx_params(adev->platform, &info, &idx); if (params) { if (enable) ret = update_custom_mtmx_coefficients_v2(adev, params, Loading Loading @@ -678,7 +678,8 @@ static int update_custom_mtmx_coefficients_v1(struct audio_device *adev, struct audio_custom_mtmx_in_params *in_params, int pcm_device_id, usecase_type_t type, bool enable) bool enable, uint32_t idx) { struct mixer_ctl *ctl = NULL; char mixer_ctl_name[128] = {0}; Loading @@ -692,13 +693,13 @@ static int update_custom_mtmx_coefficients_v1(struct audio_device *adev, __func__, pinfo->ip_channels, pinfo->op_channels, pcm_device_id, type, enable); if (!strcmp(pinfo->fe_name, "")) { if (pinfo->fe_id[idx] == 0) { ALOGE("%s: Error. no front end defined", __func__); return -EINVAL; } strlcpy(mixer_name_prefix, pinfo->fe_name, sizeof(mixer_name_prefix)); snprintf(mixer_name_prefix, sizeof(mixer_name_prefix), "%s%d", "MultiMedia", pinfo->fe_id[idx]); /* * Enable/Disable channel mixer. * If enable, use params and in_params to configure mixer. Loading Loading @@ -840,7 +841,7 @@ void audio_extn_set_custom_mtmx_params_v1(struct audio_device *adev, struct audio_custom_mtmx_in_params_info in_info = {0}; struct audio_custom_mtmx_in_params *in_params = NULL; int pcm_device_id = -1, ret = 0; uint32_t feature_id = 0; uint32_t feature_id = 0, idx = 0; switch(usecase->type) { case PCM_CAPTURE: Loading @@ -862,26 +863,26 @@ void audio_extn_set_custom_mtmx_params_v1(struct audio_device *adev, ALOGD("%s: snd device %d", __func__, info.snd_device); info.id = feature_id; info.usecase_id = usecase->id; info.usecase_id[0] = usecase->id; info.op_channels = audio_channel_count_from_in_mask( usecase->stream.in->channel_mask); in_info.usecase_id = info.usecase_id; in_info.usecase_id[0] = info.usecase_id[0]; in_info.op_channels = info.op_channels; in_params = platform_get_custom_mtmx_in_params(adev->platform, &in_info); if (!in_params) { ALOGE("%s: Could not get in params for usecase %d, channels %d", __func__, in_info.usecase_id, in_info.op_channels); __func__, in_info.usecase_id[0], in_info.op_channels); return; } info.ip_channels = in_params->ip_channels; ALOGD("%s: ip channels %d, op channels %d", __func__, info.ip_channels, info.op_channels); params = platform_get_custom_mtmx_params(adev->platform, &info); params = platform_get_custom_mtmx_params(adev->platform, &info, &idx); if (params) { ret = update_custom_mtmx_coefficients_v1(adev, params, in_params, pcm_device_id, usecase->type, enable); pcm_device_id, usecase->type, enable, idx); if (ret < 0) ALOGE("%s: error updating mtmx coeffs err:%d", __func__, ret); } Loading @@ -900,12 +901,12 @@ snd_device_t audio_extn_get_loopback_snd_device(struct audio_device *adev, return snd_device; } in_info.usecase_id = usecase->id; in_info.usecase_id[0] = usecase->id; in_info.op_channels = channel_count; in_params = platform_get_custom_mtmx_in_params(adev->platform, &in_info); if (!in_params) { ALOGE("%s: Could not get in params for usecase %d, channels %d", __func__, in_info.usecase_id, in_info.op_channels); __func__, in_info.usecase_id[0], in_info.op_channels); return snd_device; } Loading
hal/msm8916/platform.c +32 −9 Original line number Diff line number Diff line Loading @@ -2778,11 +2778,18 @@ acdb_init_fail: struct audio_custom_mtmx_params * platform_get_custom_mtmx_params(void *platform, struct audio_custom_mtmx_params_info *info) struct audio_custom_mtmx_params_info *info, uint32_t *idx) { struct platform_data *my_data = (struct platform_data *)platform; struct listnode *node = NULL; struct audio_custom_mtmx_params *params = NULL; int i = 0; if (!info || !idx) { ALOGE("%s: Invalid params", __func__); return NULL; } list_for_each(node, &my_data->custom_mtmx_params_list) { params = node_to_item(node, struct audio_custom_mtmx_params, list); Loading @@ -2790,17 +2797,22 @@ struct audio_custom_mtmx_params * params->info.id == info->id && params->info.ip_channels == info->ip_channels && params->info.op_channels == info->op_channels && params->info.usecase_id == info->usecase_id && params->info.snd_device == info->snd_device) { while (params->info.usecase_id[i] != 0) { if (params->info.usecase_id[i] == info->usecase_id[0]) { ALOGV("%s: found params with ip_ch %d op_ch %d uc_id %d snd_dev %d", __func__, info->ip_channels, info->op_channels, info->usecase_id, info->snd_device); info->usecase_id[0], info->snd_device); *idx = i; return params; } i++; } } } ALOGI("%s: no matching param with id %d ip_ch %d op_ch %d uc_id %d snd_dev %d", __func__, info->id, info->ip_channels, info->op_channels, info->usecase_id, info->snd_device); info->usecase_id[0], info->snd_device); return NULL; } Loading @@ -2810,6 +2822,12 @@ int platform_add_custom_mtmx_params(void *platform, struct platform_data *my_data = (struct platform_data *)platform; struct audio_custom_mtmx_params *params = NULL; uint32_t size = sizeof(*params); int i = 0; if (!info) { ALOGE("%s: Invalid params", __func__); return NULL; } if (info->ip_channels > AUDIO_CHANNEL_COUNT_MAX || info->op_channels > AUDIO_CHANNEL_COUNT_MAX) { Loading @@ -2825,9 +2843,14 @@ int platform_add_custom_mtmx_params(void *platform, return -ENOMEM; } ALOGI("%s: adding mtmx params with id %d ip_ch %d op_ch %d uc_id %d snd_dev %d", ALOGI("%s: adding mtmx params with id %d ip_ch %d op_ch %d snd_dev %d", __func__, info->id, info->ip_channels, info->op_channels, info->usecase_id, info->snd_device); info->snd_device); while (info->usecase_id[i] != 0) { ALOGI("%s: supported usecase ids for added mtmx params %d", __func__, info->usecase_id[i]); i++; } params->info = *info; list_add_tail(&my_data->custom_mtmx_params_list, ¶ms->list); Loading
hal/msm8960/platform.c +2 −1 Original line number Diff line number Diff line Loading @@ -357,7 +357,8 @@ struct audio_custom_mtmx_params * platform_get_custom_mtmx_params ( void *platform __unused, struct audio_custom_mtmx_params_info *info __unused struct audio_custom_mtmx_params_info *info __unused, uint32_t *idx __unused ) { ALOGW("%s: not implemented!", __func__); Loading
hal/msm8974/platform.c +64 −18 Original line number Diff line number Diff line Loading @@ -3700,11 +3700,18 @@ acdb_init_fail: struct audio_custom_mtmx_params * platform_get_custom_mtmx_params(void *platform, struct audio_custom_mtmx_params_info *info) struct audio_custom_mtmx_params_info *info, uint32_t *idx) { struct platform_data *my_data = (struct platform_data *)platform; struct listnode *node = NULL; struct audio_custom_mtmx_params *params = NULL; int i = 0; if (!info || !idx) { ALOGE("%s: Invalid params", __func__); return NULL; } list_for_each(node, &my_data->custom_mtmx_params_list) { params = node_to_item(node, struct audio_custom_mtmx_params, list); Loading @@ -3712,17 +3719,22 @@ struct audio_custom_mtmx_params * params->info.id == info->id && params->info.ip_channels == info->ip_channels && params->info.op_channels == info->op_channels && params->info.usecase_id == info->usecase_id && params->info.snd_device == info->snd_device) { while (params->info.usecase_id[i] != 0) { if (params->info.usecase_id[i] == info->usecase_id[0]) { ALOGV("%s: found params with ip_ch %d op_ch %d uc_id %d snd_dev %d", __func__, info->ip_channels, info->op_channels, info->usecase_id, info->snd_device); info->usecase_id[0], info->snd_device); *idx = i; return params; } i++; } } } ALOGI("%s: no matching param with id %d ip_ch %d op_ch %d uc_id %d snd_dev %d", __func__, info->id, info->ip_channels, info->op_channels, info->usecase_id, info->snd_device); info->usecase_id[0], info->snd_device); return NULL; } Loading @@ -3732,6 +3744,12 @@ int platform_add_custom_mtmx_params(void *platform, struct platform_data *my_data = (struct platform_data *)platform; struct audio_custom_mtmx_params *params = NULL; uint32_t size = sizeof(*params); int i = 0; if (!info) { ALOGE("%s: Invalid params", __func__); return -EINVAL; } if (info->ip_channels > AUDIO_CHANNEL_COUNT_MAX || info->op_channels > AUDIO_CHANNEL_COUNT_MAX) { Loading @@ -3747,9 +3765,14 @@ int platform_add_custom_mtmx_params(void *platform, return -ENOMEM; } ALOGI("%s: adding mtmx params with id %d ip_ch %d op_ch %d uc_id %d snd_dev %d", ALOGI("%s: adding mtmx params with id %d ip_ch %d op_ch %d snd_dev %d", __func__, info->id, info->ip_channels, info->op_channels, info->usecase_id, info->snd_device); info->snd_device); while (info->usecase_id[i] != 0) { ALOGI("%s: supported usecase ids for added mtmx params %d", __func__, info->usecase_id[i]); i++; } params->info = *info; list_add_tail(&my_data->custom_mtmx_params_list, ¶ms->list); Loading @@ -3773,20 +3796,30 @@ struct audio_custom_mtmx_in_params *platform_get_custom_mtmx_in_params(void *pla struct platform_data *my_data = (struct platform_data *)platform; struct listnode *node = NULL; struct audio_custom_mtmx_in_params *params = NULL; int i = 0; if (!info) { ALOGE("%s: Invalid params", __func__); return NULL; } list_for_each(node, &my_data->custom_mtmx_in_params_list) { params = node_to_item(node, struct audio_custom_mtmx_in_params, list); if (params && params->in_info.op_channels == info->op_channels && params->in_info.usecase_id == info->usecase_id) { params->in_info.op_channels == info->op_channels) { while (params->in_info.usecase_id[i] != 0) { if (params->in_info.usecase_id[i] == info->usecase_id[0]) { ALOGV("%s: found params with op_ch %d uc_id %d", __func__, info->op_channels, info->usecase_id); __func__, info->op_channels, info->usecase_id[0]); return params; } i++; } } } ALOGI("%s: no matching param with op_ch %d uc_id %d", __func__, info->op_channels, info->usecase_id); __func__, info->op_channels, info->usecase_id[0]); return NULL; } Loading @@ -3796,6 +3829,12 @@ int platform_add_custom_mtmx_in_params(void *platform, struct platform_data *my_data = (struct platform_data *)platform; struct audio_custom_mtmx_in_params *params = NULL; uint32_t size = sizeof(*params); int i = 0; if (!info) { ALOGE("%s: Invalid params", __func__); return -EINVAL; } if (info->op_channels > AUDIO_CHANNEL_COUNT_MAX) { ALOGE("%s: unusupported channels in %d", __func__, info->op_channels); Loading @@ -3808,8 +3847,14 @@ int platform_add_custom_mtmx_in_params(void *platform, return -ENOMEM; } ALOGI("%s: adding mtmx in params with op_ch %d uc_id %d", __func__, info->op_channels, info->usecase_id); ALOGI("%s: adding mtmx in params with op_ch %d", __func__, info->op_channels); while (info->usecase_id[i] != 0) { ALOGI("%s: supported usecase ids for added mtmx in params %d", __func__, info->usecase_id[i]); i++; } params->in_info = *info; list_add_tail(&my_data->custom_mtmx_in_params_list, ¶ms->list); Loading Loading @@ -6231,6 +6276,7 @@ snd_device_t platform_get_input_snd_device(void *platform, int str_bitwidth = (in == NULL) ? CODEC_BACKEND_DEFAULT_BIT_WIDTH : in->bit_width; int sample_rate = (in == NULL) ? 8000 : in->sample_rate; struct audio_usecase *usecase = NULL; audio_usecase_t uc_id = (in == NULL) ? USECASE_AUDIO_RECORD : in->usecase; ALOGV("%s: enter: out_device(%#x) in_device(%#x) channel_count (%d) channel_mask (0x%x)", __func__, out_device, in_device, channel_count, channel_mask); Loading Loading @@ -6640,7 +6686,7 @@ snd_device_t platform_get_input_snd_device(void *platform, } } else if (in_device & AUDIO_DEVICE_IN_LOOPBACK) { if (in_device & AUDIO_DEVICE_IN_BUILTIN_MIC) { usecase = get_usecase_from_list(adev, USECASE_AUDIO_RECORD); usecase = get_usecase_from_list(adev, uc_id); if (usecase == NULL) { ALOGE("%s: Could not find the record usecase", __func__); snd_device = SND_DEVICE_NONE; Loading
hal/platform_api.h +6 −4 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ #define PRODUCT_FFV "ffv" #define PRODUCT_ALLPLAY "allplay" #define MAX_IN_CHANNELS 32 #define CUSTOM_MTRX_PARAMS_MAX_USECASE 8 typedef enum { PLATFORM, Loading Loading @@ -103,9 +104,9 @@ struct audio_custom_mtmx_params_info { uint32_t id; uint32_t ip_channels; uint32_t op_channels; uint32_t usecase_id; uint32_t usecase_id[CUSTOM_MTRX_PARAMS_MAX_USECASE]; uint32_t snd_device; char fe_name[128]; uint32_t fe_id[CUSTOM_MTRX_PARAMS_MAX_USECASE]; }; struct audio_custom_mtmx_params { Loading @@ -116,7 +117,7 @@ struct audio_custom_mtmx_params { struct audio_custom_mtmx_in_params_info { uint32_t op_channels; uint32_t usecase_id; uint32_t usecase_id[CUSTOM_MTRX_PARAMS_MAX_USECASE]; }; struct audio_custom_mtmx_params_in_ch_info { Loading Loading @@ -377,7 +378,8 @@ int platform_set_qtime(void *platform, int audio_pcm_device_id, int platform_get_delay(void *platform, int pcm_device_id); struct audio_custom_mtmx_params * platform_get_custom_mtmx_params(void *platform, struct audio_custom_mtmx_params_info *info); struct audio_custom_mtmx_params_info *info, uint32_t *idx); int platform_add_custom_mtmx_params(void *platform, struct audio_custom_mtmx_params_info *info); /* callback functions from platform to common audio HAL */ Loading