Index: media/base/audio_buffer.cc |
diff --git a/media/base/audio_buffer.cc b/media/base/audio_buffer.cc |
index 564cff156bbb7f5defa7067439731a1efa44c500..a4119ba248b0ede28bd874a2cbde013c7a051e36 100644 |
--- a/media/base/audio_buffer.cc |
+++ b/media/base/audio_buffer.cc |
@@ -37,7 +37,8 @@ AudioBuffer::AudioBuffer(SampleFormat sample_format, |
timestamp_(timestamp), |
duration_(end_of_stream_ |
? base::TimeDelta() |
- : CalculateDuration(adjusted_frame_count_, sample_rate_)) { |
+ : CalculateDuration(adjusted_frame_count_, sample_rate_)), |
+ data_size_(0) { |
CHECK_GE(channel_count_, 0); |
CHECK_LE(channel_count_, limits::kMaxChannels); |
CHECK_GE(frame_count, 0); |
@@ -46,31 +47,31 @@ AudioBuffer::AudioBuffer(SampleFormat sample_format, |
int bytes_per_channel = SampleFormatToBytesPerChannel(sample_format); |
DCHECK_LE(bytes_per_channel, kChannelAlignment); |
- int data_size = frame_count * bytes_per_channel; |
// Empty buffer? |
if (!create_buffer) |
return; |
- if (sample_format == kSampleFormatPlanarF32 || |
- sample_format == kSampleFormatPlanarS16 || |
- sample_format == kSampleFormatPlanarS32) { |
+ 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 = |
- (data_size + kChannelAlignment - 1) & ~(kChannelAlignment - 1); |
- DCHECK_GE(block_size_per_channel, data_size); |
+ (data_size_per_channel + kChannelAlignment - 1) & |
+ ~(kChannelAlignment - 1); |
+ DCHECK_GE(block_size_per_channel, data_size_per_channel); |
// Allocate a contiguous buffer for all the channel data. |
- data_.reset(static_cast<uint8*>(base::AlignedAlloc( |
- channel_count_ * block_size_per_channel, kChannelAlignment))); |
+ data_size_ = channel_count_ * block_size_per_channel; |
+ data_.reset( |
+ static_cast<uint8*>(base::AlignedAlloc(data_size_, kChannelAlignment))); |
channel_data_.reserve(channel_count_); |
// 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); |
if (data) |
- memcpy(channel_data_[i], data[i], data_size); |
+ memcpy(channel_data_[i], data[i], data_size_per_channel); |
} |
return; |
} |
@@ -82,13 +83,13 @@ AudioBuffer::AudioBuffer(SampleFormat sample_format, |
sample_format_ == kSampleFormatF32) << sample_format_; |
xhwang
2015/11/24 05:59:13
!IsPlanar()?
Actually we could also have kUnknown
jrummell
2015/11/24 20:51:05
Done.
|
// Allocate our own buffer and copy the supplied data into it. Buffer must |
// contain the data for all channels. |
- data_size *= channel_count_; |
+ data_size_ = data_size_per_channel * channel_count_; |
data_.reset( |
- static_cast<uint8*>(base::AlignedAlloc(data_size, kChannelAlignment))); |
+ static_cast<uint8*>(base::AlignedAlloc(data_size_, kChannelAlignment))); |
channel_data_.reserve(1); |
channel_data_.push_back(data_.get()); |
if (data) |
- memcpy(data_.get(), data[0], data_size); |
+ memcpy(data_.get(), data[0], data_size_); |
} |
AudioBuffer::~AudioBuffer() {} |