mirror of
https://github.com/alsa-project/alsa-lib.git
synced 2025-10-29 05:40:25 -04:00
Fixed residual transfers
This commit is contained in:
parent
a5017e9ef0
commit
35632e8dd8
1 changed files with 27 additions and 16 deletions
|
|
@ -418,14 +418,20 @@ static ssize_t snd_pcm_rate_write_areas(snd_pcm_t *pcm,
|
||||||
pcm->channels,
|
pcm->channels,
|
||||||
rate->get_idx, rate->put_idx,
|
rate->get_idx, rate->put_idx,
|
||||||
rate->pitch, rate->states);
|
rate->pitch, rate->states);
|
||||||
err = snd_pcm_mmap_forward(slave, dst_frames);
|
assert(src_frames || dst_frames);
|
||||||
if (err < 0)
|
if (dst_frames > 0) {
|
||||||
break;
|
err = snd_pcm_mmap_forward(slave, dst_frames);
|
||||||
assert((size_t)err == dst_frames);
|
if (err < 0)
|
||||||
client_offset += src_frames;
|
break;
|
||||||
client_xfer += src_frames;
|
assert((size_t)err == dst_frames);
|
||||||
snd_pcm_mmap_hw_forward(pcm, src_frames);
|
slave_xfer += dst_frames;
|
||||||
slave_xfer += dst_frames;
|
}
|
||||||
|
|
||||||
|
if (src_frames > 0) {
|
||||||
|
client_offset += src_frames;
|
||||||
|
client_xfer += src_frames;
|
||||||
|
snd_pcm_mmap_hw_forward(pcm, src_frames);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (client_xfer > 0 || slave_xfer > 0) {
|
if (client_xfer > 0 || slave_xfer > 0) {
|
||||||
if (slave_sizep)
|
if (slave_sizep)
|
||||||
|
|
@ -464,14 +470,19 @@ static ssize_t snd_pcm_rate_read_areas(snd_pcm_t *pcm,
|
||||||
pcm->channels,
|
pcm->channels,
|
||||||
rate->get_idx, rate->put_idx,
|
rate->get_idx, rate->put_idx,
|
||||||
rate->pitch, rate->states);
|
rate->pitch, rate->states);
|
||||||
err = snd_pcm_mmap_forward(slave, src_frames);
|
assert(src_frames || dst_frames);
|
||||||
if (err < 0)
|
if (src_frames > 0) {
|
||||||
break;
|
err = snd_pcm_mmap_forward(slave, src_frames);
|
||||||
assert((size_t)err == src_frames);
|
if (err < 0)
|
||||||
client_offset += dst_frames;
|
break;
|
||||||
client_xfer += dst_frames;
|
assert((size_t)err == src_frames);
|
||||||
snd_pcm_mmap_hw_forward(pcm, dst_frames);
|
slave_xfer += src_frames;
|
||||||
slave_xfer += src_frames;
|
}
|
||||||
|
if (dst_frames > 0) {
|
||||||
|
client_offset += dst_frames;
|
||||||
|
client_xfer += dst_frames;
|
||||||
|
snd_pcm_mmap_hw_forward(pcm, dst_frames);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (client_xfer > 0 || slave_xfer > 0) {
|
if (client_xfer > 0 || slave_xfer > 0) {
|
||||||
if (slave_sizep)
|
if (slave_sizep)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue