diff options
author | pwestin@google.com <pwestin@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-09 17:35:04 +0000 |
---|---|---|
committer | pwestin@google.com <pwestin@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-12-09 17:35:04 +0000 |
commit | 45d2215076e42ac758fe52dd41656c54f3648763 (patch) | |
tree | 565c53976bd8ba6026792e6a47b91d1d3abc5c74 /media/cast/audio_receiver/audio_receiver.cc | |
parent | 574e550753ac736041015ce17a506964c49681bc (diff) | |
download | chromium_src-45d2215076e42ac758fe52dd41656c54f3648763.zip chromium_src-45d2215076e42ac758fe52dd41656c54f3648763.tar.gz chromium_src-45d2215076e42ac758fe52dd41656c54f3648763.tar.bz2 |
Cast: Add nack and ack signaling for audio when ACM from webrtc is used.
Cast was not sending ack or nack messages when the audio coding module
from webrtc where used. It did send ack and nack messages when the
external decoder where used.
Review URL: https://codereview.chromium.org/105683002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@239516 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/cast/audio_receiver/audio_receiver.cc')
-rw-r--r-- | media/cast/audio_receiver/audio_receiver.cc | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/media/cast/audio_receiver/audio_receiver.cc b/media/cast/audio_receiver/audio_receiver.cc index 9347f15..5aad22f 100644 --- a/media/cast/audio_receiver/audio_receiver.cc +++ b/media/cast/audio_receiver/audio_receiver.cc @@ -104,7 +104,9 @@ AudioReceiver::AudioReceiver(scoped_refptr<CastEnvironment> cast_environment, true, 0)); } else { - audio_decoder_.reset(new AudioDecoder(audio_config)); + audio_decoder_.reset(new AudioDecoder(cast_environment, + audio_config, + incoming_payload_feedback_.get())); } if (audio_config.aes_iv_mask.size() == kAesKeySize && audio_config.aes_key.size() == kAesKeySize) { @@ -453,24 +455,34 @@ void AudioReceiver::SendNextRtcpReport() { // if not triggered elsewhere, e.g. by the cast message_builder. void AudioReceiver::ScheduleNextCastMessage() { DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); + base::TimeTicks send_time; if (audio_buffer_) { - base::TimeTicks send_time; audio_buffer_->TimeToSendNextCastMessage(&send_time); - - base::TimeDelta time_to_send = send_time - - cast_environment_->Clock()->NowTicks(); - time_to_send = std::max(time_to_send, - base::TimeDelta::FromMilliseconds(kMinSchedulingDelayMs)); - cast_environment_->PostDelayedTask(CastEnvironment::MAIN, FROM_HERE, - base::Bind(&AudioReceiver::SendNextCastMessage, - weak_factory_.GetWeakPtr()), time_to_send); + } else if (audio_decoder_) { + audio_decoder_->TimeToSendNextCastMessage(&send_time); + } else { + NOTREACHED(); } + base::TimeDelta time_to_send = send_time - + cast_environment_->Clock()->NowTicks(); + time_to_send = std::max(time_to_send, + base::TimeDelta::FromMilliseconds(kMinSchedulingDelayMs)); + cast_environment_->PostDelayedTask(CastEnvironment::MAIN, FROM_HERE, + base::Bind(&AudioReceiver::SendNextCastMessage, + weak_factory_.GetWeakPtr()), time_to_send); } void AudioReceiver::SendNextCastMessage() { DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN)); - DCHECK(audio_buffer_) << "Invalid function call in this configuration"; - audio_buffer_->SendCastMessage(); // Will only send a message if it is time. + + if (audio_buffer_) { + // Will only send a message if it is time. + audio_buffer_->SendCastMessage(); + } + if (audio_decoder_) { + // Will only send a message if it is time. + audio_decoder_->SendCastMessage(); + } ScheduleNextCastMessage(); } |