Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92
需求:
由于app采样率设置的是16k,而硬件用的是44.1kHz,为了避免重采样带来的损耗,因此将HAL层改了16kHz,logcat提示如下error:
01-21 23:01:23.047 210 1207 E AudioHardwareTiny: pcm_open() failed: cannot set hw params: Invalid argument
调试:
调用的流程是
pcm_open -> pcm.c
ioctl -> //cmd SNDRV_PCM_IOCTL_HW_PARAMS
snd_pcm_capture_ioctl1 ->
snd_pcm_common_ioctl1 ->
snd_pcm_hw_params_user ->
snd_pcm_hw_params ->
snd_pcm_hw_refine ->
snd_interval_refine ->
snd_interval_checkempty
跑进snd_interval_checkempty()说明传进来的值在经过计算后不符合要求,所以成了empty。往回看snd_interval_refine()的第二个参数constrs_interval(constrs, k)
OS: Android 6.0
Kernel: 3.10.92
需求:
由于app采样率设置的是16k,而硬件用的是44.1kHz,为了避免重采样带来的损耗,因此将HAL层改了16kHz,logcat提示如下error:
01-21 23:01:23.047 210 1207 E AudioHardwareTiny: pcm_open() failed: cannot set hw params: Invalid argument
调试:
调用的流程是
pcm_open -> pcm.c
ioctl -> //cmd SNDRV_PCM_IOCTL_HW_PARAMS
snd_pcm_capture_ioctl1 ->
snd_pcm_common_ioctl1 ->
snd_pcm_hw_params_user ->
snd_pcm_hw_params ->
snd_pcm_hw_refine ->
snd_interval_refine ->
snd_interval_checkempty
跑进snd_interval_checkempty()说明传进来的值在经过计算后不符合要求,所以成了empty。往回看snd_interval_refine()的第二个参数constrs_interval(constrs, k)