ALSA backend + Google Meeting + chrome

Hans Petter Selasky hps at selasky.org
Wed Jul 17 20:35:45 UTC 2019


Hi,

FYI:

This stuff is almost working. The only problem is that the audio thread 
is using a bit too small output buffer 10ms that the typical USB headset 
will handle. Is there a way to enlarge the output audio buffer?

>   1574 100324 chrome   0.950986 RET   read 4
>   1574 100324 chrome   0.950989 CALL  fcntl(0xc1,F_GETFL,0x4)
>   1574 100324 chrome   0.950989 RET   fcntl 2
>   1574 100324 chrome   0.950990 CALL  fcntl(0xc1,F_SETFL,0x6<O_RDWR|O_NONBLOCK>)
>   1574 100324 chrome   0.950991 RET   fcntl 0
>   1574 100324 chrome   0.950992 CALL  write(0xc1,0x7fffde5f06ec,0x4)
>   1574 100324 chrome   0.950995 GIO   fd 193 wrote 4 bytes
>   1574 100324 chrome   0.950996 RET   write 4
>   1574 100324 chrome   0.950997 CALL  fcntl(0xc1,F_SETFL,0x2<O_RDWR>)
>   1574 100324 chrome   0.951000 RET   fcntl 0
>   1574 100324 chrome   0.951007 CALL  write(0xc5,0x823c67000,0x780)
>   1574 100324 chrome   0.951011 GIO   fd 197 wrote 1920 bytes
>   1574 100324 chrome   0.951013 RET   write 1920/0x780
>   1574 100324 chrome   0.951020 CALL  _umtx_op(0x809ee2140,UMTX_OP_WAIT_UINT_PRIVATE,0,0x18,0x7fffde5f0be8)
>   1574 100324 chrome   0.970964 RET   _umtx_op -1 errno 60 Operation timed out
>   1574 100324 chrome   0.970990 CALL  poll(0x7fffde5f0618,0x1,0x14)
>   1574 100324 chrome   0.970992 RET   poll 1
>   1574 100324 chrome   0.970993 CALL  ioctl(0xc1,FIONREAD,0x7fffde5f05d4)
>   1574 100324 chrome   0.970995 RET   ioctl 0
>   1574 100324 chrome   0.970996 CALL  read(0xc1,0x7fffde5f06b4,0x4)
>   1574 100324 chrome   0.970998 GIO   fd 193 read 4 bytes

I'm also thinking we may be able to fix this in the kernel, by fooling 
devices with small writes to see an update in the TX ring when issuing 
SNDCTL_DSP_GETOSPACE:

>   1574 100324 chrome   0.971046 CALL  ioctl(0xc5,SNDCTL_DSP_SETTRIGGER,0x7fffde5f08d4)
>   1574 100324 chrome   0.971049 RET   ioctl 0
>   1574 100324 chrome   0.971051 CALL  ioctl(0xc5,SNDCTL_DSP_GETOSPACE,0x7fffde5f08e8)
>   1574 100324 chrome   0.971052 RET   ioctl 0
>   1574 100324 chrome   0.971053 CALL  ioctl(0xc5,SNDCTL_DSP_GETOPTR,0x7fffde5f08d8)
>   1574 100324 chrome   0.971054 RET   ioctl 0
>   1574 100324 chrome   0.971057 CALL  ioctl(0xc5,SNDCTL_DSP_GETOPTR,0x7fffde5f08f0)
>   1574 100324 chrome   0.971058 RET   ioctl 0
>   1574 100324 chrome   0.971061 CALL  ioctl(0xc5,SNDCTL_DSP_GETOSPACE,0x7fffde5f08e0)
>   1574 100324 chrome   0.971078 RET   ioctl 0
>   1574 100324 chrome   0.971085 CALL  _umtx_op(0x809ee2140,UMTX_OP_WAIT_UINT_PRIVATE,0,0x18,0x7fffde5f0be8)
>   1574 100324 chrome   0.976962 RET   _umtx_op -1 errno 60 Operation timed out
>   1574 100324 chrome   0.976972 CALL  ioctl(0xc5,SNDCTL_DSP_GETOPTR,0x7fffde5f0800)
>   1574 100324 chrome   0.976975 RET   ioctl 0
>   1574 100324 chrome   0.976976 CALL  ioctl(0xc5,SNDCTL_DSP_GETOSPACE,0x7fffde5f07f0)
>   1574 100324 chrome   0.976977 RET   ioctl 0
>   1574 100324 chrome   0.976979 CALL  ioctl(0xc5,SNDCTL_DSP_GETOPTR,0x7fffde5f08f0)
>   1574 100324 chrome   0.976979 RET   ioctl 0
>   1574 100324 chrome   0.976980 CALL  ioctl(0xc5,SNDCTL_DSP_GETOSPACE,0x7fffde5f08e0)
>   1574 100324 chrome   0.976981 RET   ioctl 0
>   1574 100324 chrome   0.976985 CALL  _umtx_op(0x809ee2140,UMTX_OP_WAIT_UINT_PRIVATE,0,0x18,0x7fffde5f0be8)
>   1574 100324 chrome   0.982961 RET   _umtx_op -1 errno 60 Operation timed out
>   1574 100324 chrome   0.982970 CALL  ioctl(0xc5,SNDCTL_DSP_GETOPTR,0x7fffde5f0800)
>   1574 100324 chrome   0.982971 RET   ioctl 0
>   1574 100324 chrome   0.982974 CALL  ioctl(0xc5,SNDCTL_DSP_GETOPTR,0x7fffde5f08e0)
>   1574 100324 chrome   0.982975 RET   ioctl 0
>   1574 100324 chrome   0.982976 CALL  ioctl(0xc5,SNDCTL_DSP_GETOSPACE,0x7fffde5f08d0)
>   1574 100324 chrome   0.982976 RET   ioctl 0
>   1574 100324 chrome   0.982977 CALL  ioctl(0xc5,SNDCTL_DSP_GETOPTR,0x7fffde5f08d0)
>   1574 100324 chrome   0.982978 RET   ioctl 0
>   1574 100324 chrome   0.982979 CALL  ioctl(0xc5,SNDCTL_DSP_GETOSPACE,0x7fffde5f08c0)
>   1574 100324 chrome   0.982980 RET   ioctl 0

I've implemented something similar for virtual_oss (pkg install 
virtual_oss) which might be worth a try:

> virtual_oss -S \
> 	-c 2 -r 48000 -b 16 -s 384 -f /dev/dsp3 \
> 	-a 0 -b 16 -c 2 -m 0,0,1,1 -d dsp \
> 	-t vdsp.ctl

--HPS


More information about the freebsd-chromium mailing list