My audio capture is misbehaving. Normally, when my app reads 16bit pcm at 48000khz the data arrives normally, but about once every couple minutes I get a huge chunk of data. It looks like a buffering problem.
Our codec supports 24bit capture in a 32bit I2s window ( 32bits left, 32 bits right). I've modified the sound/soc/davinci/davinci-* drivers so that the hardware aways captures 32 bits and I'm using ALSA to truncate the the data to 16bit PCM.
here is a normal run:
~ # audcap -z 8192 -d 2
-- force capture size to 8192/0x2000
-- duration set to 2.000000
Audcap: rate=48000, samp_size=2, num_channels=2
buffer is 0x4/4 bytes
Starting Capture using buffer_sz=8192:
0.00: 125235.05 bps (31308.76 samp/s): 8192 in 0.065s (er= 53.31%)!! max@00011c=07f3
0.04: 192052.51 bps (48013.13 samp/s): 8192 in 0.043s (er= -0.03%) max@0000e2=07f2
0.09: 192079.53 bps (48019.88 samp/s): 8192 in 0.043s (er= -0.04%) max@00008a=07f2
0.13: 192097.55 bps (48024.39 samp/s): 8192 in 0.043s (er= -0.05%) max@00001c=07f2
0.17: 192048.01 bps (48012.00 samp/s): 8192 in 0.043s (er= -0.03%) max@0000fa=07f2
0.21: 191850.12 bps (47962.53 samp/s): 8192 in 0.043s (er= 0.08%) max@000b74=07f3
0.26: 192793.77 bps (48198.44 samp/s): 8192 in 0.042s (er= -0.41%) max@0000fe=07f2
0.30: 192066.02 bps (48016.51 samp/s): 8192 in 0.043s (er= -0.03%) max@000446=07f3
0.34: 192147.11 bps (48036.78 samp/s): 8192 in 0.043s (er= -0.08%) max@0008c0=07f3
0.38: 192698.53 bps (48174.63 samp/s): 8192 in 0.043s (er= -0.36%) max@000e66=07f3
0.43: 191967.01 bps (47991.75 samp/s): 8192 in 0.043s (er= 0.02%) max@000fdc=07f3
0.47: 192151.62 bps (48037.90 samp/s): 8192 in 0.043s (er= -0.08%) max@000288=07f3
0.51: 192079.53 bps (48019.88 samp/s): 8192 in 0.043s (er= -0.04%) max@000288=07f3
0.55: 191679.54 bps (47919.88 samp/s): 8192 in 0.043s (er= 0.17%) max@000268=07f3
0.60: 192472.16 bps (48118.04 samp/s): 8192 in 0.043s (er= -0.25%) max@000230=07f3
0.64: 192075.03 bps (48018.76 samp/s): 8192 in 0.043s (er= -0.04%) max@0001e0=07f3
0.68: 192016.50 bps (48004.13 samp/s): 8192 in 0.043s (er= -0.01%) max@00017a=07f3
0.73: 191922.03 bps (47980.51 samp/s): 8192 in 0.043s (er= 0.04%) max@0000fa=07f3
0.77: 192223.76 bps (48055.94 samp/s): 8192 in 0.043s (er= -0.12%) max@000058=07f3
0.81: 192106.56 bps (48026.64 samp/s): 8192 in 0.043s (er= -0.06%) max@000228=07f3
0.85: 191782.75 bps (47945.69 samp/s): 8192 in 0.043s (er= 0.11%) max@0003da=07f3
0.90: 192327.56 bps (48081.89 samp/s): 8192 in 0.043s (er= -0.17%) max@00006a=07f3
0.94: 192057.02 bps (48014.25 samp/s): 8192 in 0.043s (er= -0.03%) max@0001e8=07f3
0.98: 192075.03 bps (48018.76 samp/s): 8192 in 0.043s (er= -0.04%) max@0000c8=07f3
1.02: 191967.01 bps (47991.75 samp/s): 8192 in 0.043s (er= 0.02%) max@000206=07f3
1.07: 192178.67 bps (48044.67 samp/s): 8192 in 0.043s (er= -0.09%) max@0000b6=07f3
1.11: 192102.05 bps (48025.51 samp/s): 8192 in 0.043s (er= -0.05%) max@000084=07f3
1.15: 192039.01 bps (48009.75 samp/s): 8192 in 0.043s (er= -0.02%) max@00016c=07f3
1.19: 191719.91 bps (47929.98 samp/s): 8192 in 0.043s (er= 0.15%) max@00010a=07f3
1.24: 192192.19 bps (48048.05 samp/s): 8192 in 0.043s (er= -0.10%) max@0002f2=07f3
1.28: 192061.52 bps (48015.38 samp/s): 8192 in 0.043s (er= -0.03%) max@000250=07f3
1.32: 192277.90 bps (48069.48 samp/s): 8192 in 0.043s (er= -0.14%) max@00006e=07f3
1.37: 192021.00 bps (48005.25 samp/s): 8192 in 0.043s (er= -0.01%) max@0000d0=07f3
1.41: 192052.51 bps (48013.13 samp/s): 8192 in 0.043s (er= -0.03%) max@000114=07f3
1.45: 192147.11 bps (48036.78 samp/s): 8192 in 0.043s (er= -0.08%) max@000140=07f3
1.49: 192057.02 bps (48014.25 samp/s): 8192 in 0.043s (er= -0.03%) max@00014a=07f3
1.54: 192052.51 bps (48013.13 samp/s): 8192 in 0.043s (er= -0.03%) max@00001a=07f3
1.58: 192106.56 bps (48026.64 samp/s): 8192 in 0.043s (er= -0.06%) max@000114=07f3
1.62: 192079.53 bps (48019.88 samp/s): 8192 in 0.043s (er= -0.04%) max@0000d2=07f3
1.66: 192088.54 bps (48022.14 samp/s): 8192 in 0.043s (er= -0.05%) max@000076=07f3
1.71: 192057.02 bps (48014.25 samp/s): 8192 in 0.043s (er= -0.03%) max@000002=07f3
1.75: 192030.00 bps (48007.50 samp/s): 8192 in 0.043s (er= -0.02%) max@0001a4=07f3
1.79: 191827.65 bps (47956.91 samp/s): 8192 in 0.043s (er= 0.09%) max@0000f6=07f3
1.83: 191935.52 bps (47983.88 samp/s): 8192 in 0.043s (er= 0.03%) max@000f5e=07f4
1.88: 192472.16 bps (48118.04 samp/s): 8192 in 0.043s (er= -0.25%) max@000184=07f3
1.92: 191841.13 bps (47960.28 samp/s): 8192 in 0.043s (er= 0.08%) max@000090=07f3
1.96: 192268.88 bps (48067.22 samp/s): 8192 in 0.043s (er= -0.14%) max@000800=07f4
... total capture time is 2.02883, total error = 1.442 %
~ #
I am reading 8k buffers and the data comes in at a very regular rate
Here is an example of a the rate issue:
20.74: 191917.54 bps (47979.38 samp/s): 8192 in 0.043s (er= 0.04%) max@00008e=07f2
20.78: 192052.51 bps (48013.13 samp/s): 8192 in 0.043s (er= -0.03%) max@000092=07f2
20.82: 192088.54 bps (48022.14 samp/s): 8192 in 0.043s (er= -0.05%) max@000082=07f2
20.86: 192228.27 bps (48057.07 samp/s): 8192 in 0.043s (er= -0.12%) max@000058=07f2
20.91: 191877.08 bps (47969.27 samp/s): 8192 in 0.043s (er= 0.06%) max@0004c8=07f3
20.95: 192102.05 bps (48025.51 samp/s): 8192 in 0.043s (er= -0.05%) max@00014c=07f3
20.99: 192093.05 bps (48023.26 samp/s): 8192 in 0.043s (er= -0.05%) max@0000d2=07f3
21.03: 251798.12 bps (62949.53 samp/s): 8192 in 0.033s (er=-23.75%)!! max@00003a=07f3
21.08: 192214.74 bps (48053.68 samp/s): 8192 in 0.043s (er= -0.11%) max@000ece=07f3
21.12: 192003.00 bps (48000.75 samp/s): 8192 in 0.043s (er= -0.00%) max@0001d4=07f3
21.16: 191832.15 bps (47958.04 samp/s): 8192 in 0.043s (er= 0.09%) max@0000f4=07f2
21.21: 192354.65 bps (48088.66 samp/s): 8192 in 0.043s (er= -0.18%) max@0002f8=07f3
21.25: 192057.02 bps (48014.25 samp/s): 8192 in 0.043s (er= -0.03%) max@000066=07f2
21.29: 192079.53 bps (48019.88 samp/s): 8192 in 0.043s (er= -0.04%) max@000c88=07f3
for this 8k capture it looks like I'm getting the full block in 33ms -- or about 63Khz instead of 48Khz.
Had anybody seen this issue or know of a fix?
I am using 'Linux 10.8.104.71 2.6.32-rc2-davinci1' ( PSP37) kernel.
Brett