sdlaudio: always clear the sample buffer
Always fill the remaining audio callback buffer with silence. SDL 2.0 doesn't initialize the audio callback buffer. This was an incompatible change compared to SDL 1.2. For reference read the SDL 1.2 to 2.0 migration guide. Signed-off-by: Volker Rümelin <vr_qemu@t-online.de> Reviewed-by: Thomas Huth <thuth@redhat.com> Message-id: 9315afe5-5958-c0b4-ea1e-14769511a9d5@t-online.de Message-Id: <20210110100239.27588-5-vr_qemu@t-online.de> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
		
							parent
							
								
									14cefe14bb
								
							
						
					
					
						commit
						bcce2ea5f6
					
				@ -211,15 +211,13 @@ static void sdl_callback (void *opaque, Uint8 *buf, int len)
 | 
				
			|||||||
    SDLAudioState *s = &glob_sdl;
 | 
					    SDLAudioState *s = &glob_sdl;
 | 
				
			||||||
    HWVoiceOut *hw = &sdl->hw;
 | 
					    HWVoiceOut *hw = &sdl->hw;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (s->exit) {
 | 
					    if (!s->exit) {
 | 
				
			||||||
        return;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /* dolog("callback: len=%d avail=%zu\n", len, hw->pending_emul); */
 | 
					        /* dolog("callback: len=%d avail=%zu\n", len, hw->pending_emul); */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        while (hw->pending_emul && len) {
 | 
					        while (hw->pending_emul && len) {
 | 
				
			||||||
            size_t write_len;
 | 
					            size_t write_len;
 | 
				
			||||||
        ssize_t start = ((ssize_t) hw->pos_emul) - hw->pending_emul;
 | 
					            ssize_t start = (ssize_t)hw->pos_emul - hw->pending_emul;
 | 
				
			||||||
            if (start < 0) {
 | 
					            if (start < 0) {
 | 
				
			||||||
                start += hw->size_emul;
 | 
					                start += hw->size_emul;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@ -233,6 +231,7 @@ static void sdl_callback (void *opaque, Uint8 *buf, int len)
 | 
				
			|||||||
            len -= write_len;
 | 
					            len -= write_len;
 | 
				
			||||||
            buf += write_len;
 | 
					            buf += write_len;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* clear remaining buffer that we couldn't fill with data */
 | 
					    /* clear remaining buffer that we couldn't fill with data */
 | 
				
			||||||
    if (len) {
 | 
					    if (len) {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user