From f7fe93d133673f314319702d2e483029acc2f99c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com>
Date: Mon, 27 Apr 2015 01:11:59 -0400
Subject: [PATCH] pulseaudio: fix memory corruption

Refs #71680

Change-Id: Ibe64bc2fa323c589c2323d2bea4a80269a2a84e0
---
 src/media/audio/pulseaudio/pulselayer.cpp | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/media/audio/pulseaudio/pulselayer.cpp b/src/media/audio/pulseaudio/pulselayer.cpp
index 57561c267c..be8f0b5d30 100644
--- a/src/media/audio/pulseaudio/pulselayer.cpp
+++ b/src/media/audio/pulseaudio/pulselayer.cpp
@@ -468,7 +468,7 @@ void PulseLayer::writeToSpeaker()
     pa_stream *s = playback_->pulseStream();
     const pa_sample_spec* sample_spec = pa_stream_get_sample_spec(s);
     size_t sample_size = pa_frame_size(sample_spec);
-    const AudioFormat format(playback_->getFormat());
+    const AudioFormat format(sample_spec->rate, sample_spec->channels);
 
     // available bytes to be written in pulseaudio internal buffer
     int ret = pa_stream_writable_size(s);
@@ -554,9 +554,10 @@ void PulseLayer::writeToSpeaker()
 
     pa_stream_begin_write(s, (void**)&data, &resampledBytes);
 
-    playbackBuffer_.setFormat(format);
+    playbackBuffer_.setFormat(mainBufferAudioFormat);
     playbackBuffer_.resize(readableSamples);
     Manager::instance().getRingBufferPool().getData(playbackBuffer_, RingBufferPool::DEFAULT_ID);
+    playbackBuffer_.setChannelNum(format.nb_channels, true);
 
     if (resample) {
         AudioBuffer rsmpl_out(nResampled, format);
-- 
GitLab