| OLD | NEW | 
|   1 /* |   1 /* | 
|   2  *  Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. |   2  *  Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. | 
|   3  * |   3  * | 
|   4  *  Use of this source code is governed by a BSD-style license |   4  *  Use of this source code is governed by a BSD-style license | 
|   5  *  that can be found in the LICENSE file in the root of the source |   5  *  that can be found in the LICENSE file in the root of the source | 
|   6  *  tree. An additional intellectual property rights grant can be found |   6  *  tree. An additional intellectual property rights grant can be found | 
|   7  *  in the file PATENTS.  All contributing project authors may |   7  *  in the file PATENTS.  All contributing project authors may | 
|   8  *  be found in the AUTHORS file in the root of the source tree. |   8  *  be found in the AUTHORS file in the root of the source tree. | 
|   9  */ |   9  */ | 
|  10  |  10  | 
|  11 #include "webrtc/common_audio/audio_ring_buffer.h" |  11 #include "webrtc/common_audio/audio_ring_buffer.h" | 
|  12  |  12  | 
|  13 #include "webrtc/base/checks.h" |  13 #include "webrtc/base/checks.h" | 
|  14 #include "webrtc/common_audio/ring_buffer.h" |  14 #include "webrtc/common_audio/ring_buffer.h" | 
|  15  |  15  | 
|  16 // This is a simple multi-channel wrapper over the ring_buffer.h C interface. |  16 // This is a simple multi-channel wrapper over the ring_buffer.h C interface. | 
|  17  |  17  | 
|  18 namespace webrtc { |  18 namespace webrtc { | 
|  19  |  19  | 
|  20 AudioRingBuffer::AudioRingBuffer(size_t channels, size_t max_frames) { |  20 AudioRingBuffer::AudioRingBuffer(size_t channels, size_t max_frames) { | 
 |  21   buffers_.reserve(channels); | 
|  21   for (size_t i = 0; i < channels; ++i) |  22   for (size_t i = 0; i < channels; ++i) | 
|  22     buffers_.push_back(WebRtc_CreateBuffer(max_frames, sizeof(float))); |  23     buffers_.push_back(WebRtc_CreateBuffer(max_frames, sizeof(float))); | 
|  23 } |  24 } | 
|  24  |  25  | 
|  25 AudioRingBuffer::~AudioRingBuffer() { |  26 AudioRingBuffer::~AudioRingBuffer() { | 
|  26   for (auto buf : buffers_) |  27   for (auto buf : buffers_) | 
|  27     WebRtc_FreeBuffer(buf); |  28     WebRtc_FreeBuffer(buf); | 
|  28 } |  29 } | 
|  29  |  30  | 
|  30 void AudioRingBuffer::Write(const float* const* data, size_t channels, |  31 void AudioRingBuffer::Write(const float* const* data, size_t channels, | 
|  31                             size_t frames) { |  32                             size_t frames) { | 
|  32   DCHECK_EQ(buffers_.size(), channels); |  33   DCHECK_EQ(buffers_.size(), channels); | 
|  33   for (size_t i = 0; i < channels; ++i) { |  34   for (size_t i = 0; i < channels; ++i) { | 
|  34     size_t written = WebRtc_WriteBuffer(buffers_[i], data[i], frames); |  35     const size_t written = WebRtc_WriteBuffer(buffers_[i], data[i], frames); | 
|  35     CHECK_EQ(written, frames); |  36     CHECK_EQ(written, frames); | 
|  36   } |  37   } | 
|  37 } |  38 } | 
|  38  |  39  | 
|  39 void AudioRingBuffer::Read(float* const* data, size_t channels, size_t frames) { |  40 void AudioRingBuffer::Read(float* const* data, size_t channels, size_t frames) { | 
|  40   DCHECK_EQ(buffers_.size(), channels); |  41   DCHECK_EQ(buffers_.size(), channels); | 
|  41   for (size_t i = 0; i < channels; ++i) { |  42   for (size_t i = 0; i < channels; ++i) { | 
|  42     size_t read = WebRtc_ReadBuffer(buffers_[i], nullptr, data[i], frames); |  43     const size_t read = | 
 |  44         WebRtc_ReadBuffer(buffers_[i], nullptr, data[i], frames); | 
|  43     CHECK_EQ(read, frames); |  45     CHECK_EQ(read, frames); | 
|  44   } |  46   } | 
|  45 } |  47 } | 
|  46  |  48  | 
|  47 size_t AudioRingBuffer::ReadFramesAvailable() const { |  49 size_t AudioRingBuffer::ReadFramesAvailable() const { | 
|  48   // All buffers have the same amount available. |  50   // All buffers have the same amount available. | 
|  49   return WebRtc_available_read(buffers_[0]); |  51   return WebRtc_available_read(buffers_[0]); | 
|  50 } |  52 } | 
|  51  |  53  | 
|  52 size_t AudioRingBuffer::WriteFramesAvailable() const { |  54 size_t AudioRingBuffer::WriteFramesAvailable() const { | 
|  53   // All buffers have the same amount available. |  55   // All buffers have the same amount available. | 
|  54   return WebRtc_available_write(buffers_[0]); |  56   return WebRtc_available_write(buffers_[0]); | 
|  55 } |  57 } | 
|  56  |  58  | 
|  57 void AudioRingBuffer::MoveReadPosition(int frames) { |  59 void AudioRingBuffer::MoveReadPositionForward(size_t frames) { | 
|  58   for (auto buf : buffers_) { |  60   for (auto buf : buffers_) { | 
|  59     int moved = WebRtc_MoveReadPtr(buf, frames); |  61     const size_t moved = | 
 |  62         static_cast<size_t>(WebRtc_MoveReadPtr(buf, static_cast<int>(frames))); | 
|  60     CHECK_EQ(moved, frames); |  63     CHECK_EQ(moved, frames); | 
|  61   } |  64   } | 
|  62 } |  65 } | 
 |  66  | 
 |  67 void AudioRingBuffer::MoveReadPositionBackward(size_t frames) { | 
 |  68   for (auto buf : buffers_) { | 
 |  69     const size_t moved = static_cast<size_t>( | 
 |  70         -WebRtc_MoveReadPtr(buf, -static_cast<int>(frames))); | 
 |  71     CHECK_EQ(moved, frames); | 
 |  72   } | 
 |  73 } | 
|  63  |  74  | 
|  64 }  // namespace webrtc |  75 }  // namespace webrtc | 
| OLD | NEW |