Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1029)

Side by Side Diff: webrtc/modules/audio_coding/neteq/audio_multi_vector.cc

Issue 1948483002: Using ring buffer for AudioVector in NetEq. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright (c) 2012 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
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 } 99 }
100 100
101 void AudioMultiVector::PushBackFromIndex(const AudioMultiVector& append_this, 101 void AudioMultiVector::PushBackFromIndex(const AudioMultiVector& append_this,
102 size_t index) { 102 size_t index) {
103 assert(index < append_this.Size()); 103 assert(index < append_this.Size());
104 index = std::min(index, append_this.Size() - 1); 104 index = std::min(index, append_this.Size() - 1);
105 size_t length = append_this.Size() - index; 105 size_t length = append_this.Size() - index;
106 assert(num_channels_ == append_this.num_channels_); 106 assert(num_channels_ == append_this.num_channels_);
107 if (num_channels_ == append_this.num_channels_) { 107 if (num_channels_ == append_this.num_channels_) {
108 for (size_t i = 0; i < num_channels_; ++i) { 108 for (size_t i = 0; i < num_channels_; ++i) {
109 channels_[i]->PushBack(&append_this[i][index], length); 109 channels_[i]->PushBack(append_this[i], length, index);
110 } 110 }
111 } 111 }
112 } 112 }
113 113
114 void AudioMultiVector::PopFront(size_t length) { 114 void AudioMultiVector::PopFront(size_t length) {
115 for (size_t i = 0; i < num_channels_; ++i) { 115 for (size_t i = 0; i < num_channels_; ++i) {
116 channels_[i]->PopFront(length); 116 channels_[i]->PopFront(length);
117 } 117 }
118 } 118 }
119 119
120 void AudioMultiVector::PopBack(size_t length) { 120 void AudioMultiVector::PopBack(size_t length) {
121 for (size_t i = 0; i < num_channels_; ++i) { 121 for (size_t i = 0; i < num_channels_; ++i) {
122 channels_[i]->PopBack(length); 122 channels_[i]->PopBack(length);
123 } 123 }
124 } 124 }
125 125
126 size_t AudioMultiVector::ReadInterleaved(size_t length, 126 size_t AudioMultiVector::ReadInterleaved(size_t length,
127 int16_t* destination) const { 127 int16_t* destination) const {
128 return ReadInterleavedFromIndex(0, length, destination); 128 return ReadInterleavedFromIndex(0, length, destination);
129 } 129 }
130 130
131 size_t AudioMultiVector::ReadInterleavedFromIndex(size_t start_index, 131 size_t AudioMultiVector::ReadInterleavedFromIndex(size_t start_index,
132 size_t length, 132 size_t length,
133 int16_t* destination) const { 133 int16_t* destination) const {
134 RTC_DCHECK(destination); 134 RTC_DCHECK(destination);
135 size_t index = 0; // Number of elements written to |destination| so far. 135 size_t index = 0; // Number of elements written to |destination| so far.
136 assert(start_index <= Size()); 136 RTC_DCHECK_LE(start_index, Size());
137 start_index = std::min(start_index, Size()); 137 start_index = std::min(start_index, Size());
138 if (length + start_index > Size()) { 138 if (length + start_index > Size()) {
139 length = Size() - start_index; 139 length = Size() - start_index;
140 } 140 }
141 if (num_channels_ == 1) { 141 if (num_channels_ == 1) {
142 // Special case to avoid the nested for loop below. 142 // Special case to avoid the nested for loop below.
143 memcpy(destination, &(*this)[0][start_index], length * sizeof(int16_t)); 143 (*this)[0].CopyTo(length, start_index, destination);
144 return length; 144 return length;
145 } 145 }
146 for (size_t i = 0; i < length; ++i) { 146 for (size_t i = 0; i < length; ++i) {
147 for (size_t channel = 0; channel < num_channels_; ++channel) { 147 for (size_t channel = 0; channel < num_channels_; ++channel) {
148 destination[index] = (*this)[channel][i + start_index]; 148 destination[index] = (*this)[channel][i + start_index];
149 ++index; 149 ++index;
150 } 150 }
151 } 151 }
152 return index; 152 return index;
153 } 153 }
154 154
155 size_t AudioMultiVector::ReadInterleavedFromEnd(size_t length, 155 size_t AudioMultiVector::ReadInterleavedFromEnd(size_t length,
156 int16_t* destination) const { 156 int16_t* destination) const {
157 length = std::min(length, Size()); // Cannot read more than Size() elements. 157 length = std::min(length, Size()); // Cannot read more than Size() elements.
158 return ReadInterleavedFromIndex(Size() - length, length, destination); 158 return ReadInterleavedFromIndex(Size() - length, length, destination);
159 } 159 }
160 160
161 void AudioMultiVector::OverwriteAt(const AudioMultiVector& insert_this, 161 void AudioMultiVector::OverwriteAt(const AudioMultiVector& insert_this,
162 size_t length, 162 size_t length,
163 size_t position) { 163 size_t position) {
164 assert(num_channels_ == insert_this.num_channels_); 164 assert(num_channels_ == insert_this.num_channels_);
165 // Cap |length| at the length of |insert_this|. 165 // Cap |length| at the length of |insert_this|.
166 assert(length <= insert_this.Size()); 166 assert(length <= insert_this.Size());
167 length = std::min(length, insert_this.Size()); 167 length = std::min(length, insert_this.Size());
168 if (num_channels_ == insert_this.num_channels_) { 168 if (num_channels_ == insert_this.num_channels_) {
169 for (size_t i = 0; i < num_channels_; ++i) { 169 for (size_t i = 0; i < num_channels_; ++i) {
170 channels_[i]->OverwriteAt(&insert_this[i][0], length, position); 170 channels_[i]->OverwriteAt(insert_this[i], length, position);
171 } 171 }
172 } 172 }
173 } 173 }
174 174
175 void AudioMultiVector::CrossFade(const AudioMultiVector& append_this, 175 void AudioMultiVector::CrossFade(const AudioMultiVector& append_this,
176 size_t fade_length) { 176 size_t fade_length) {
177 assert(num_channels_ == append_this.num_channels_); 177 assert(num_channels_ == append_this.num_channels_);
178 if (num_channels_ == append_this.num_channels_) { 178 if (num_channels_ == append_this.num_channels_) {
179 for (size_t i = 0; i < num_channels_; ++i) { 179 for (size_t i = 0; i < num_channels_; ++i) {
180 channels_[i]->CrossFade(append_this[i], fade_length); 180 channels_[i]->CrossFade(append_this[i], fade_length);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 213
214 const AudioVector& AudioMultiVector::operator[](size_t index) const { 214 const AudioVector& AudioMultiVector::operator[](size_t index) const {
215 return *(channels_[index]); 215 return *(channels_[index]);
216 } 216 }
217 217
218 AudioVector& AudioMultiVector::operator[](size_t index) { 218 AudioVector& AudioMultiVector::operator[](size_t index) {
219 return *(channels_[index]); 219 return *(channels_[index]);
220 } 220 }
221 221
222 } // namespace webrtc 222 } // namespace webrtc
OLDNEW
« no previous file with comments | « no previous file | webrtc/modules/audio_coding/neteq/audio_vector.h » ('j') | webrtc/modules/audio_coding/neteq/audio_vector.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698