Loading hal/audio_extn/spkr_protection.c +28 −21 Original line number Diff line number Diff line Loading @@ -164,7 +164,6 @@ static void spkr_prot_calib_cancel(void *adev) pthread_cond_wait(&handle.spkr_calibcancel_ack, &handle.spkr_calib_cancelack_mutex); pthread_mutex_unlock(&handle.spkr_calib_cancelack_mutex); pthread_mutex_unlock(&handle.mutex_spkr_prot); } ALOGV("%s: Exit", __func__); } Loading Loading @@ -303,6 +302,7 @@ static int spkr_calibrate(int t0) uc_info_rx->out_snd_device = SND_DEVICE_OUT_SPEAKER_PROTECTED; pthread_mutex_lock(&adev->lock); disable_rx = true; list_add_tail(&adev->usecase_list, &uc_info_rx->list); enable_snd_device(adev, SND_DEVICE_OUT_SPEAKER_PROTECTED); enable_audio_route(adev, uc_info_rx); pthread_mutex_unlock(&adev->lock); Loading Loading @@ -333,6 +333,7 @@ static int spkr_calibrate(int t0) pthread_mutex_lock(&adev->lock); disable_tx = true; list_add_tail(&adev->usecase_list, &uc_info_tx->list); enable_snd_device(adev, SND_DEVICE_IN_CAPTURE_VI_FEEDBACK); enable_audio_route(adev, uc_info_tx); pthread_mutex_unlock(&adev->lock); Loading Loading @@ -410,15 +411,19 @@ exit: if (handle.pcm_tx) pcm_close(handle.pcm_tx); handle.pcm_tx = NULL; if (!handle.cancel_spkr_calib) pthread_mutex_lock(&adev->lock); if (disable_rx) { list_remove(&uc_info_rx->list); disable_snd_device(adev, SND_DEVICE_OUT_SPEAKER_PROTECTED); disable_audio_route(adev, uc_info_rx); } if (disable_tx) { list_remove(&uc_info_tx->list); disable_snd_device(adev, SND_DEVICE_IN_CAPTURE_VI_FEEDBACK); disable_audio_route(adev, uc_info_tx); } if (!handle.cancel_spkr_calib) pthread_mutex_unlock(&adev->lock); if (!status.status) { Loading Loading @@ -677,7 +682,7 @@ int audio_extn_get_spkr_prot_snd_device(snd_device_t snd_device) int audio_extn_spkr_prot_start_processing(snd_device_t snd_device) { struct audio_usecase uc_info_tx; struct audio_usecase *uc_info_tx; struct audio_device *adev = handle.adev_handle; int32_t pcm_dev_tx_id = -1, ret = 0; Loading @@ -689,6 +694,7 @@ int audio_extn_spkr_prot_start_processing(snd_device_t snd_device) } spkr_prot_calib_cancel(adev); spkr_prot_set_spkrstatus(true); uc_info_tx = (struct audio_usecase *)calloc(1, sizeof(struct audio_usecase)); ALOGV("%s: snd_device(%d: %s)", __func__, snd_device, platform_get_snd_device_name(SND_DEVICE_OUT_SPEAKER_PROTECTED)); audio_route_apply_and_update_path(adev->audio_route, Loading @@ -696,20 +702,19 @@ int audio_extn_spkr_prot_start_processing(snd_device_t snd_device) pthread_mutex_lock(&handle.mutex_spkr_prot); if (handle.spkr_processing_state == SPKR_PROCESSING_IN_IDLE) { memset(&uc_info_tx, 0 , sizeof(uc_info_tx)); uc_info_tx.id = USECASE_AUDIO_SPKR_CALIB_TX; uc_info_tx.type = PCM_CAPTURE; uc_info_tx.in_snd_device = SND_DEVICE_NONE; uc_info_tx.out_snd_device = SND_DEVICE_NONE; uc_info_tx->id = USECASE_AUDIO_SPKR_CALIB_TX; uc_info_tx->type = PCM_CAPTURE; uc_info_tx->in_snd_device = SND_DEVICE_NONE; uc_info_tx->out_snd_device = SND_DEVICE_NONE; handle.pcm_tx = NULL; list_add_tail(&adev->usecase_list, &uc_info_tx->list); enable_snd_device(adev, SND_DEVICE_IN_CAPTURE_VI_FEEDBACK); enable_audio_route(adev, &uc_info_tx); enable_audio_route(adev, uc_info_tx); pcm_dev_tx_id = platform_get_pcm_device_id(uc_info_tx.id, PCM_CAPTURE); pcm_dev_tx_id = platform_get_pcm_device_id(uc_info_tx->id, PCM_CAPTURE); if (pcm_dev_tx_id < 0) { ALOGE("%s: Invalid pcm device for usecase (%d)", __func__, uc_info_tx.id); __func__, uc_info_tx->id); ret = -ENODEV; goto exit; } Loading @@ -736,8 +741,10 @@ exit: if (handle.pcm_tx) pcm_close(handle.pcm_tx); handle.pcm_tx = NULL; list_remove(&uc_info_tx->list); disable_snd_device(adev, SND_DEVICE_IN_CAPTURE_VI_FEEDBACK); disable_audio_route(adev, &uc_info_tx); disable_audio_route(adev, uc_info_tx); free(uc_info_tx); } else handle.spkr_processing_state = SPKR_PROCESSING_IN_PROGRESS; pthread_mutex_unlock(&handle.mutex_spkr_prot); Loading @@ -747,22 +754,22 @@ exit: void audio_extn_spkr_prot_stop_processing() { struct audio_usecase uc_info_tx; struct audio_usecase *uc_info_tx; struct audio_device *adev = handle.adev_handle; ALOGV("%s: Entry", __func__); spkr_prot_set_spkrstatus(false); pthread_mutex_lock(&handle.mutex_spkr_prot); if (adev && handle.spkr_processing_state == SPKR_PROCESSING_IN_PROGRESS) { memset(&uc_info_tx, 0 , sizeof(uc_info_tx)); uc_info_tx.id = USECASE_AUDIO_SPKR_CALIB_TX; uc_info_tx.type = PCM_CAPTURE; uc_info_tx.in_snd_device = SND_DEVICE_NONE; uc_info_tx.out_snd_device = SND_DEVICE_NONE; uc_info_tx = get_usecase_from_list(adev, USECASE_AUDIO_SPKR_CALIB_TX); if (handle.pcm_tx) pcm_close(handle.pcm_tx); handle.pcm_tx = NULL; disable_snd_device(adev, SND_DEVICE_IN_CAPTURE_VI_FEEDBACK); disable_audio_route(adev, &uc_info_tx); if (uc_info_tx) { list_remove(&uc_info_tx->list); disable_audio_route(adev, uc_info_tx); free(uc_info_tx); } } handle.spkr_processing_state = SPKR_PROCESSING_IN_IDLE; pthread_mutex_unlock(&handle.mutex_spkr_prot); Loading Loading
hal/audio_extn/spkr_protection.c +28 −21 Original line number Diff line number Diff line Loading @@ -164,7 +164,6 @@ static void spkr_prot_calib_cancel(void *adev) pthread_cond_wait(&handle.spkr_calibcancel_ack, &handle.spkr_calib_cancelack_mutex); pthread_mutex_unlock(&handle.spkr_calib_cancelack_mutex); pthread_mutex_unlock(&handle.mutex_spkr_prot); } ALOGV("%s: Exit", __func__); } Loading Loading @@ -303,6 +302,7 @@ static int spkr_calibrate(int t0) uc_info_rx->out_snd_device = SND_DEVICE_OUT_SPEAKER_PROTECTED; pthread_mutex_lock(&adev->lock); disable_rx = true; list_add_tail(&adev->usecase_list, &uc_info_rx->list); enable_snd_device(adev, SND_DEVICE_OUT_SPEAKER_PROTECTED); enable_audio_route(adev, uc_info_rx); pthread_mutex_unlock(&adev->lock); Loading Loading @@ -333,6 +333,7 @@ static int spkr_calibrate(int t0) pthread_mutex_lock(&adev->lock); disable_tx = true; list_add_tail(&adev->usecase_list, &uc_info_tx->list); enable_snd_device(adev, SND_DEVICE_IN_CAPTURE_VI_FEEDBACK); enable_audio_route(adev, uc_info_tx); pthread_mutex_unlock(&adev->lock); Loading Loading @@ -410,15 +411,19 @@ exit: if (handle.pcm_tx) pcm_close(handle.pcm_tx); handle.pcm_tx = NULL; if (!handle.cancel_spkr_calib) pthread_mutex_lock(&adev->lock); if (disable_rx) { list_remove(&uc_info_rx->list); disable_snd_device(adev, SND_DEVICE_OUT_SPEAKER_PROTECTED); disable_audio_route(adev, uc_info_rx); } if (disable_tx) { list_remove(&uc_info_tx->list); disable_snd_device(adev, SND_DEVICE_IN_CAPTURE_VI_FEEDBACK); disable_audio_route(adev, uc_info_tx); } if (!handle.cancel_spkr_calib) pthread_mutex_unlock(&adev->lock); if (!status.status) { Loading Loading @@ -677,7 +682,7 @@ int audio_extn_get_spkr_prot_snd_device(snd_device_t snd_device) int audio_extn_spkr_prot_start_processing(snd_device_t snd_device) { struct audio_usecase uc_info_tx; struct audio_usecase *uc_info_tx; struct audio_device *adev = handle.adev_handle; int32_t pcm_dev_tx_id = -1, ret = 0; Loading @@ -689,6 +694,7 @@ int audio_extn_spkr_prot_start_processing(snd_device_t snd_device) } spkr_prot_calib_cancel(adev); spkr_prot_set_spkrstatus(true); uc_info_tx = (struct audio_usecase *)calloc(1, sizeof(struct audio_usecase)); ALOGV("%s: snd_device(%d: %s)", __func__, snd_device, platform_get_snd_device_name(SND_DEVICE_OUT_SPEAKER_PROTECTED)); audio_route_apply_and_update_path(adev->audio_route, Loading @@ -696,20 +702,19 @@ int audio_extn_spkr_prot_start_processing(snd_device_t snd_device) pthread_mutex_lock(&handle.mutex_spkr_prot); if (handle.spkr_processing_state == SPKR_PROCESSING_IN_IDLE) { memset(&uc_info_tx, 0 , sizeof(uc_info_tx)); uc_info_tx.id = USECASE_AUDIO_SPKR_CALIB_TX; uc_info_tx.type = PCM_CAPTURE; uc_info_tx.in_snd_device = SND_DEVICE_NONE; uc_info_tx.out_snd_device = SND_DEVICE_NONE; uc_info_tx->id = USECASE_AUDIO_SPKR_CALIB_TX; uc_info_tx->type = PCM_CAPTURE; uc_info_tx->in_snd_device = SND_DEVICE_NONE; uc_info_tx->out_snd_device = SND_DEVICE_NONE; handle.pcm_tx = NULL; list_add_tail(&adev->usecase_list, &uc_info_tx->list); enable_snd_device(adev, SND_DEVICE_IN_CAPTURE_VI_FEEDBACK); enable_audio_route(adev, &uc_info_tx); enable_audio_route(adev, uc_info_tx); pcm_dev_tx_id = platform_get_pcm_device_id(uc_info_tx.id, PCM_CAPTURE); pcm_dev_tx_id = platform_get_pcm_device_id(uc_info_tx->id, PCM_CAPTURE); if (pcm_dev_tx_id < 0) { ALOGE("%s: Invalid pcm device for usecase (%d)", __func__, uc_info_tx.id); __func__, uc_info_tx->id); ret = -ENODEV; goto exit; } Loading @@ -736,8 +741,10 @@ exit: if (handle.pcm_tx) pcm_close(handle.pcm_tx); handle.pcm_tx = NULL; list_remove(&uc_info_tx->list); disable_snd_device(adev, SND_DEVICE_IN_CAPTURE_VI_FEEDBACK); disable_audio_route(adev, &uc_info_tx); disable_audio_route(adev, uc_info_tx); free(uc_info_tx); } else handle.spkr_processing_state = SPKR_PROCESSING_IN_PROGRESS; pthread_mutex_unlock(&handle.mutex_spkr_prot); Loading @@ -747,22 +754,22 @@ exit: void audio_extn_spkr_prot_stop_processing() { struct audio_usecase uc_info_tx; struct audio_usecase *uc_info_tx; struct audio_device *adev = handle.adev_handle; ALOGV("%s: Entry", __func__); spkr_prot_set_spkrstatus(false); pthread_mutex_lock(&handle.mutex_spkr_prot); if (adev && handle.spkr_processing_state == SPKR_PROCESSING_IN_PROGRESS) { memset(&uc_info_tx, 0 , sizeof(uc_info_tx)); uc_info_tx.id = USECASE_AUDIO_SPKR_CALIB_TX; uc_info_tx.type = PCM_CAPTURE; uc_info_tx.in_snd_device = SND_DEVICE_NONE; uc_info_tx.out_snd_device = SND_DEVICE_NONE; uc_info_tx = get_usecase_from_list(adev, USECASE_AUDIO_SPKR_CALIB_TX); if (handle.pcm_tx) pcm_close(handle.pcm_tx); handle.pcm_tx = NULL; disable_snd_device(adev, SND_DEVICE_IN_CAPTURE_VI_FEEDBACK); disable_audio_route(adev, &uc_info_tx); if (uc_info_tx) { list_remove(&uc_info_tx->list); disable_audio_route(adev, uc_info_tx); free(uc_info_tx); } } handle.spkr_processing_state = SPKR_PROCESSING_IN_IDLE; pthread_mutex_unlock(&handle.mutex_spkr_prot); Loading