[alsa-devel] [PATCH - dmix v3 0/1] pcm: dmix: Align slave_hw_ptr to slave period boundary
Timo Wischer
twischer at de.adit-jv.com
Tue Nov 6 13:48:08 CET 2018
On 10/30/18 14:21, Takashi Iwai wrote:
> Yes, and is this correct? Suppose you start a stream at the position
> one sample before the next period (psize * N + (psize-1)). Then
> slave_hw_ptr is psize * N. At the next moment, the dpcm->hw.ptr
> reaches to psize * (N+1), and snd_pcm_dmix_sync_ptr() gets called.
> Then slave_hw_ptr will be updated to psize * (N+1) although only one
> sample has been processed?
I have created a spreadsheet to simulate the behavior of dmix (see
attachment). I used this sheet to test different corner cases with
different implementations.
Column B-D describes 3 corner cases with the original implementation.
Column E-H describes the corner cases with patch v2 applied and column
I-L describes the corner cases with patch v3.
With patch v3 I was not able to find a corner case which would fail. All
our internal audio test are also passing fine.
The corner cases are described in the form
N*period+period-1
(N+1)period+1
(N+2)period+1
The first line describes the value of dmix->spcm->hw.ptr when
snd_pcm_dmix_start() will be called.
The second line describes the hw_ptr when poll() returns for the first
time and the third line describes the hw_ptr when poll() returns for the
second time.
In column B is the issue case described when the patch is not applied.
snd_pcm_avail() returns 2 frames only (B27) but the buffer only contains
3 frames (B18).
Therefore up to 5 frames are available (a buffer size of 8 frames is
choosen).
The issue case of patch v2 is shown in column H. snd_pcm_avail() returns
7 frames (H46) but the buffer contains still 3 frames (H37). Therefore
there are only 5 frames free to overwrite.
Do you see any corner cases which I missed or any other drawbacks?
Best regards and thanks for your time
Timo
-------------- next part --------------
A non-text attachment was scrubbed...
Name: dmix_corner_cases.ods
Type: application/vnd.oasis.opendocument.spreadsheet
Size: 19794 bytes
Desc: not available
URL: <http://mailman.alsa-project.org/pipermail/alsa-devel/attachments/20181106/70235063/attachment-0001.ods>
More information about the Alsa-devel
mailing list