Skip to content
Snippets Groups Projects
  • Volker Rümelin's avatar
    bea29e9f
    paaudio: avoid to clip samples multiple times · bea29e9f
    Volker Rümelin authored
    
    The pulseaudio backend currently converts, clips and copies audio
    playback samples in the mixing-engine sample buffer multiple
    times.
    
    In qpa_get_buffer_out() the function pa_stream_begin_write()
    returns a rather large buffer and this allows audio_pcm_hw_run_out()
    in audio/audio.c to copy all samples in the mixing-engine buffer
    to the pulse audio buffer. Immediately after copying, qpa_write()
    notices with a call to pa_stream_writable_size() that pulse audio
    only needs a smaller part of the copied samples and ignores the
    rest. This copy and ignore process happens several times for each
    audio sample.
    
    To fix this behaviour, call pa_stream_writable_size() in
    qpa_get_buffer_out() to limit the number of samples
    audio_pcm_hw_run_out() will convert. With this change the
    pulseaudio pcm_ops functions put_buffer_out and write are no
    longer identical and a separate qpa_put_buffer_out is needed.
    
    Signed-off-by: default avatarVolker Rümelin <vr_qemu@t-online.de>
    Message-id: 9315afe5-5958-c0b4-ea1e-14769511a9d5@t-online.de
    Message-Id: <20210110100239.27588-13-vr_qemu@t-online.de>
    Signed-off-by: default avatarGerd Hoffmann <kraxel@redhat.com>
    bea29e9f
    History
    paaudio: avoid to clip samples multiple times
    Volker Rümelin authored
    
    The pulseaudio backend currently converts, clips and copies audio
    playback samples in the mixing-engine sample buffer multiple
    times.
    
    In qpa_get_buffer_out() the function pa_stream_begin_write()
    returns a rather large buffer and this allows audio_pcm_hw_run_out()
    in audio/audio.c to copy all samples in the mixing-engine buffer
    to the pulse audio buffer. Immediately after copying, qpa_write()
    notices with a call to pa_stream_writable_size() that pulse audio
    only needs a smaller part of the copied samples and ignores the
    rest. This copy and ignore process happens several times for each
    audio sample.
    
    To fix this behaviour, call pa_stream_writable_size() in
    qpa_get_buffer_out() to limit the number of samples
    audio_pcm_hw_run_out() will convert. With this change the
    pulseaudio pcm_ops functions put_buffer_out and write are no
    longer identical and a separate qpa_put_buffer_out is needed.
    
    Signed-off-by: default avatarVolker Rümelin <vr_qemu@t-online.de>
    Message-id: 9315afe5-5958-c0b4-ea1e-14769511a9d5@t-online.de
    Message-Id: <20210110100239.27588-13-vr_qemu@t-online.de>
    Signed-off-by: default avatarGerd Hoffmann <kraxel@redhat.com>