Index: chrome/renderer/media/cast_rtp_stream.cc |
diff --git a/chrome/renderer/media/cast_rtp_stream.cc b/chrome/renderer/media/cast_rtp_stream.cc |
index 8b2b84b9e29079787fcc44c073cf36b18c862a6e..ab2a324288911f2c9d5f23adbfb3b070f5abd1b2 100644 |
--- a/chrome/renderer/media/cast_rtp_stream.cc |
+++ b/chrome/renderer/media/cast_rtp_stream.cc |
@@ -163,18 +163,35 @@ bool ToAudioSenderConfig(const CastRtpParams& params, |
AudioSenderConfig* config) { |
config->ssrc = params.payload.ssrc; |
config->receiver_ssrc = params.payload.feedback_ssrc; |
- if (config->ssrc == config->receiver_ssrc) |
+ if (config->ssrc == config->receiver_ssrc) { |
+ DVLOG(1) << "ssrc " << config->ssrc << " cannot be equal to receiver_ssrc"; |
return false; |
+ } |
config->min_playout_delay = base::TimeDelta::FromMilliseconds( |
params.payload.min_latency_ms ? |
params.payload.min_latency_ms : |
params.payload.max_latency_ms); |
config->max_playout_delay = |
base::TimeDelta::FromMilliseconds(params.payload.max_latency_ms); |
- if (config->min_playout_delay <= base::TimeDelta()) |
+ config->animated_playout_delay = base::TimeDelta::FromMilliseconds( |
+ params.payload.animated_latency_ms ? params.payload.animated_latency_ms |
+ : params.payload.max_latency_ms); |
+ if (config->min_playout_delay <= base::TimeDelta()) { |
+ DVLOG(1) << "min_playout_delay " << config->min_playout_delay |
+ << " is too small"; |
+ return false; |
+ } |
+ if (config->min_playout_delay > config->max_playout_delay) { |
+ DVLOG(1) << "min_playout_delay " << config->min_playout_delay |
+ << " is too big"; |
return false; |
- if (config->min_playout_delay > config->max_playout_delay) |
+ } |
+ if (config->animated_playout_delay < config->min_playout_delay || |
+ config->animated_playout_delay > config->max_playout_delay) { |
+ DVLOG(1) << "animated_playout_delay " << config->animated_playout_delay |
+ << " is out of range"; |
return false; |
+ } |
config->rtp_payload_type = params.payload.payload_type; |
config->use_external_encoder = false; |
config->frequency = params.payload.clock_rate; |
@@ -187,16 +204,21 @@ bool ToAudioSenderConfig(const CastRtpParams& params, |
case 8000: |
break; |
default: |
+ DVLOG(1) << "frequency " << config->frequency << " is invalid"; |
return false; |
} |
config->channels = params.payload.channels; |
- if (config->channels < 1) |
+ if (config->channels < 1) { |
+ DVLOG(1) << "channels " << config->channels << " is invalid"; |
return false; |
+ } |
config->bitrate = params.payload.max_bitrate * kBitrateMultiplier; |
- if (params.payload.codec_name == kCodecNameOpus) |
+ if (params.payload.codec_name == kCodecNameOpus) { |
config->codec = media::cast::CODEC_AUDIO_OPUS; |
- else |
+ } else { |
+ DVLOG(1) << "codec_name " << params.payload.codec_name << " is invalid"; |
return false; |
+ } |
config->aes_key = params.payload.aes_key; |
config->aes_iv_mask = params.payload.aes_iv_mask; |
return true; |
@@ -206,29 +228,51 @@ bool ToVideoSenderConfig(const CastRtpParams& params, |
VideoSenderConfig* config) { |
config->ssrc = params.payload.ssrc; |
config->receiver_ssrc = params.payload.feedback_ssrc; |
- if (config->ssrc == config->receiver_ssrc) |
+ if (config->ssrc == config->receiver_ssrc) { |
+ DVLOG(1) << "ssrc " << config->ssrc << " cannot be equal to receiver_ssrc"; |
return false; |
+ } |
config->min_playout_delay = base::TimeDelta::FromMilliseconds( |
params.payload.min_latency_ms ? |
params.payload.min_latency_ms : |
params.payload.max_latency_ms); |
config->max_playout_delay = |
base::TimeDelta::FromMilliseconds(params.payload.max_latency_ms); |
- if (config->min_playout_delay <= base::TimeDelta()) |
+ config->animated_playout_delay = base::TimeDelta::FromMilliseconds( |
+ params.payload.animated_latency_ms ? params.payload.animated_latency_ms |
+ : params.payload.max_latency_ms); |
+ if (config->min_playout_delay <= base::TimeDelta()) { |
+ DVLOG(1) << "min_playout_delay " << config->min_playout_delay |
+ << " is too small"; |
+ return false; |
+ } |
+ if (config->min_playout_delay > config->max_playout_delay) { |
+ DVLOG(1) << "min_playout_delay " << config->min_playout_delay |
+ << " is too big"; |
return false; |
- if (config->min_playout_delay > config->max_playout_delay) |
+ } |
+ if (config->animated_playout_delay < config->min_playout_delay || |
+ config->animated_playout_delay > config->max_playout_delay) { |
+ DVLOG(1) << "animated_playout_delay " << config->animated_playout_delay |
+ << " is out of range"; |
return false; |
+ } |
config->rtp_payload_type = params.payload.payload_type; |
config->min_bitrate = config->start_bitrate = |
params.payload.min_bitrate * kBitrateMultiplier; |
config->max_bitrate = params.payload.max_bitrate * kBitrateMultiplier; |
- if (config->min_bitrate > config->max_bitrate) |
+ if (config->min_bitrate > config->max_bitrate) { |
+ DVLOG(1) << "min_bitrate " << config->min_bitrate << " is larger than " |
+ << "max_bitrate " << config->max_bitrate; |
return false; |
+ } |
config->start_bitrate = config->min_bitrate; |
config->max_frame_rate = static_cast<int>( |
std::max(1.0, params.payload.max_frame_rate) + 0.5); |
- if (config->max_frame_rate > media::limits::kMaxFramesPerSecond) |
+ if (config->max_frame_rate > media::limits::kMaxFramesPerSecond) { |
+ DVLOG(1) << "max_frame_rate " << config->max_frame_rate << " is invalid"; |
return false; |
+ } |
if (params.payload.codec_name == kCodecNameVp8) { |
config->use_external_encoder = IsHardwareVP8EncodingSupported(); |
config->codec = media::cast::CODEC_VIDEO_VP8; |
@@ -236,6 +280,7 @@ bool ToVideoSenderConfig(const CastRtpParams& params, |
config->use_external_encoder = IsHardwareH264EncodingSupported(); |
config->codec = media::cast::CODEC_VIDEO_H264; |
} else { |
+ DVLOG(1) << "codec_name " << params.payload.codec_name << " is invalid"; |
return false; |
} |
if (!config->use_external_encoder) |