OLD | NEW |
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 "chrome/renderer/media/cast_rtp_stream.h" | 5 #include "chrome/renderer/media/cast_rtp_stream.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/debug/trace_event.h" | 8 #include "base/debug/trace_event.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/memory/weak_ptr.h" | 10 #include "base/memory/weak_ptr.h" |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 supported_params.push_back(CastRtpParams(DefaultVp8Payload())); | 153 supported_params.push_back(CastRtpParams(DefaultVp8Payload())); |
154 return supported_params; | 154 return supported_params; |
155 } | 155 } |
156 | 156 |
157 bool ToAudioSenderConfig(const CastRtpParams& params, | 157 bool ToAudioSenderConfig(const CastRtpParams& params, |
158 AudioSenderConfig* config) { | 158 AudioSenderConfig* config) { |
159 config->ssrc = params.payload.ssrc; | 159 config->ssrc = params.payload.ssrc; |
160 config->incoming_feedback_ssrc = params.payload.feedback_ssrc; | 160 config->incoming_feedback_ssrc = params.payload.feedback_ssrc; |
161 if (config->ssrc == config->incoming_feedback_ssrc) | 161 if (config->ssrc == config->incoming_feedback_ssrc) |
162 return false; | 162 return false; |
163 config->target_playout_delay = | 163 config->min_playout_delay = |
| 164 base::TimeDelta::FromMilliseconds( |
| 165 params.payload.min_latency_ms ? |
| 166 params.payload.min_latency_ms : |
| 167 params.payload.max_latency_ms); |
| 168 config->max_playout_delay = |
164 base::TimeDelta::FromMilliseconds(params.payload.max_latency_ms); | 169 base::TimeDelta::FromMilliseconds(params.payload.max_latency_ms); |
165 if (config->target_playout_delay <= base::TimeDelta()) | 170 if (config->min_playout_delay <= base::TimeDelta()) |
| 171 return false; |
| 172 if (config->min_playout_delay > config->max_playout_delay) |
166 return false; | 173 return false; |
167 config->rtp_payload_type = params.payload.payload_type; | 174 config->rtp_payload_type = params.payload.payload_type; |
168 config->use_external_encoder = false; | 175 config->use_external_encoder = false; |
169 config->frequency = params.payload.clock_rate; | 176 config->frequency = params.payload.clock_rate; |
170 if (config->frequency < 8000) | 177 if (config->frequency < 8000) |
171 return false; | 178 return false; |
172 config->channels = params.payload.channels; | 179 config->channels = params.payload.channels; |
173 if (config->channels < 1) | 180 if (config->channels < 1) |
174 return false; | 181 return false; |
175 config->bitrate = params.payload.max_bitrate * kBitrateMultiplier; | 182 config->bitrate = params.payload.max_bitrate * kBitrateMultiplier; |
176 if (params.payload.codec_name == kCodecNameOpus) | 183 if (params.payload.codec_name == kCodecNameOpus) |
177 config->codec = media::cast::CODEC_AUDIO_OPUS; | 184 config->codec = media::cast::CODEC_AUDIO_OPUS; |
178 else | 185 else |
179 return false; | 186 return false; |
180 config->aes_key = params.payload.aes_key; | 187 config->aes_key = params.payload.aes_key; |
181 config->aes_iv_mask = params.payload.aes_iv_mask; | 188 config->aes_iv_mask = params.payload.aes_iv_mask; |
182 return true; | 189 return true; |
183 } | 190 } |
184 | 191 |
185 bool ToVideoSenderConfig(const CastRtpParams& params, | 192 bool ToVideoSenderConfig(const CastRtpParams& params, |
186 VideoSenderConfig* config) { | 193 VideoSenderConfig* config) { |
187 config->ssrc = params.payload.ssrc; | 194 config->ssrc = params.payload.ssrc; |
188 config->incoming_feedback_ssrc = params.payload.feedback_ssrc; | 195 config->incoming_feedback_ssrc = params.payload.feedback_ssrc; |
189 if (config->ssrc == config->incoming_feedback_ssrc) | 196 if (config->ssrc == config->incoming_feedback_ssrc) |
190 return false; | 197 return false; |
191 config->target_playout_delay = | 198 config->min_playout_delay = |
| 199 base::TimeDelta::FromMilliseconds( |
| 200 params.payload.min_latency_ms ? |
| 201 params.payload.min_latency_ms : |
| 202 params.payload.max_latency_ms); |
| 203 config->max_playout_delay = |
192 base::TimeDelta::FromMilliseconds(params.payload.max_latency_ms); | 204 base::TimeDelta::FromMilliseconds(params.payload.max_latency_ms); |
193 if (config->target_playout_delay <= base::TimeDelta()) | 205 if (config->min_playout_delay <= base::TimeDelta()) |
| 206 return false; |
| 207 if (config->min_playout_delay > config->max_playout_delay) |
194 return false; | 208 return false; |
195 config->rtp_payload_type = params.payload.payload_type; | 209 config->rtp_payload_type = params.payload.payload_type; |
196 config->width = params.payload.width; | 210 config->width = params.payload.width; |
197 config->height = params.payload.height; | 211 config->height = params.payload.height; |
198 if (config->width < 2 || config->height < 2) | 212 if (config->width < 2 || config->height < 2) |
199 return false; | 213 return false; |
200 config->min_bitrate = config->start_bitrate = | 214 config->min_bitrate = config->start_bitrate = |
201 params.payload.min_bitrate * kBitrateMultiplier; | 215 params.payload.min_bitrate * kBitrateMultiplier; |
202 config->max_bitrate = params.payload.max_bitrate * kBitrateMultiplier; | 216 config->max_bitrate = params.payload.max_bitrate * kBitrateMultiplier; |
203 if (config->min_bitrate > config->max_bitrate) | 217 if (config->min_bitrate > config->max_bitrate) |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
457 CastRtpParams::CastRtpParams(const CastRtpPayloadParams& payload_params) | 471 CastRtpParams::CastRtpParams(const CastRtpPayloadParams& payload_params) |
458 : payload(payload_params) {} | 472 : payload(payload_params) {} |
459 | 473 |
460 CastCodecSpecificParams::CastCodecSpecificParams() {} | 474 CastCodecSpecificParams::CastCodecSpecificParams() {} |
461 | 475 |
462 CastCodecSpecificParams::~CastCodecSpecificParams() {} | 476 CastCodecSpecificParams::~CastCodecSpecificParams() {} |
463 | 477 |
464 CastRtpPayloadParams::CastRtpPayloadParams() | 478 CastRtpPayloadParams::CastRtpPayloadParams() |
465 : payload_type(0), | 479 : payload_type(0), |
466 max_latency_ms(0), | 480 max_latency_ms(0), |
| 481 min_latency_ms(0), |
467 ssrc(0), | 482 ssrc(0), |
468 feedback_ssrc(0), | 483 feedback_ssrc(0), |
469 clock_rate(0), | 484 clock_rate(0), |
470 max_bitrate(0), | 485 max_bitrate(0), |
471 min_bitrate(0), | 486 min_bitrate(0), |
472 channels(0), | 487 channels(0), |
473 max_frame_rate(0.0), | 488 max_frame_rate(0.0), |
474 width(0), | 489 width(0), |
475 height(0) {} | 490 height(0) {} |
476 | 491 |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
581 void CastRtpStream::DidEncounterError(const std::string& message) { | 596 void CastRtpStream::DidEncounterError(const std::string& message) { |
582 VLOG(1) << "CastRtpStream::DidEncounterError(" << message << ") = " | 597 VLOG(1) << "CastRtpStream::DidEncounterError(" << message << ") = " |
583 << (IsAudio() ? "audio" : "video"); | 598 << (IsAudio() ? "audio" : "video"); |
584 // Save the WeakPtr first because the error callback might delete this object. | 599 // Save the WeakPtr first because the error callback might delete this object. |
585 base::WeakPtr<CastRtpStream> ptr = weak_factory_.GetWeakPtr(); | 600 base::WeakPtr<CastRtpStream> ptr = weak_factory_.GetWeakPtr(); |
586 error_callback_.Run(message); | 601 error_callback_.Run(message); |
587 content::RenderThread::Get()->GetMessageLoop()->PostTask( | 602 content::RenderThread::Get()->GetMessageLoop()->PostTask( |
588 FROM_HERE, | 603 FROM_HERE, |
589 base::Bind(&CastRtpStream::Stop, ptr)); | 604 base::Bind(&CastRtpStream::Stop, ptr)); |
590 } | 605 } |
OLD | NEW |