Chromium Code Reviews| Index: media/audio/audio_output_mixer.cc |
| =================================================================== |
| --- media/audio/audio_output_mixer.cc (revision 140286) |
| +++ media/audio/audio_output_mixer.cc (working copy) |
| @@ -16,6 +16,9 @@ |
| namespace media { |
| +// Align audio data to 64-byte boundary. That is current max AVX can use. |
| +const size_t kMixerDataAlignment = 64; |
| + |
| AudioOutputMixer::AudioOutputMixer(AudioManager* audio_manager, |
| const AudioParameters& params, |
| const base::TimeDelta& close_delay) |
| @@ -26,8 +29,11 @@ |
| weak_this_.GetWeakPtr(), |
| &AudioOutputMixer::ClosePhysicalStream), |
| pending_bytes_(0) { |
| - // TODO(enal): align data. |
| - mixer_data_.reset(new uint8[params_.GetBytesPerBuffer()]); |
| + mixer_data_.reset( |
|
DaleCurtis
2012/06/04 20:48:12
Drive by: if you don't mind a 32 byte alignment yo
|
| + new uint8[params_.GetBytesPerBuffer() + kMixerDataAlignment - 1]); |
| + aligned_mixer_data_ = reinterpret_cast<uint8*>( |
| + (reinterpret_cast<size_t>(mixer_data_.get()) + kMixerDataAlignment - 1) & |
| + ~(kMixerDataAlignment - 1)); |
| } |
| AudioOutputMixer::~AudioOutputMixer() { |
| @@ -197,8 +203,6 @@ |
| // No need to mix muted stream. |
| double volume = proxy_data->volume; |
| - if (volume == 0.0) |
| - continue; |
| // Different handling for first and all subsequent streams. |
| if (first_stream) { |
| @@ -212,7 +216,7 @@ |
| if (actual_size < max_size) |
| memset(dest + actual_size, 0, max_size - actual_size); |
| first_stream = false; |
| - actual_dest = mixer_data_.get(); |
| + actual_dest = aligned_mixer_data_; |
| actual_total_size = actual_size; |
| } else { |
| media::MixStreams(dest, |