On Tue, Sep 10, 2019 at 9:48 AM Pavel Hofman pavhofman@gmail.com wrote:
Thanks. IIUC, if I call snd_pcm_status() in that mmap_commit method, get data between e.g. 10 seconds, and divide the increase of status._ptr https://github.com/michaelwu/alsa-lib/blob/afb2fbd0e554e42e51325c3197a176ea9... by increase of status.tstamp, I should get the the most precise available soundcard rate estimate referenced to system time.
Upon hard-coding params->tstamp_mode = SND_PCM_TSTAMP_ENABLE in snd_pcm_hw_sw_params, the snd_pcm_hw_status method started returning hw_ptr and tstamp. The variance of the rate calculated by these values is perfectly acceptable for my purpose, I will use this method. 10 sec averages of the previously "jittery" mmap arecord:
STATUS MMAP: time: 6679.12, card = 1, device = 0, averaged samplerate: 191995.485933 STATUS MMAP: time: 6689.14, card = 1, device = 0, averaged samplerate: 191995.833616 STATUS MMAP: time: 6699.17, card = 1, device = 0, averaged samplerate: 191995.589371 STATUS MMAP: time: 6709.20, card = 1, device = 0, averaged samplerate: 191995.647669 STATUS MMAP: time: 6719.22, card = 1, device = 0, averaged samplerate: 191995.740024 STATUS MMAP: time: 6729.25, card = 1, device = 0, averaged samplerate: 191995.709675 STATUS MMAP: time: 6739.28, card = 1, device = 0, averaged samplerate: 191995.588850 STATUS MMAP: time: 6749.30, card = 1, device = 0, averaged samplerate: 191995.706994 STATUS MMAP: time: 6759.33, card = 1, device = 0, averaged samplerate: 191995.641393 STATUS MMAP: time: 6769.36, card = 1, device = 0, averaged samplerate: 191995.530104 STATUS MMAP: time: 6779.38, card = 1, device = 0, averaged samplerate: 191995.764419
Do you think there is any chance a code generating the average throughput into some file identified with card/device IDs, all of that enabled by some environment variable, would be acceptable into upstream pcm_hw.c? It will be a key part of the working async usb gadget. The current version https://github.com/torvalds/linux/blob/master/drivers/usb/gadget/function/f_... does not comply with USB-audio v. 2 specs due to the missing async feedback endpoint, and works only for the adaptive mode (requires resampling).
Thanks,
Pavel.
Thanks.
Pavel.