Index: media/base/audio_buffer.cc |
diff --git a/media/base/audio_buffer.cc b/media/base/audio_buffer.cc |
index 762e8847964dc801ce4a00e113ef86926b7b3916..f118914a635e0fa4af2ffb891a5688967e0991f0 100644 |
--- a/media/base/audio_buffer.cc |
+++ b/media/base/audio_buffer.cc |
@@ -51,7 +51,8 @@ AudioBuffer::AudioBuffer(SampleFormat sample_format, |
return; |
if (sample_format == kSampleFormatPlanarF32 || |
- sample_format == kSampleFormatPlanarS16) { |
+ sample_format == kSampleFormatPlanarS16 || |
+ sample_format == kSampleFormatPlanarS32) { |
// Planar data, so need to allocate buffer for each channel. |
// Determine per channel data size, taking into account alignment. |
int block_size_per_channel = |
@@ -254,6 +255,12 @@ static inline int32 ConvertF32ToS32(float value) { |
: value * std::numeric_limits<int32>::max()); |
} |
+// No need for conversion. Return value as is. Keeping function to align with |
+// code structure. |
+static inline int32 ConvertS32ToS32(int32 value) { |
+ return value; |
+} |
+ |
template <class Target, typename Converter> |
void InterleaveToS32(const std::vector<uint8*>& channel_data, |
size_t frames_to_copy, |
@@ -322,6 +329,14 @@ void AudioBuffer::ReadFramesInterleavedS32(int frames_to_copy, |
dest_data, |
ConvertF32ToS32); |
break; |
+ case kSampleFormatPlanarS32: |
+ // Format is planar signed 32 bit. Convert each value into int32 and |
+ // insert into output channel data. |
+ InterleaveToS32<int32>(channel_data_, |
+ frames_to_copy, |
+ trim_start_, |
+ dest_data, |
+ ConvertS32ToS32); |
case kUnknownSampleFormat: |
NOTREACHED(); |
break; |
@@ -365,6 +380,7 @@ void AudioBuffer::TrimRange(int start, int end) { |
switch (sample_format_) { |
case kSampleFormatPlanarS16: |
case kSampleFormatPlanarF32: |
+ case kSampleFormatPlanarS32: |
// Planar data must be shifted per channel. |
for (int ch = 0; ch < channel_count_; ++ch) { |
memmove(channel_data_[ch] + (trim_start_ + start) * bytes_per_channel, |