From: Sai Pavan Boddu <sai.pavan.bo...@xilinx.com> Fill the audio channel with required number of bytes to cover the elapsed time. This prevents rate control reset, and avoids debug prints like below
log: Resetting rate control (65692 samples) ... Resetting rate control (65721 samples) ... Signed-off-by: Sai Pavan Boddu <sai.pavan.bo...@xilinx.com> Reviewed-by: Alistair Francis <alistair.fran...@wdc.com> Message-id: 1573833408-2388-1-git-send-email-sai.pavan.bo...@xilinx.com Signed-off-by: Gerd Hoffmann <kra...@redhat.com> --- hw/display/xlnx_dp.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/hw/display/xlnx_dp.c b/hw/display/xlnx_dp.c index fde3b21ea5f4..705844379794 100644 --- a/hw/display/xlnx_dp.c +++ b/hw/display/xlnx_dp.c @@ -394,13 +394,18 @@ static void xlnx_dp_audio_callback(void *opaque, int avail) written = AUD_write(s->amixer_output_stream, &s->out_buffer[s->data_ptr], s->byte_left); } else { + int len_to_copy; /* * There is nothing to play.. We don't have any data! Fill the * buffer with zero's and send it. */ written = 0; - memset(s->out_buffer, 0, 1024); - AUD_write(s->amixer_output_stream, s->out_buffer, 1024); + while (avail) { + len_to_copy = MIN(AUD_CHBUF_MAX_DEPTH, avail); + memset(s->out_buffer, 0, len_to_copy); + avail -= AUD_write(s->amixer_output_stream, s->out_buffer, + len_to_copy); + } } } else { written = AUD_write(s->amixer_output_stream, -- 2.18.1