Commit da67d5d7 authored by dalecurtis@google.com's avatar dalecurtis@google.com

Make sure AudioBufferConverter uses aligned AudioBus channels.

SIMD requires aligned loads or it'll crash.

BUG=357840
TEST=new unittest. played video back in crashes.
R=rileya@chromium.org, scherkus@chromium.org
TBR=scherkus

Review URL: https://codereview.chromium.org/217923002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@260336 0039d316-1c4b-4281-b951-d872f2087c98
parent b8fc82b1
......@@ -199,10 +199,13 @@ void AudioBufferConverter::ConvertIfPossible() {
// The AudioConverter wants requests of a fixed size, so we'll slide an
// AudioBus of that size across the |output_buffer|.
while (frames_remaining != 0) {
int frames_this_iteration =
std::min(output_params_.frames_per_buffer(), frames_remaining);
int offset_into_buffer = output_buffer->frame_count() - frames_remaining;
// It's important that this is a multiple of AudioBus::kChannelAlignment in
// all requests except for the last, otherwise downstream SIMD optimizations
// will crash on unaligned data.
const int frames_this_iteration = std::min(
static_cast<int>(SincResampler::kDefaultRequestSize), frames_remaining);
const int offset_into_buffer =
output_buffer->frame_count() - frames_remaining;
// Wrap the portion of the AudioBuffer in an AudioBus so the AudioConverter
// can fill it.
......
......@@ -12,6 +12,8 @@
namespace media {
// Important: Use an odd buffer size here so SIMD issues are caught.
const int kOutFrameSize = 441;
const int kOutSampleRate = 44100;
const ChannelLayout kOutChannelLayout = CHANNEL_LAYOUT_STEREO;
const int kOutChannelCount = 2;
......@@ -39,7 +41,7 @@ class AudioBufferConverterTest : public ::testing::Test {
kOutChannelLayout,
kOutSampleRate,
16,
512);
kOutFrameSize);
ResetConverter(output_params);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment