| Index: media/base/audio_buffer.cc
|
| diff --git a/media/base/audio_buffer.cc b/media/base/audio_buffer.cc
|
| index f10e8ee243dc6cc66c42114f3b9a6fd0d60eb27e..b502bf84753105ca936321b41dd80ccada90fed8 100644
|
| --- a/media/base/audio_buffer.cc
|
| +++ b/media/base/audio_buffer.cc
|
| @@ -44,29 +44,15 @@ AudioBuffer::AudioBuffer(SampleFormat sample_format,
|
| DCHECK(channel_layout == CHANNEL_LAYOUT_DISCRETE ||
|
| ChannelLayoutToChannelCount(channel_layout) == channel_count);
|
|
|
| + int bytes_per_channel = SampleFormatToBytesPerChannel(sample_format);
|
| + DCHECK_LE(bytes_per_channel, kChannelAlignment);
|
| +
|
| // Empty buffer?
|
| if (!create_buffer)
|
| return;
|
|
|
| - AllocateAndCopy(data, frame_count, 0);
|
| -}
|
| -
|
| -AudioBuffer::~AudioBuffer() {}
|
| -
|
| -void AudioBuffer::AllocateAndCopy(const uint8_t* const* data,
|
| - int frame_count,
|
| - int silence_frames) {
|
| - if (!channel_data_.empty())
|
| - channel_data_.clear();
|
| -
|
| - int bytes_per_channel = SampleFormatToBytesPerChannel(sample_format_);
|
| - DCHECK_LE(bytes_per_channel, kChannelAlignment);
|
| - DCHECK_GT(bytes_per_channel, 0);
|
| -
|
| - int data_size_per_channel =
|
| - (frame_count + silence_frames) * bytes_per_channel;
|
| -
|
| - if (IsPlanar(sample_format_)) {
|
| + int data_size_per_channel = frame_count * bytes_per_channel;
|
| + if (IsPlanar(sample_format)) {
|
| // Planar data, so need to allocate buffer for each channel.
|
| // Determine per channel data size, taking into account alignment.
|
| int block_size_per_channel =
|
| @@ -80,23 +66,17 @@ void AudioBuffer::AllocateAndCopy(const uint8_t* const* data,
|
| base::AlignedAlloc(data_size_, kChannelAlignment)));
|
| channel_data_.reserve(channel_count_);
|
|
|
| - // Size of silence per channel.
|
| - int silence_bytes = silence_frames * bytes_per_channel;
|
| -
|
| // Copy each channel's data into the appropriate spot.
|
| for (int i = 0; i < channel_count_; ++i) {
|
| channel_data_.push_back(data_.get() + i * block_size_per_channel);
|
| - memset(channel_data_[i], 0, silence_bytes);
|
| - if (data) {
|
| - memcpy(channel_data_[i] + silence_bytes, data[i],
|
| - data_size_per_channel - silence_bytes);
|
| - }
|
| + if (data)
|
| + memcpy(channel_data_[i], data[i], data_size_per_channel);
|
| }
|
| return;
|
| }
|
|
|
| // Remaining formats are interleaved data.
|
| - DCHECK(IsInterleaved(sample_format_)) << sample_format_;
|
| + DCHECK(IsInterleaved(sample_format)) << sample_format_;
|
| // Allocate our own buffer and copy the supplied data into it. Buffer must
|
| // contain the data for all channels.
|
| data_size_ = data_size_per_channel * channel_count_;
|
| @@ -104,31 +84,11 @@ void AudioBuffer::AllocateAndCopy(const uint8_t* const* data,
|
| static_cast<uint8_t*>(base::AlignedAlloc(data_size_, kChannelAlignment)));
|
| channel_data_.reserve(1);
|
| channel_data_.push_back(data_.get());
|
| -
|
| - int silence_bytes = silence_frames * channel_count_ * bytes_per_channel;
|
| - memset(data_.get(), 0, silence_bytes);
|
| if (data)
|
| - memcpy(data_.get() + silence_bytes, data[0], data_size_ - silence_bytes);
|
| + memcpy(data_.get(), data[0], data_size_);
|
| }
|
|
|
| -void AudioBuffer::PadStart(int silence_frames) {
|
| - DCHECK_GE(silence_frames, 0);
|
| -
|
| - if (silence_frames > 0) {
|
| - // Only adjust allocation if not currently an empty buffer. Empty buffer's
|
| - // are implicitly silent, so just increase the frame count for that case.
|
| - if (data_) {
|
| - std::unique_ptr<uint8_t, base::AlignedFreeDeleter> orig_data =
|
| - std::move(data_);
|
| - std::vector<uint8_t*> orig_channel_data(channel_data_);
|
| - AllocateAndCopy(&orig_channel_data[0], adjusted_frame_count_,
|
| - silence_frames);
|
| - }
|
| -
|
| - adjusted_frame_count_ += silence_frames;
|
| - duration_ = CalculateDuration(adjusted_frame_count_, sample_rate_);
|
| - }
|
| -}
|
| +AudioBuffer::~AudioBuffer() {}
|
|
|
| // static
|
| scoped_refptr<AudioBuffer> AudioBuffer::CopyFrom(
|
| @@ -197,7 +157,6 @@ inline float ConvertSample(int16_t value) {
|
| : 1.0f / std::numeric_limits<int16_t>::max());
|
| }
|
|
|
| -
|
| void AudioBuffer::AdjustSampleRate(int sample_rate) {
|
| DCHECK(!end_of_stream_);
|
| sample_rate_ = sample_rate;
|
|
|