snd_pcm_open(&playback_handle_pcm, "default", SND_PCM_STREAM_PLAYBACK, 0);snd_pcm_hw_params_malloc(&hw_params_pcm);
snd_pcm_hw_params_any(playback_handle_pcm, hw_params_pcm);
snd_pcm_hw_params_set_access(playback_handle_pcm, hw_params_pcm, SND_PCM_ACCESS_RW_INTERLEAVED);
snd_pcm_hw_params_set_format(playback_handle_pcm, hw_params_pcm, (snd_pcm_format_t)fromat);
snd_pcm_hw_params_set_rate_near(playback_handle_pcm, hw_params_pcm, (unsigned int *)&sampleRate, 0);
periodsize = 480 * 100 * 8; //set alsa buffer to 4bytes * 32(peirod) * 100 = less than 100ms
chunk_size_pcm = 480; //set peirod size to 32
snd_pcm_hw_params_set_buffer_size_near(playback_handle_pcm, hw_params_pcm, &periodsize);
snd_pcm_hw_params_set_period_size_near(playback_handle_pcm, hw_params_pcm, &chunk_size_pcm, 0);
snd_pcm_hw_params_get_period_size(hw_params_pcm, &chunk_size_pcm, 0);
snd_pcm_hw_params_get_buffer_size(hw_params_pcm, &periodsize);
ALOGI("chunk_size_pcm:" GREEN "%ld %ld" NONE "\r\n", chunk_size_pcm,periodsize);
snd_pcm_hw_params_set_channels(playback_handle_pcm, hw_params_pcm, curChannelsPCM);
snd_pcm_hw_params(playback_handle_pcm, hw_params_pcm);
snd_pcm_hw_params_get_period_size(hw_params_pcm, &chunk_size_pcm, 0);
snd_pcm_hw_params_free(hw_params_pcm);
snd_pcm_prepare(playback_handle_pcm);
the input audio format is S32 and actually 16bit or 24bit data, come to kernel the sysclk and fromat i have checked correctly set. and the issue could be from kernel alsa core?
please help me, This issue almost kill me...
here is the issue happen picture you can see the i2s audio data is corrupted.