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

Side by Side Diff: remoting/codec/audio_encoder_opus.cc

Issue 609923004: Cleanup usage of scoped_ptr<> in remoting for C++11 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "remoting/codec/audio_encoder_opus.h" 5 #include "remoting/codec/audio_encoder_opus.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/time/time.h" 9 #include "base/time/time.h"
10 #include "media/base/audio_bus.h" 10 #include "media/base/audio_bus.h"
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 } 135 }
136 136
137 scoped_ptr<AudioPacket> AudioEncoderOpus::Encode( 137 scoped_ptr<AudioPacket> AudioEncoderOpus::Encode(
138 scoped_ptr<AudioPacket> packet) { 138 scoped_ptr<AudioPacket> packet) {
139 DCHECK_EQ(AudioPacket::ENCODING_RAW, packet->encoding()); 139 DCHECK_EQ(AudioPacket::ENCODING_RAW, packet->encoding());
140 DCHECK_EQ(1, packet->data_size()); 140 DCHECK_EQ(1, packet->data_size());
141 DCHECK_EQ(kBytesPerSample, packet->bytes_per_sample()); 141 DCHECK_EQ(kBytesPerSample, packet->bytes_per_sample());
142 142
143 if (!ResetForPacket(packet.get())) { 143 if (!ResetForPacket(packet.get())) {
144 LOG(ERROR) << "Encoder initialization failed"; 144 LOG(ERROR) << "Encoder initialization failed";
145 return scoped_ptr<AudioPacket>(); 145 return nullptr;
146 } 146 }
147 147
148 int samples_in_packet = packet->data(0).size() / kBytesPerSample / channels_; 148 int samples_in_packet = packet->data(0).size() / kBytesPerSample / channels_;
149 const int16* next_sample = 149 const int16* next_sample =
150 reinterpret_cast<const int16*>(packet->data(0).data()); 150 reinterpret_cast<const int16*>(packet->data(0).data());
151 151
152 // Create a new packet of encoded data. 152 // Create a new packet of encoded data.
153 scoped_ptr<AudioPacket> encoded_packet(new AudioPacket()); 153 scoped_ptr<AudioPacket> encoded_packet(new AudioPacket());
154 encoded_packet->set_encoding(AudioPacket::ENCODING_OPUS); 154 encoded_packet->set_encoding(AudioPacket::ENCODING_OPUS);
155 encoded_packet->set_sampling_rate(kOpusSamplingRate); 155 encoded_packet->set_sampling_rate(kOpusSamplingRate);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 std::string* data = encoded_packet->add_data(); 193 std::string* data = encoded_packet->add_data();
194 data->resize(kFrameSamples * kBytesPerSample * channels_); 194 data->resize(kFrameSamples * kBytesPerSample * channels_);
195 195
196 // Encode. 196 // Encode.
197 unsigned char* buffer = 197 unsigned char* buffer =
198 reinterpret_cast<unsigned char*>(string_as_array(data)); 198 reinterpret_cast<unsigned char*>(string_as_array(data));
199 int result = opus_encode(encoder_, pcm_buffer, kFrameSamples, 199 int result = opus_encode(encoder_, pcm_buffer, kFrameSamples,
200 buffer, data->length()); 200 buffer, data->length());
201 if (result < 0) { 201 if (result < 0) {
202 LOG(ERROR) << "opus_encode() failed with error code: " << result; 202 LOG(ERROR) << "opus_encode() failed with error code: " << result;
203 return scoped_ptr<AudioPacket>(); 203 return nullptr;
204 } 204 }
205 205
206 DCHECK_LE(result, static_cast<int>(data->length())); 206 DCHECK_LE(result, static_cast<int>(data->length()));
207 data->resize(result); 207 data->resize(result);
208 208
209 // Cleanup leftover buffer. 209 // Cleanup leftover buffer.
210 if (samples_consumed >= leftover_samples_) { 210 if (samples_consumed >= leftover_samples_) {
211 samples_consumed -= leftover_samples_; 211 samples_consumed -= leftover_samples_;
212 leftover_samples_ = 0; 212 leftover_samples_ = 0;
213 next_sample += samples_consumed * channels_; 213 next_sample += samples_consumed * channels_;
214 samples_in_packet -= samples_consumed; 214 samples_in_packet -= samples_consumed;
215 } else { 215 } else {
216 leftover_samples_ -= samples_consumed; 216 leftover_samples_ -= samples_consumed;
217 memmove(leftover_buffer_.get(), 217 memmove(leftover_buffer_.get(),
218 leftover_buffer_.get() + samples_consumed * channels_, 218 leftover_buffer_.get() + samples_consumed * channels_,
219 leftover_samples_ * channels_ * kBytesPerSample); 219 leftover_samples_ * channels_ * kBytesPerSample);
220 } 220 }
221 } 221 }
222 222
223 // Store the leftover samples. 223 // Store the leftover samples.
224 if (samples_in_packet > 0) { 224 if (samples_in_packet > 0) {
225 DCHECK_LE(leftover_samples_ + samples_in_packet, leftover_buffer_size_); 225 DCHECK_LE(leftover_samples_ + samples_in_packet, leftover_buffer_size_);
226 memmove(leftover_buffer_.get() + leftover_samples_ * channels_, 226 memmove(leftover_buffer_.get() + leftover_samples_ * channels_,
227 next_sample, samples_in_packet * kBytesPerSample * channels_); 227 next_sample, samples_in_packet * kBytesPerSample * channels_);
228 leftover_samples_ += samples_in_packet; 228 leftover_samples_ += samples_in_packet;
229 } 229 }
230 230
231 // Return NULL if there's nothing in the packet. 231 // Return NULL if there's nothing in the packet.
232 if (encoded_packet->data_size() == 0) 232 if (encoded_packet->data_size() == 0)
233 return scoped_ptr<AudioPacket>(); 233 return nullptr;
234 234
235 return encoded_packet.Pass(); 235 return encoded_packet.Pass();
236 } 236 }
237 237
238 } // namespace remoting 238 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698