it seem that the value return by snd_pcm_hw_params_get_buffer_size_max() depend on /proc/asound/Intel/pcm0p/sub0/prealloc
Is it a bug in alsa-lib or snd-hda-intel driver
refer to pulseaudio/src/modules/alsa/alsa-util.c
if ((ret = snd_pcm_hw_params_get_buffer_size_max(hwparams, &max_frames)) < 0) pa_log_warn("snd_pcm_hw_params_get_buffer_size_max() failed: %s", pa_alsa_strerror(ret)); else pa_log_debug("Maximum hw buffer size is %lu ms", (long unsigned) (max_frames * PA_MSEC_PER_SEC / _ss.rate));
cat /proc/asound/Intel/pcm0p/sub0/prealloc 64
D: alsa-util.c: Checking for superset analog-stereo (front:%f) D: alsa-util.c: Trying front:1 with SND_PCM_NO_AUTO_FORMAT ... D: alsa-util.c: Managed to open front:1 I: alsa-util.c: Trying to disable ALSA period wakeups, using timers only D: alsa-util.c: Maximum hw buffer size is 371 ms D: alsa-util.c: Set buffer size first (to 88200 samples), period size second (to 88200 samples). I: alsa-util.c: ALSA period wakeups disabled I: alsa-source.c: Successfully opened device front:1. I: alsa-source.c: Selected mapping 'Analog Stereo' (analog-stereo). I: alsa-source.c: Successfully enabled mmap() mode. I: alsa-source.c: Successfully enabled timer-based scheduling mode.
echo 32768 > /proc/asound/Intel/pcm0p/sub0/prealloc
D: alsa-util.c: Checking for superset analog-stereo (front:%f) D: alsa-util.c: Trying front:1 with SND_PCM_NO_AUTO_FORMAT ... D: alsa-util.c: Managed to open front:1 I: alsa-util.c: Trying to disable ALSA period wakeups, using timers only D: alsa-util.c: Maximum hw buffer size is 190217 ms D: alsa-util.c: Set buffer size first (to 88200 samples), period size second (to 88200 samples). I: alsa-util.c: ALSA period wakeups disabled I: alsa-sink.c: Successfully opened device front:1. I: alsa-sink.c: Selected mapping 'Analog Stereo' (analog-stereo). I: alsa-sink.c: Successfully enabled mmap() mode. I: alsa-sink.c: Successfully enabled timer-based scheduling mode.