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

Side by Side Diff: media/cast/audio_receiver/audio_receiver.cc

Issue 126843003: Revert of Cast:Adding cast_transport_config and cleaning up (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 11 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 | Annotate | Revision Log
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_receiver/audio_receiver.h" 5 #include "media/cast/audio_receiver/audio_receiver.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/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "crypto/encryptor.h" 10 #include "crypto/encryptor.h"
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 284
285 void AudioReceiver::PlayoutTimeout() { 285 void AudioReceiver::PlayoutTimeout() {
286 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); 286 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
287 DCHECK(audio_buffer_) << "Invalid function call in this configuration"; 287 DCHECK(audio_buffer_) << "Invalid function call in this configuration";
288 if (queued_encoded_callbacks_.empty()) { 288 if (queued_encoded_callbacks_.empty()) {
289 // Already released by incoming packet. 289 // Already released by incoming packet.
290 return; 290 return;
291 } 291 }
292 uint32 rtp_timestamp = 0; 292 uint32 rtp_timestamp = 0;
293 bool next_frame = false; 293 bool next_frame = false;
294 scoped_ptr<transport::EncodedAudioFrame> encoded_frame( 294 scoped_ptr<EncodedAudioFrame> encoded_frame(new EncodedAudioFrame());
295 new transport::EncodedAudioFrame());
296 295
297 if (!audio_buffer_->GetEncodedAudioFrame(encoded_frame.get(), 296 if (!audio_buffer_->GetEncodedAudioFrame(encoded_frame.get(),
298 &rtp_timestamp, &next_frame)) { 297 &rtp_timestamp, &next_frame)) {
299 // We have no audio frames. Wait for new packet(s). 298 // We have no audio frames. Wait for new packet(s).
300 // Since the application can post multiple AudioFrameEncodedCallback and 299 // Since the application can post multiple AudioFrameEncodedCallback and
301 // we only check the next frame to play out we might have multiple timeout 300 // we only check the next frame to play out we might have multiple timeout
302 // events firing after each other; however this should be a rare event. 301 // events firing after each other; however this should be a rare event.
303 VLOG(1) << "Failed to retrieved a complete frame at this point in time"; 302 VLOG(1) << "Failed to retrieved a complete frame at this point in time";
304 return; 303 return;
305 } 304 }
(...skipping 10 matching lines...) Expand all
316 } 315 }
317 } 316 }
318 317
319 void AudioReceiver::GetEncodedAudioFrame( 318 void AudioReceiver::GetEncodedAudioFrame(
320 const AudioFrameEncodedCallback& callback) { 319 const AudioFrameEncodedCallback& callback) {
321 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); 320 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
322 DCHECK(audio_buffer_) << "Invalid function call in this configuration"; 321 DCHECK(audio_buffer_) << "Invalid function call in this configuration";
323 322
324 uint32 rtp_timestamp = 0; 323 uint32 rtp_timestamp = 0;
325 bool next_frame = false; 324 bool next_frame = false;
326 scoped_ptr<transport::EncodedAudioFrame> encoded_frame( 325 scoped_ptr<EncodedAudioFrame> encoded_frame(new EncodedAudioFrame());
327 new transport::EncodedAudioFrame());
328 326
329 if (!audio_buffer_->GetEncodedAudioFrame(encoded_frame.get(), 327 if (!audio_buffer_->GetEncodedAudioFrame(encoded_frame.get(),
330 &rtp_timestamp, &next_frame)) { 328 &rtp_timestamp, &next_frame)) {
331 // We have no audio frames. Wait for new packet(s). 329 // We have no audio frames. Wait for new packet(s).
332 VLOG(1) << "Wait for more audio packets in frame"; 330 VLOG(1) << "Wait for more audio packets in frame";
333 queued_encoded_callbacks_.push_back(callback); 331 queued_encoded_callbacks_.push_back(callback);
334 return; 332 return;
335 } 333 }
336 if (decryptor_ && !DecryptAudioFrame(&encoded_frame)) { 334 if (decryptor_ && !DecryptAudioFrame(&encoded_frame)) {
337 // Logging already done. 335 // Logging already done.
338 queued_encoded_callbacks_.push_back(callback); 336 queued_encoded_callbacks_.push_back(callback);
339 return; 337 return;
340 } 338 }
341 if (!PostEncodedAudioFrame(callback, rtp_timestamp, next_frame, 339 if (!PostEncodedAudioFrame(callback, rtp_timestamp, next_frame,
342 &encoded_frame)) { 340 &encoded_frame)) {
343 // We have an audio frame; however we are missing packets and we have time 341 // We have an audio frame; however we are missing packets and we have time
344 // to wait for new packet(s). 342 // to wait for new packet(s).
345 queued_encoded_callbacks_.push_back(callback); 343 queued_encoded_callbacks_.push_back(callback);
346 } 344 }
347 } 345 }
348 346
349 bool AudioReceiver::PostEncodedAudioFrame( 347 bool AudioReceiver::PostEncodedAudioFrame(
350 const AudioFrameEncodedCallback& callback, 348 const AudioFrameEncodedCallback& callback,
351 uint32 rtp_timestamp, 349 uint32 rtp_timestamp,
352 bool next_frame, 350 bool next_frame,
353 scoped_ptr<transport::EncodedAudioFrame>* encoded_frame) { 351 scoped_ptr<EncodedAudioFrame>* encoded_frame) {
354 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); 352 DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
355 DCHECK(audio_buffer_) << "Invalid function call in this configuration"; 353 DCHECK(audio_buffer_) << "Invalid function call in this configuration";
356 354
357 base::TimeTicks now = cast_environment_->Clock()->NowTicks(); 355 base::TimeTicks now = cast_environment_->Clock()->NowTicks();
358 base::TimeTicks playout_time = GetPlayoutTime(now, rtp_timestamp); 356 base::TimeTicks playout_time = GetPlayoutTime(now, rtp_timestamp);
359 base::TimeDelta time_until_playout = playout_time - now; 357 base::TimeDelta time_until_playout = playout_time - now;
360 base::TimeDelta min_wait_delta = 358 base::TimeDelta min_wait_delta =
361 base::TimeDelta::FromMilliseconds(kMaxAudioFrameWaitMs); 359 base::TimeDelta::FromMilliseconds(kMaxAudioFrameWaitMs);
362 360
363 if (!next_frame && (time_until_playout > min_wait_delta)) { 361 if (!next_frame && (time_until_playout > min_wait_delta)) {
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
427 rtp_timestamp_in_ticks + time_offset_ + target_delay_delta_ : now; 425 rtp_timestamp_in_ticks + time_offset_ + target_delay_delta_ : now;
428 } 426 }
429 // Don't allow the playout time to go backwards. 427 // Don't allow the playout time to go backwards.
430 if (last_playout_time_ > playout_time) 428 if (last_playout_time_ > playout_time)
431 playout_time = last_playout_time_; 429 playout_time = last_playout_time_;
432 last_playout_time_ = playout_time; 430 last_playout_time_ = playout_time;
433 return playout_time; 431 return playout_time;
434 } 432 }
435 433
436 bool AudioReceiver::DecryptAudioFrame( 434 bool AudioReceiver::DecryptAudioFrame(
437 scoped_ptr<transport::EncodedAudioFrame>* audio_frame) { 435 scoped_ptr<EncodedAudioFrame>* audio_frame) {
438 DCHECK(decryptor_) << "Invalid state"; 436 DCHECK(decryptor_) << "Invalid state";
439 437
440 if (!decryptor_->SetCounter(GetAesNonce((*audio_frame)->frame_id, 438 if (!decryptor_->SetCounter(GetAesNonce((*audio_frame)->frame_id,
441 iv_mask_))) { 439 iv_mask_))) {
442 NOTREACHED() << "Failed to set counter"; 440 NOTREACHED() << "Failed to set counter";
443 return false; 441 return false;
444 } 442 }
445 std::string decrypted_audio_data; 443 std::string decrypted_audio_data;
446 if (!decryptor_->Decrypt((*audio_frame)->data, &decrypted_audio_data)) { 444 if (!decryptor_->Decrypt((*audio_frame)->data, &decrypted_audio_data)) {
447 VLOG(0) << "Decryption error"; 445 VLOG(0) << "Decryption error";
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 } 501 }
504 if (audio_decoder_) { 502 if (audio_decoder_) {
505 // Will only send a message if it is time. 503 // Will only send a message if it is time.
506 audio_decoder_->SendCastMessage(); 504 audio_decoder_->SendCastMessage();
507 } 505 }
508 ScheduleNextCastMessage(); 506 ScheduleNextCastMessage();
509 } 507 }
510 508
511 } // namespace cast 509 } // namespace cast
512 } // namespace media 510 } // namespace media
OLDNEW
« no previous file with comments | « media/cast/audio_receiver/audio_receiver.h ('k') | media/cast/audio_receiver/audio_receiver_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698