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

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

Issue 1542203002: Switch to standard integer types in remoting/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@int-remoting-host
Patch Set: Created 4 years, 12 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
« no previous file with comments | « remoting/codec/audio_encoder_opus.h ('k') | remoting/codec/audio_encoder_opus_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 media::SincResampler::kDefaultRequestSize, 79 media::SincResampler::kDefaultRequestSize,
80 base::Bind(&AudioEncoderOpus::FetchBytesToResample, 80 base::Bind(&AudioEncoderOpus::FetchBytesToResample,
81 base::Unretained(this)))); 81 base::Unretained(this))));
82 resampler_bus_ = media::AudioBus::Create(channels_, kFrameSamples); 82 resampler_bus_ = media::AudioBus::Create(channels_, kFrameSamples);
83 } 83 }
84 84
85 // Drop leftover data because it's for different sampling rate. 85 // Drop leftover data because it's for different sampling rate.
86 leftover_samples_ = 0; 86 leftover_samples_ = 0;
87 leftover_buffer_size_ = 87 leftover_buffer_size_ =
88 frame_size_ + media::SincResampler::kDefaultRequestSize; 88 frame_size_ + media::SincResampler::kDefaultRequestSize;
89 leftover_buffer_.reset( 89 leftover_buffer_.reset(new int16_t[leftover_buffer_size_ * channels_]);
90 new int16[leftover_buffer_size_ * channels_]);
91 } 90 }
92 91
93 void AudioEncoderOpus::DestroyEncoder() { 92 void AudioEncoderOpus::DestroyEncoder() {
94 if (encoder_) { 93 if (encoder_) {
95 opus_encoder_destroy(encoder_); 94 opus_encoder_destroy(encoder_);
96 encoder_ = nullptr; 95 encoder_ = nullptr;
97 } 96 }
98 97
99 resampler_.reset(); 98 resampler_.reset();
100 } 99 }
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 DCHECK_EQ(AudioPacket::ENCODING_RAW, packet->encoding()); 142 DCHECK_EQ(AudioPacket::ENCODING_RAW, packet->encoding());
144 DCHECK_EQ(1, packet->data_size()); 143 DCHECK_EQ(1, packet->data_size());
145 DCHECK_EQ(kBytesPerSample, packet->bytes_per_sample()); 144 DCHECK_EQ(kBytesPerSample, packet->bytes_per_sample());
146 145
147 if (!ResetForPacket(packet.get())) { 146 if (!ResetForPacket(packet.get())) {
148 LOG(ERROR) << "Encoder initialization failed"; 147 LOG(ERROR) << "Encoder initialization failed";
149 return nullptr; 148 return nullptr;
150 } 149 }
151 150
152 int samples_in_packet = packet->data(0).size() / kBytesPerSample / channels_; 151 int samples_in_packet = packet->data(0).size() / kBytesPerSample / channels_;
153 const int16* next_sample = 152 const int16_t* next_sample =
154 reinterpret_cast<const int16*>(packet->data(0).data()); 153 reinterpret_cast<const int16_t*>(packet->data(0).data());
155 154
156 // Create a new packet of encoded data. 155 // Create a new packet of encoded data.
157 scoped_ptr<AudioPacket> encoded_packet(new AudioPacket()); 156 scoped_ptr<AudioPacket> encoded_packet(new AudioPacket());
158 encoded_packet->set_encoding(AudioPacket::ENCODING_OPUS); 157 encoded_packet->set_encoding(AudioPacket::ENCODING_OPUS);
159 encoded_packet->set_sampling_rate(kOpusSamplingRate); 158 encoded_packet->set_sampling_rate(kOpusSamplingRate);
160 encoded_packet->set_channels(channels_); 159 encoded_packet->set_channels(channels_);
161 160
162 int prefetch_samples = 161 int prefetch_samples =
163 resampler_.get() ? media::SincResampler::kDefaultRequestSize : 0; 162 resampler_.get() ? media::SincResampler::kDefaultRequestSize : 0;
164 int samples_wanted = frame_size_ + prefetch_samples; 163 int samples_wanted = frame_size_ + prefetch_samples;
165 164
166 while (leftover_samples_ + samples_in_packet >= samples_wanted) { 165 while (leftover_samples_ + samples_in_packet >= samples_wanted) {
167 const int16* pcm_buffer = nullptr; 166 const int16_t* pcm_buffer = nullptr;
168 167
169 // Combine the packet with the leftover samples, if any. 168 // Combine the packet with the leftover samples, if any.
170 if (leftover_samples_ > 0) { 169 if (leftover_samples_ > 0) {
171 pcm_buffer = leftover_buffer_.get(); 170 pcm_buffer = leftover_buffer_.get();
172 int samples_to_copy = samples_wanted - leftover_samples_; 171 int samples_to_copy = samples_wanted - leftover_samples_;
173 memcpy(leftover_buffer_.get() + leftover_samples_ * channels_, 172 memcpy(leftover_buffer_.get() + leftover_samples_ * channels_,
174 next_sample, samples_to_copy * kBytesPerSample * channels_); 173 next_sample, samples_to_copy * kBytesPerSample * channels_);
175 } else { 174 } else {
176 pcm_buffer = next_sample; 175 pcm_buffer = next_sample;
177 } 176 }
178 177
179 // Resample data if necessary. 178 // Resample data if necessary.
180 int samples_consumed = 0; 179 int samples_consumed = 0;
181 if (resampler_.get()) { 180 if (resampler_.get()) {
182 resampling_data_ = reinterpret_cast<const char*>(pcm_buffer); 181 resampling_data_ = reinterpret_cast<const char*>(pcm_buffer);
183 resampling_data_pos_ = 0; 182 resampling_data_pos_ = 0;
184 resampling_data_size_ = samples_wanted * channels_ * kBytesPerSample; 183 resampling_data_size_ = samples_wanted * channels_ * kBytesPerSample;
185 resampler_->Resample(kFrameSamples, resampler_bus_.get()); 184 resampler_->Resample(kFrameSamples, resampler_bus_.get());
186 resampling_data_ = nullptr; 185 resampling_data_ = nullptr;
187 samples_consumed = resampling_data_pos_ / channels_ / kBytesPerSample; 186 samples_consumed = resampling_data_pos_ / channels_ / kBytesPerSample;
188 187
189 resampler_bus_->ToInterleaved(kFrameSamples, kBytesPerSample, 188 resampler_bus_->ToInterleaved(kFrameSamples, kBytesPerSample,
190 resample_buffer_.get()); 189 resample_buffer_.get());
191 pcm_buffer = reinterpret_cast<int16*>(resample_buffer_.get()); 190 pcm_buffer = reinterpret_cast<int16_t*>(resample_buffer_.get());
192 } else { 191 } else {
193 samples_consumed = frame_size_; 192 samples_consumed = frame_size_;
194 } 193 }
195 194
196 // Initialize output buffer. 195 // Initialize output buffer.
197 std::string* data = encoded_packet->add_data(); 196 std::string* data = encoded_packet->add_data();
198 data->resize(kFrameSamples * kBytesPerSample * channels_); 197 data->resize(kFrameSamples * kBytesPerSample * channels_);
199 198
200 // Encode. 199 // Encode.
201 unsigned char* buffer = 200 unsigned char* buffer =
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 } 232 }
234 233
235 // Return nullptr if there's nothing in the packet. 234 // Return nullptr if there's nothing in the packet.
236 if (encoded_packet->data_size() == 0) 235 if (encoded_packet->data_size() == 0)
237 return nullptr; 236 return nullptr;
238 237
239 return encoded_packet.Pass(); 238 return encoded_packet.Pass();
240 } 239 }
241 240
242 } // namespace remoting 241 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/codec/audio_encoder_opus.h ('k') | remoting/codec/audio_encoder_opus_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698