Fixed residual transfers

This commit is contained in:
Abramo Bagnara 2000-12-26 09:30:48 +00:00
parent a5017e9ef0
commit 35632e8dd8

View file

@ -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)