| Index: media/cast/audio_receiver/audio_receiver.cc
|
| diff --git a/media/cast/audio_receiver/audio_receiver.cc b/media/cast/audio_receiver/audio_receiver.cc
|
| index 4b0803f9dbd4ca7336d5bc4e4cc16244d535766d..1f47827ec648535185cf970af146b94fdc716c46 100644
|
| --- a/media/cast/audio_receiver/audio_receiver.cc
|
| +++ b/media/cast/audio_receiver/audio_receiver.cc
|
| @@ -14,29 +14,30 @@
|
|
|
| namespace {
|
| const int kMinSchedulingDelayMs = 1;
|
| -// TODO(miu): This should go in AudioReceiverConfig.
|
| -const int kTypicalAudioFrameDurationMs = 10;
|
| } // namespace
|
|
|
| namespace media {
|
| namespace cast {
|
|
|
| AudioReceiver::AudioReceiver(scoped_refptr<CastEnvironment> cast_environment,
|
| - const AudioReceiverConfig& audio_config,
|
| + const FrameReceiverConfig& audio_config,
|
| transport::PacedPacketSender* const packet_sender)
|
| : RtpReceiver(cast_environment->Clock(), &audio_config, NULL),
|
| cast_environment_(cast_environment),
|
| event_subscriber_(kReceiverRtcpEventHistorySize, AUDIO_EVENT),
|
| - codec_(audio_config.codec),
|
| + codec_(audio_config.codec.audio),
|
| frequency_(audio_config.frequency),
|
| target_playout_delay_(
|
| base::TimeDelta::FromMilliseconds(audio_config.rtp_max_delay_ms)),
|
| + expected_frame_duration_(
|
| + base::TimeDelta::FromSeconds(1) / audio_config.max_frame_rate),
|
| reports_are_scheduled_(false),
|
| framer_(cast_environment->Clock(),
|
| this,
|
| audio_config.incoming_ssrc,
|
| true,
|
| - audio_config.rtp_max_delay_ms / kTypicalAudioFrameDurationMs),
|
| + audio_config.rtp_max_delay_ms * audio_config.max_frame_rate /
|
| + 1000),
|
| rtcp_(cast_environment,
|
| NULL,
|
| NULL,
|
| @@ -51,8 +52,9 @@ AudioReceiver::AudioReceiver(scoped_refptr<CastEnvironment> cast_environment,
|
| is_waiting_for_consecutive_frame_(false),
|
| lip_sync_drift_(ClockDriftSmoother::GetDefaultTimeConstant()),
|
| weak_factory_(this) {
|
| - if (!audio_config.use_external_decoder)
|
| - audio_decoder_.reset(new AudioDecoder(cast_environment, audio_config));
|
| + DCHECK_GT(audio_config.rtp_max_delay_ms, 0);
|
| + DCHECK_GT(audio_config.max_frame_rate, 0);
|
| + audio_decoder_.reset(new AudioDecoder(cast_environment, audio_config));
|
| decryptor_.Initialize(audio_config.aes_key, audio_config.aes_iv_mask);
|
| rtcp_.SetTargetDelay(target_playout_delay_);
|
| cast_environment_->Logging()->AddRawEventSubscriber(&event_subscriber_);
|
| @@ -219,7 +221,7 @@ void AudioReceiver::EmitAvailableEncodedFrames() {
|
| if (!is_consecutively_next_frame) {
|
| // TODO(miu): Also account for expected decode time here?
|
| const base::TimeTicks earliest_possible_end_time_of_missing_frame =
|
| - now + base::TimeDelta::FromMilliseconds(kTypicalAudioFrameDurationMs);
|
| + now + expected_frame_duration_;
|
| if (earliest_possible_end_time_of_missing_frame < playout_time) {
|
| VLOG(1) << "Wait for next consecutive frame instead of skipping.";
|
| if (!is_waiting_for_consecutive_frame_) {
|
|
|