Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(654)

Side by Side Diff: chrome/renderer/media/cast_rtp_stream.cc

Issue 1337243003: Extracted hardcoded constants from cast_rtp_stream. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | media/cast/cast_config.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback_helpers.h" 10 #include "base/callback_helpers.h"
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/memory/weak_ptr.h" 13 #include "base/memory/weak_ptr.h"
14 #include "base/strings/stringprintf.h" 14 #include "base/strings/stringprintf.h"
15 #include "base/sys_info.h" 15 #include "base/sys_info.h"
16 #include "base/trace_event/trace_event.h" 16 #include "base/trace_event/trace_event.h"
17 #include "chrome/common/chrome_switches.h" 17 #include "chrome/common/chrome_switches.h"
18 #include "chrome/renderer/media/cast_session.h" 18 #include "chrome/renderer/media/cast_session.h"
19 #include "chrome/renderer/media/cast_udp_transport.h" 19 #include "chrome/renderer/media/cast_udp_transport.h"
20 #include "content/public/renderer/media_stream_audio_sink.h" 20 #include "content/public/renderer/media_stream_audio_sink.h"
21 #include "content/public/renderer/media_stream_video_sink.h" 21 #include "content/public/renderer/media_stream_video_sink.h"
22 #include "content/public/renderer/render_thread.h" 22 #include "content/public/renderer/render_thread.h"
23 #include "content/public/renderer/video_encode_accelerator.h" 23 #include "content/public/renderer/video_encode_accelerator.h"
24 #include "media/audio/audio_parameters.h" 24 #include "media/audio/audio_parameters.h"
25 #include "media/base/audio_bus.h" 25 #include "media/base/audio_bus.h"
26 #include "media/base/audio_converter.h" 26 #include "media/base/audio_converter.h"
27 #include "media/base/audio_fifo.h" 27 #include "media/base/audio_fifo.h"
28 #include "media/base/bind_to_current_loop.h" 28 #include "media/base/bind_to_current_loop.h"
29 #include "media/base/limits.h"
29 #include "media/base/video_frame.h" 30 #include "media/base/video_frame.h"
30 #include "media/cast/cast_config.h" 31 #include "media/cast/cast_config.h"
31 #include "media/cast/cast_defines.h" 32 #include "media/cast/cast_defines.h"
32 #include "media/cast/cast_sender.h" 33 #include "media/cast/cast_sender.h"
33 #include "media/cast/net/cast_transport_config.h" 34 #include "media/cast/net/cast_transport_config.h"
34 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h" 35 #include "third_party/WebKit/public/platform/WebMediaStreamSource.h"
35 #include "ui/gfx/geometry/size.h" 36 #include "ui/gfx/geometry/size.h"
36 37
37 using media::cast::AudioSenderConfig; 38 using media::cast::AudioSenderConfig;
38 using media::cast::VideoSenderConfig; 39 using media::cast::VideoSenderConfig;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 payload.max_bitrate = 2000; 73 payload.max_bitrate = 2000;
73 payload.min_bitrate = 50; 74 payload.min_bitrate = 50;
74 payload.channels = 1; 75 payload.channels = 1;
75 payload.max_frame_rate = media::cast::kDefaultMaxFrameRate; 76 payload.max_frame_rate = media::cast::kDefaultMaxFrameRate;
76 payload.codec_name = kCodecNameVp8; 77 payload.codec_name = kCodecNameVp8;
77 return payload; 78 return payload;
78 } 79 }
79 80
80 CastRtpPayloadParams DefaultH264Payload() { 81 CastRtpPayloadParams DefaultH264Payload() {
81 CastRtpPayloadParams payload; 82 CastRtpPayloadParams payload;
82 // TODO(hshi): set different ssrc/rtpPayloadType values for H264 and VP8
83 // once b/13696137 is fixed.
84 payload.payload_type = 96; 83 payload.payload_type = 96;
85 payload.max_latency_ms = media::cast::kDefaultRtpMaxDelayMs; 84 payload.max_latency_ms = media::cast::kDefaultRtpMaxDelayMs;
86 payload.ssrc = 11; 85 payload.ssrc = 11;
87 payload.feedback_ssrc = 12; 86 payload.feedback_ssrc = 12;
88 payload.clock_rate = media::cast::kVideoFrequency; 87 payload.clock_rate = media::cast::kVideoFrequency;
89 payload.max_bitrate = 2000; 88 payload.max_bitrate = 2000;
90 payload.min_bitrate = 50; 89 payload.min_bitrate = 50;
91 payload.channels = 1; 90 payload.channels = 1;
92 payload.max_frame_rate = media::cast::kDefaultMaxFrameRate; 91 payload.max_frame_rate = media::cast::kDefaultMaxFrameRate;
93 payload.codec_name = kCodecNameH264; 92 payload.codec_name = kCodecNameH264;
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 159
161 return supported_params; 160 return supported_params;
162 } 161 }
163 162
164 bool ToAudioSenderConfig(const CastRtpParams& params, 163 bool ToAudioSenderConfig(const CastRtpParams& params,
165 AudioSenderConfig* config) { 164 AudioSenderConfig* config) {
166 config->ssrc = params.payload.ssrc; 165 config->ssrc = params.payload.ssrc;
167 config->receiver_ssrc = params.payload.feedback_ssrc; 166 config->receiver_ssrc = params.payload.feedback_ssrc;
168 if (config->ssrc == config->receiver_ssrc) 167 if (config->ssrc == config->receiver_ssrc)
169 return false; 168 return false;
170 config->min_playout_delay = 169 config->min_playout_delay = base::TimeDelta::FromMilliseconds(
171 base::TimeDelta::FromMilliseconds( 170 params.payload.min_latency_ms ?
172 params.payload.min_latency_ms ? 171 params.payload.min_latency_ms :
173 params.payload.min_latency_ms : 172 params.payload.max_latency_ms);
174 params.payload.max_latency_ms);
175 config->max_playout_delay = 173 config->max_playout_delay =
176 base::TimeDelta::FromMilliseconds(params.payload.max_latency_ms); 174 base::TimeDelta::FromMilliseconds(params.payload.max_latency_ms);
177 if (config->min_playout_delay <= base::TimeDelta()) 175 if (config->min_playout_delay <= base::TimeDelta())
178 return false; 176 return false;
179 if (config->min_playout_delay > config->max_playout_delay) 177 if (config->min_playout_delay > config->max_playout_delay)
180 return false; 178 return false;
181 config->rtp_payload_type = params.payload.payload_type; 179 config->rtp_payload_type = params.payload.payload_type;
182 config->use_external_encoder = false; 180 config->use_external_encoder = false;
183 config->frequency = params.payload.clock_rate; 181 config->frequency = params.payload.clock_rate;
184 if (config->frequency < 8000) 182 if (config->frequency < media::cast::kMinSampleRateForEncoding)
185 return false; 183 return false;
186 config->channels = params.payload.channels; 184 config->channels = params.payload.channels;
187 if (config->channels < 1) 185 if (config->channels < 1)
188 return false; 186 return false;
189 config->bitrate = params.payload.max_bitrate * kBitrateMultiplier; 187 config->bitrate = params.payload.max_bitrate * kBitrateMultiplier;
190 if (params.payload.codec_name == kCodecNameOpus) 188 if (params.payload.codec_name == kCodecNameOpus)
191 config->codec = media::cast::CODEC_AUDIO_OPUS; 189 config->codec = media::cast::CODEC_AUDIO_OPUS;
192 else 190 else
193 return false; 191 return false;
194 config->aes_key = params.payload.aes_key; 192 config->aes_key = params.payload.aes_key;
195 config->aes_iv_mask = params.payload.aes_iv_mask; 193 config->aes_iv_mask = params.payload.aes_iv_mask;
196 return true; 194 return true;
197 } 195 }
198 196
199 bool ToVideoSenderConfig(const CastRtpParams& params, 197 bool ToVideoSenderConfig(const CastRtpParams& params,
200 VideoSenderConfig* config) { 198 VideoSenderConfig* config) {
201 config->ssrc = params.payload.ssrc; 199 config->ssrc = params.payload.ssrc;
202 config->receiver_ssrc = params.payload.feedback_ssrc; 200 config->receiver_ssrc = params.payload.feedback_ssrc;
203 if (config->ssrc == config->receiver_ssrc) 201 if (config->ssrc == config->receiver_ssrc)
204 return false; 202 return false;
205 config->min_playout_delay = 203 config->min_playout_delay = base::TimeDelta::FromMilliseconds(
206 base::TimeDelta::FromMilliseconds( 204 params.payload.min_latency_ms ?
207 params.payload.min_latency_ms ? 205 params.payload.min_latency_ms :
208 params.payload.min_latency_ms : 206 params.payload.max_latency_ms);
209 params.payload.max_latency_ms);
210 config->max_playout_delay = 207 config->max_playout_delay =
211 base::TimeDelta::FromMilliseconds(params.payload.max_latency_ms); 208 base::TimeDelta::FromMilliseconds(params.payload.max_latency_ms);
212 if (config->min_playout_delay <= base::TimeDelta()) 209 if (config->min_playout_delay <= base::TimeDelta())
213 return false; 210 return false;
214 if (config->min_playout_delay > config->max_playout_delay) 211 if (config->min_playout_delay > config->max_playout_delay)
215 return false; 212 return false;
216 config->rtp_payload_type = params.payload.payload_type; 213 config->rtp_payload_type = params.payload.payload_type;
217 config->min_bitrate = config->start_bitrate = 214 config->min_bitrate = config->start_bitrate =
218 params.payload.min_bitrate * kBitrateMultiplier; 215 params.payload.min_bitrate * kBitrateMultiplier;
219 config->max_bitrate = params.payload.max_bitrate * kBitrateMultiplier; 216 config->max_bitrate = params.payload.max_bitrate * kBitrateMultiplier;
220 if (config->min_bitrate > config->max_bitrate) 217 if (config->min_bitrate > config->max_bitrate)
221 return false; 218 return false;
222 config->start_bitrate = config->min_bitrate; 219 config->start_bitrate = config->min_bitrate;
223 config->max_frame_rate = static_cast<int>( 220 config->max_frame_rate = static_cast<int>(
224 std::max(1.0, params.payload.max_frame_rate) + 0.5); 221 std::max(1.0, params.payload.max_frame_rate) + 0.5);
225 if (config->max_frame_rate > 120) 222 if (config->max_frame_rate > media::limits::kMaxFramesPerSecond)
226 return false; 223 return false;
227 if (params.payload.codec_name == kCodecNameVp8) { 224 if (params.payload.codec_name == kCodecNameVp8) {
228 config->use_external_encoder = IsHardwareVP8EncodingSupported(); 225 config->use_external_encoder = IsHardwareVP8EncodingSupported();
229 config->codec = media::cast::CODEC_VIDEO_VP8; 226 config->codec = media::cast::CODEC_VIDEO_VP8;
230 } else if (params.payload.codec_name == kCodecNameH264) { 227 } else if (params.payload.codec_name == kCodecNameH264) {
231 config->use_external_encoder = IsHardwareH264EncodingSupported(); 228 config->use_external_encoder = IsHardwareH264EncodingSupported();
232 config->codec = media::cast::CODEC_VIDEO_H264; 229 config->codec = media::cast::CODEC_VIDEO_H264;
233 } else { 230 } else {
234 return false; 231 return false;
235 } 232 }
236 if (!config->use_external_encoder) { 233 if (!config->use_external_encoder)
237 config->number_of_encode_threads = NumberOfEncodeThreads(); 234 config->number_of_encode_threads = NumberOfEncodeThreads();
238 }
239 config->aes_key = params.payload.aes_key; 235 config->aes_key = params.payload.aes_key;
240 config->aes_iv_mask = params.payload.aes_iv_mask; 236 config->aes_iv_mask = params.payload.aes_iv_mask;
241 return true; 237 return true;
242 } 238 }
243 239
244 } // namespace 240 } // namespace
245 241
246 // This class receives MediaStreamTrack events and video frames from a 242 // This class receives MediaStreamTrack events and video frames from a
247 // MediaStreamTrack. 243 // MediaStreamTrack.
248 // 244 //
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
575 DCHECK(content::RenderThread::Get()); 571 DCHECK(content::RenderThread::Get());
576 DVLOG(1) << "CastRtpStream::DidEncounterError(" << message << ") = " 572 DVLOG(1) << "CastRtpStream::DidEncounterError(" << message << ") = "
577 << (IsAudio() ? "audio" : "video"); 573 << (IsAudio() ? "audio" : "video");
578 // Save the WeakPtr first because the error callback might delete this object. 574 // Save the WeakPtr first because the error callback might delete this object.
579 base::WeakPtr<CastRtpStream> ptr = weak_factory_.GetWeakPtr(); 575 base::WeakPtr<CastRtpStream> ptr = weak_factory_.GetWeakPtr();
580 error_callback_.Run(message); 576 error_callback_.Run(message);
581 base::ThreadTaskRunnerHandle::Get()->PostTask( 577 base::ThreadTaskRunnerHandle::Get()->PostTask(
582 FROM_HERE, 578 FROM_HERE,
583 base::Bind(&CastRtpStream::Stop, ptr)); 579 base::Bind(&CastRtpStream::Stop, ptr));
584 } 580 }
OLDNEW
« no previous file with comments | « no previous file | media/cast/cast_config.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698