Ver Fonte

display: xlnx_dp: Provide sufficient bytes for silent audio channel

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.boddu@xilinx.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Message-id: 1573833408-2388-1-git-send-email-sai.pavan.boddu@xilinx.com
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Sai Pavan Boddu há 5 anos atrás
pai
commit
0f6ed883e7
1 ficheiros alterados com 7 adições e 2 exclusões
  1. 7 2
      hw/display/xlnx_dp.c

+ 7 - 2
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,
             written = AUD_write(s->amixer_output_stream,
                                 &s->out_buffer[s->data_ptr], s->byte_left);
                                 &s->out_buffer[s->data_ptr], s->byte_left);
         } else {
         } else {
+             int len_to_copy;
             /*
             /*
              * There is nothing to play.. We don't have any data! Fill the
              * There is nothing to play.. We don't have any data! Fill the
              * buffer with zero's and send it.
              * buffer with zero's and send it.
              */
              */
             written = 0;
             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 {
     } else {
         written = AUD_write(s->amixer_output_stream,
         written = AUD_write(s->amixer_output_stream,