|
@@ -79,19 +79,17 @@ void snd_pcm_playback_silence(struct snd_pcm_substream *substream, snd_pcm_ufram
|
|
|
runtime->silence_filled -= frames;
|
|
|
if ((snd_pcm_sframes_t)runtime->silence_filled < 0) {
|
|
|
runtime->silence_filled = 0;
|
|
|
- runtime->silence_start = (ofs + frames) - runtime->buffer_size;
|
|
|
+ runtime->silence_start = new_hw_ptr;
|
|
|
} else {
|
|
|
- runtime->silence_start = ofs - runtime->silence_filled;
|
|
|
+ runtime->silence_start = ofs;
|
|
|
}
|
|
|
- if ((snd_pcm_sframes_t)runtime->silence_start < 0)
|
|
|
- runtime->silence_start += runtime->boundary;
|
|
|
}
|
|
|
frames = runtime->buffer_size - runtime->silence_filled;
|
|
|
}
|
|
|
snd_assert(frames <= runtime->buffer_size, return);
|
|
|
if (frames == 0)
|
|
|
return;
|
|
|
- ofs = (runtime->silence_start + runtime->silence_filled) % runtime->buffer_size;
|
|
|
+ ofs = runtime->silence_start % runtime->buffer_size;
|
|
|
while (frames > 0) {
|
|
|
transfer = ofs + frames > runtime->buffer_size ? runtime->buffer_size - ofs : frames;
|
|
|
if (runtime->access == SNDRV_PCM_ACCESS_RW_INTERLEAVED ||
|