Chromium Code Reviews| Index: webrtc/common_audio/channel_buffer.h | 
| diff --git a/webrtc/common_audio/channel_buffer.h b/webrtc/common_audio/channel_buffer.h | 
| index faecec9194ceb86be1d37104e24e7ad0a6915048..60ab0f4e6d9882d89e4dd1e9bdb3a9f500c334e5 100644 | 
| --- a/webrtc/common_audio/channel_buffer.h | 
| +++ b/webrtc/common_audio/channel_buffer.h | 
| @@ -49,6 +49,7 @@ class ChannelBuffer { | 
| num_frames_(num_frames), | 
| num_frames_per_band_(num_frames / num_bands), | 
| num_channels_(num_channels), | 
| 
 
peah-webrtc
2016/06/08 12:04:55
I see that the changes in audio_buffer are needed
 
aluebs-webrtc
2016/06/09 02:11:46
Please see my other comment about the bug this sol
 
 | 
| + num_official_channels_(num_channels), | 
| num_bands_(num_bands) { | 
| for (size_t i = 0; i < num_channels_; ++i) { | 
| for (size_t j = 0; j < num_bands_; ++j) { | 
| @@ -88,11 +89,11 @@ class ChannelBuffer { | 
| // Usage: | 
| // bands(channel)[band][sample]. | 
| // Where: | 
| - // 0 <= channel < |num_channels_| | 
| + // 0 <= channel < |num_official_channels_| | 
| // 0 <= band < |num_bands_| | 
| // 0 <= sample < |num_frames_per_band_| | 
| const T* const* bands(size_t channel) const { | 
| - RTC_DCHECK_LT(channel, num_channels_); | 
| + RTC_DCHECK_LT(channel, num_official_channels_); | 
| RTC_DCHECK_GE(channel, 0u); | 
| return &bands_[channel * num_bands_]; | 
| } | 
| @@ -105,7 +106,7 @@ class ChannelBuffer { | 
| // Returns |slice| for convenience. | 
| const T* const* Slice(T** slice, size_t start_frame) const { | 
| RTC_DCHECK_LT(start_frame, num_frames_); | 
| - for (size_t i = 0; i < num_channels_; ++i) | 
| + for (size_t i = 0; i < num_official_channels_; ++i) | 
| slice[i] = &channels_[i][start_frame]; | 
| return slice; | 
| } | 
| @@ -116,10 +117,15 @@ class ChannelBuffer { | 
| size_t num_frames() const { return num_frames_; } | 
| size_t num_frames_per_band() const { return num_frames_per_band_; } | 
| - size_t num_channels() const { return num_channels_; } | 
| + size_t num_channels() const { return num_official_channels_; } | 
| size_t num_bands() const { return num_bands_; } | 
| size_t size() const {return num_frames_ * num_channels_; } | 
| + void set_num_channels(size_t num_channels) { | 
| + RTC_DCHECK_LE(num_channels, num_channels_); | 
| + num_official_channels_ = num_channels; | 
| + } | 
| + | 
| void SetDataForTesting(const T* data, size_t size) { | 
| RTC_CHECK_EQ(size, this->size()); | 
| memcpy(data_.get(), data, size * sizeof(*data)); | 
| @@ -131,7 +137,10 @@ class ChannelBuffer { | 
| std::unique_ptr<T* []> bands_; | 
| const size_t num_frames_; | 
| const size_t num_frames_per_band_; | 
| + // Number of channels the internal buffer holds. | 
| const size_t num_channels_; | 
| + // Number of channels the user sees. | 
| + size_t num_official_channels_; | 
| const size_t num_bands_; | 
| }; | 
| @@ -152,7 +161,13 @@ class IFChannelBuffer { | 
| size_t num_frames() const { return ibuf_.num_frames(); } | 
| size_t num_frames_per_band() const { return ibuf_.num_frames_per_band(); } | 
| - size_t num_channels() const { return ibuf_.num_channels(); } | 
| + size_t num_channels() const { | 
| + return std::min(ibuf_.num_channels(), fbuf_.num_channels()); | 
| + } | 
| + void set_num_channels(size_t num_channels) { | 
| + ibuf_.set_num_channels(num_channels); | 
| + fbuf_.set_num_channels(num_channels); | 
| + } | 
| size_t num_bands() const { return ibuf_.num_bands(); } | 
| private: |