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

Side by Side Diff: media/cast/audio_sender/audio_encoder.cc

Issue 62843002: Cast: Added support for AES-CTR crypto. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Sync TOT Created 7 years, 1 month 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 | « media/cast/audio_receiver/audio_receiver.gypi ('k') | media/cast/audio_sender/audio_sender.h » ('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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "media/cast/audio_sender/audio_encoder.h" 5 #include "media/cast/audio_sender/audio_encoder.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 buffer_fill_end_ = 0; 87 buffer_fill_end_ = 0;
88 } 88 }
89 } 89 }
90 } 90 }
91 91
92 protected: 92 protected:
93 virtual void TransferSamplesIntoBuffer(const AudioBus* audio_bus, 93 virtual void TransferSamplesIntoBuffer(const AudioBus* audio_bus,
94 int source_offset, 94 int source_offset,
95 int buffer_fill_offset, 95 int buffer_fill_offset,
96 int num_samples) = 0; 96 int num_samples) = 0;
97 virtual bool EncodeFromFilledBuffer(std::vector<uint8>* out) = 0; 97 virtual bool EncodeFromFilledBuffer(std::string* out) = 0;
98 98
99 CastEnvironment* const cast_environment_; 99 CastEnvironment* const cast_environment_;
100 const AudioCodec codec_; 100 const AudioCodec codec_;
101 const int num_channels_; 101 const int num_channels_;
102 const int samples_per_10ms_; 102 const int samples_per_10ms_;
103 const FrameEncodedCallback callback_; 103 const FrameEncodedCallback callback_;
104 104
105 private: 105 private:
106 // In the case where a call to EncodeAudio() cannot completely fill the 106 // In the case where a call to EncodeAudio() cannot completely fill the
107 // buffer, this points to the position at which to populate data in a later 107 // buffer, this points to the position at which to populate data in a later
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 // Opus requires channel-interleaved samples in a single array. 149 // Opus requires channel-interleaved samples in a single array.
150 for (int ch = 0; ch < audio_bus->channels(); ++ch) { 150 for (int ch = 0; ch < audio_bus->channels(); ++ch) {
151 const float* src = audio_bus->channel(ch) + source_offset; 151 const float* src = audio_bus->channel(ch) + source_offset;
152 const float* const src_end = src + num_samples; 152 const float* const src_end = src + num_samples;
153 float* dest = buffer_.get() + buffer_fill_offset * num_channels_ + ch; 153 float* dest = buffer_.get() + buffer_fill_offset * num_channels_ + ch;
154 for (; src < src_end; ++src, dest += num_channels_) 154 for (; src < src_end; ++src, dest += num_channels_)
155 *dest = *src; 155 *dest = *src;
156 } 156 }
157 } 157 }
158 158
159 virtual bool EncodeFromFilledBuffer(std::vector<uint8>* out) OVERRIDE { 159 virtual bool EncodeFromFilledBuffer(std::string* out) OVERRIDE {
160 out->resize(kOpusMaxPayloadSize); 160 out->resize(kOpusMaxPayloadSize);
161 const opus_int32 result = opus_encode_float( 161 const opus_int32 result = opus_encode_float(
162 opus_encoder_, buffer_.get(), samples_per_10ms_, &out->front(), 162 opus_encoder_, buffer_.get(), samples_per_10ms_,
163 kOpusMaxPayloadSize); 163 reinterpret_cast<uint8*>(&out->at(0)), kOpusMaxPayloadSize);
164 if (result > 1) { 164 if (result > 1) {
165 out->resize(result); 165 out->resize(result);
166 return true; 166 return true;
167 } else if (result < 0) { 167 } else if (result < 0) {
168 LOG(ERROR) << "Error code from opus_encode_float(): " << result; 168 LOG(ERROR) << "Error code from opus_encode_float(): " << result;
169 return false; 169 return false;
170 } else { 170 } else {
171 // Do nothing: The documentation says that a return value of zero or 171 // Do nothing: The documentation says that a return value of zero or
172 // one byte means the packet does not need to be transmitted. 172 // one byte means the packet does not need to be transmitted.
173 return false; 173 return false;
(...skipping 29 matching lines...) Expand all
203 private: 203 private:
204 virtual void TransferSamplesIntoBuffer(const AudioBus* audio_bus, 204 virtual void TransferSamplesIntoBuffer(const AudioBus* audio_bus,
205 int source_offset, 205 int source_offset,
206 int buffer_fill_offset, 206 int buffer_fill_offset,
207 int num_samples) OVERRIDE { 207 int num_samples) OVERRIDE {
208 audio_bus->ToInterleavedPartial( 208 audio_bus->ToInterleavedPartial(
209 source_offset, num_samples, sizeof(int16), 209 source_offset, num_samples, sizeof(int16),
210 buffer_.get() + buffer_fill_offset * num_channels_); 210 buffer_.get() + buffer_fill_offset * num_channels_);
211 } 211 }
212 212
213 virtual bool EncodeFromFilledBuffer(std::vector<uint8>* out) OVERRIDE { 213 virtual bool EncodeFromFilledBuffer(std::string* out) OVERRIDE {
214 // Output 16-bit PCM integers in big-endian byte order. 214 // Output 16-bit PCM integers in big-endian byte order.
215 out->resize(num_channels_ * samples_per_10ms_ * sizeof(int16)); 215 out->resize(num_channels_ * samples_per_10ms_ * sizeof(int16));
216 const int16* src = buffer_.get(); 216 const int16* src = buffer_.get();
217 const int16* const src_end = src + num_channels_ * samples_per_10ms_; 217 const int16* const src_end = src + num_channels_ * samples_per_10ms_;
218 uint16* dest = reinterpret_cast<uint16*>(&out->front()); 218 uint16* dest = reinterpret_cast<uint16*>(&out->at(0));
219 for (; src < src_end; ++src, ++dest) 219 for (; src < src_end; ++src, ++dest)
220 *dest = base::HostToNet16(*src); 220 *dest = base::HostToNet16(*src);
221 return true; 221 return true;
222 } 222 }
223 223
224 private: 224 private:
225 const scoped_ptr<int16[]> buffer_; 225 const scoped_ptr<int16[]> buffer_;
226 226
227 DISALLOW_COPY_AND_ASSIGN(Pcm16Impl); 227 DISALLOW_COPY_AND_ASSIGN(Pcm16Impl);
228 }; 228 };
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 void AudioEncoder::EncodeAudio( 274 void AudioEncoder::EncodeAudio(
275 const AudioBus* audio_bus, 275 const AudioBus* audio_bus,
276 const base::TimeTicks& recorded_time, 276 const base::TimeTicks& recorded_time,
277 const base::Closure& done_callback) { 277 const base::Closure& done_callback) {
278 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::AUDIO_ENCODER)); 278 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::AUDIO_ENCODER));
279 impl_->EncodeAudio(audio_bus, recorded_time, done_callback); 279 impl_->EncodeAudio(audio_bus, recorded_time, done_callback);
280 } 280 }
281 281
282 } // namespace cast 282 } // namespace cast
283 } // namespace media 283 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/audio_receiver/audio_receiver.gypi ('k') | media/cast/audio_sender/audio_sender.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698