summaryrefslogtreecommitdiffstats
path: root/media/cast/audio_receiver/audio_receiver.cc
diff options
context:
space:
mode:
authorpwestin@google.com <pwestin@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2013-12-09 17:35:04 +0000
committerpwestin@google.com <pwestin@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2013-12-09 17:35:04 +0000
commit45d2215076e42ac758fe52dd41656c54f3648763 (patch)
tree565c53976bd8ba6026792e6a47b91d1d3abc5c74 /media/cast/audio_receiver/audio_receiver.cc
parent574e550753ac736041015ce17a506964c49681bc (diff)
downloadchromium_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.cc36
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();
}