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

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

Issue 163553006: Cast: Refactoring Cast API's (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Updates and rebase Created 6 years, 9 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 | Annotate | Revision Log
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 "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/memory/weak_ptr.h" 9 #include "base/memory/weak_ptr.h"
10 #include "chrome/renderer/media/cast_session.h" 10 #include "chrome/renderer/media/cast_session.h"
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 DCHECK(render_thread_task_runner_->BelongsToCurrentThread()); 137 DCHECK(render_thread_task_runner_->BelongsToCurrentThread());
138 DCHECK(frame_input_); 138 DCHECK(frame_input_);
139 // TODO(hclam): Pass in the accurate capture time to have good 139 // TODO(hclam): Pass in the accurate capture time to have good
140 // audio/video sync. 140 // audio/video sync.
141 frame_input_->InsertRawVideoFrame(frame, base::TimeTicks::Now()); 141 frame_input_->InsertRawVideoFrame(frame, base::TimeTicks::Now());
142 } 142 }
143 143
144 // Attach this sink to MediaStreamTrack. This method call must 144 // Attach this sink to MediaStreamTrack. This method call must
145 // be made on the render thread. Incoming data can then be 145 // be made on the render thread. Incoming data can then be
146 // passed to media::cast::FrameInput on any thread. 146 // passed to media::cast::FrameInput on any thread.
147 void AddToTrack(const scoped_refptr<media::cast::FrameInput>& frame_input) { 147 void AddToTrack(
148 const scoped_refptr<media::cast::VideoFrameInput>& frame_input) {
148 DCHECK(render_thread_task_runner_->BelongsToCurrentThread()); 149 DCHECK(render_thread_task_runner_->BelongsToCurrentThread());
149 150
150 frame_input_ = frame_input; 151 frame_input_ = frame_input;
151 if (!sink_added_) { 152 if (!sink_added_) {
152 AddToVideoTrack(this, track_); 153 AddToVideoTrack(this, track_);
153 sink_added_ = true; 154 sink_added_ = true;
154 } 155 }
155 } 156 }
156 157
157 private: 158 private:
158 blink::WebMediaStreamTrack track_; 159 blink::WebMediaStreamTrack track_;
159 scoped_refptr<media::cast::FrameInput> frame_input_; 160 scoped_refptr<media::cast::VideoFrameInput> frame_input_;
160 bool sink_added_; 161 bool sink_added_;
161 CastRtpStream::ErrorCallback error_callback_; 162 CastRtpStream::ErrorCallback error_callback_;
162 scoped_refptr<base::SingleThreadTaskRunner> render_thread_task_runner_; 163 scoped_refptr<base::SingleThreadTaskRunner> render_thread_task_runner_;
163 164
164 DISALLOW_COPY_AND_ASSIGN(CastVideoSink); 165 DISALLOW_COPY_AND_ASSIGN(CastVideoSink);
165 }; 166 };
166 167
167 // Receives audio data from a MediaStreamTrack. Data is submitted to 168 // Receives audio data from a MediaStreamTrack. Data is submitted to
168 // media::cast::FrameInput. 169 // media::cast::FrameInput.
169 // 170 //
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 DCHECK(frame_input_); 222 DCHECK(frame_input_);
222 frame_input_->InsertAudio(audio_bus_ptr, recorded_time, done_callback); 223 frame_input_->InsertAudio(audio_bus_ptr, recorded_time, done_callback);
223 } 224 }
224 225
225 // Called on real-time audio thread. 226 // Called on real-time audio thread.
226 virtual void OnSetFormat(const media::AudioParameters& params) OVERRIDE { 227 virtual void OnSetFormat(const media::AudioParameters& params) OVERRIDE {
227 NOTIMPLEMENTED(); 228 NOTIMPLEMENTED();
228 } 229 }
229 230
230 // See CastVideoSink for details. 231 // See CastVideoSink for details.
231 void AddToTrack(const scoped_refptr<media::cast::FrameInput>& frame_input) { 232 void AddToTrack(
233 const scoped_refptr<media::cast::AudioFrameInput>& frame_input) {
232 DCHECK(render_thread_task_runner_->BelongsToCurrentThread()); 234 DCHECK(render_thread_task_runner_->BelongsToCurrentThread());
233 frame_input_ = frame_input; 235 frame_input_ = frame_input;
234 if (!sink_added_) { 236 if (!sink_added_) {
235 AddToAudioTrack(this, track_); 237 AddToAudioTrack(this, track_);
236 sink_added_ = true; 238 sink_added_ = true;
237 } 239 }
238 } 240 }
239 241
240 private: 242 private:
241 blink::WebMediaStreamTrack track_; 243 blink::WebMediaStreamTrack track_;
242 scoped_refptr<media::cast::FrameInput> frame_input_; 244 scoped_refptr<media::cast::AudioFrameInput> frame_input_;
243 bool sink_added_; 245 bool sink_added_;
244 CastRtpStream::ErrorCallback error_callback_; 246 CastRtpStream::ErrorCallback error_callback_;
245 base::WeakPtrFactory<CastAudioSink> weak_factory_; 247 base::WeakPtrFactory<CastAudioSink> weak_factory_;
246 scoped_refptr<base::SingleThreadTaskRunner> render_thread_task_runner_; 248 scoped_refptr<base::SingleThreadTaskRunner> render_thread_task_runner_;
247 249
248 DISALLOW_COPY_AND_ASSIGN(CastAudioSink); 250 DISALLOW_COPY_AND_ASSIGN(CastAudioSink);
249 }; 251 };
250 252
251 CastRtpParams::CastRtpParams(const CastRtpPayloadParams& payload_params) 253 CastRtpParams::CastRtpParams(const CastRtpPayloadParams& payload_params)
252 : payload(payload_params) {} 254 : payload(payload_params) {}
253 255
254 CastCodecSpecificParams::CastCodecSpecificParams() {} 256 CastCodecSpecificParams::CastCodecSpecificParams() {}
255 257
256 CastCodecSpecificParams::~CastCodecSpecificParams() {} 258 CastCodecSpecificParams::~CastCodecSpecificParams() {}
257 259
258 CastRtpPayloadParams::CastRtpPayloadParams() 260 CastRtpPayloadParams::CastRtpPayloadParams()
259 : payload_type(0), 261 : payload_type(0),
260 ssrc(0), 262 ssrc(0),
261 feedback_ssrc(0), 263 feedback_ssrc(0),
262 clock_rate(0), 264 clock_rate(0),
263 max_bitrate(0), 265 max_bitrate(0),
264 min_bitrate(0), 266 min_bitrate(0),
265 channels(0), 267 channels(0),
266 width(0), 268 width(0),
267 height(0) { 269 height(0) {}
268 }
269 270
270 CastRtpPayloadParams::~CastRtpPayloadParams() { 271 CastRtpPayloadParams::~CastRtpPayloadParams() {}
271 }
272 272
273 CastRtpParams::CastRtpParams() { 273 CastRtpParams::CastRtpParams() {}
274 }
275 274
276 CastRtpParams::~CastRtpParams() { 275 CastRtpParams::~CastRtpParams() {}
277 }
278 276
279 CastRtpStream::CastRtpStream(const blink::WebMediaStreamTrack& track, 277 CastRtpStream::CastRtpStream(const blink::WebMediaStreamTrack& track,
280 const scoped_refptr<CastSession>& session) 278 const scoped_refptr<CastSession>& session)
281 : track_(track), 279 : track_(track), cast_session_(session), weak_factory_(this) {}
282 cast_session_(session),
283 weak_factory_(this) {}
284 280
285 CastRtpStream::~CastRtpStream() { 281 CastRtpStream::~CastRtpStream() {}
286 }
287 282
288 std::vector<CastRtpParams> CastRtpStream::GetSupportedParams() { 283 std::vector<CastRtpParams> CastRtpStream::GetSupportedParams() {
289 if (IsAudio()) 284 if (IsAudio())
290 return SupportedAudioParams(); 285 return SupportedAudioParams();
291 else 286 else
292 return SupportedVideoParams(); 287 return SupportedVideoParams();
293 } 288 }
294 289
295 CastRtpParams CastRtpStream::GetParams() { 290 CastRtpParams CastRtpStream::GetParams() { return params_; }
296 return params_;
297 }
298 291
299 void CastRtpStream::Start(const CastRtpParams& params, 292 void CastRtpStream::Start(const CastRtpParams& params,
300 const base::Closure& start_callback, 293 const base::Closure& start_callback,
301 const base::Closure& stop_callback, 294 const base::Closure& stop_callback,
302 const ErrorCallback& error_callback) { 295 const ErrorCallback& error_callback) {
303 stop_callback_ = stop_callback; 296 stop_callback_ = stop_callback;
304 error_callback_ = error_callback; 297 error_callback_ = error_callback;
305 298
306 if (IsAudio()) { 299 if (IsAudio()) {
307 AudioSenderConfig config; 300 AudioSenderConfig config;
308 if (!ToAudioSenderConfig(params, &config)) { 301 if (!ToAudioSenderConfig(params, &config)) {
309 DidEncounterError("Invalid parameters for audio."); 302 DidEncounterError("Invalid parameters for audio.");
310 return; 303 return;
311 } 304 }
312 // In case of error we have to go through DidEncounterError() to stop 305 // In case of error we have to go through DidEncounterError() to stop
313 // the streaming after reporting the error. 306 // the streaming after reporting the error.
314 audio_sink_.reset(new CastAudioSink( 307 audio_sink_.reset(new CastAudioSink(
315 track_, 308 track_,
316 media::BindToCurrentLoop(base::Bind(&CastRtpStream::DidEncounterError, 309 media::BindToCurrentLoop(base::Bind(&CastRtpStream::DidEncounterError,
317 weak_factory_.GetWeakPtr())))); 310 weak_factory_.GetWeakPtr()))));
318 cast_session_->StartAudio( 311 cast_session_->StartAudio(
319 config, 312 config,
320 base::Bind(&CastAudioSink::AddToTrack, 313 base::Bind(&CastAudioSink::AddToTrack, audio_sink_->AsWeakPtr()));
321 audio_sink_->AsWeakPtr()));
322 start_callback.Run(); 314 start_callback.Run();
323 } else { 315 } else {
324 VideoSenderConfig config; 316 VideoSenderConfig config;
325 if (!ToVideoSenderConfig(params, &config)) { 317 if (!ToVideoSenderConfig(params, &config)) {
326 DidEncounterError("Invalid parameters for video."); 318 DidEncounterError("Invalid parameters for video.");
327 return; 319 return;
328 } 320 }
329 // See the code for audio above for explanation of callbacks. 321 // See the code for audio above for explanation of callbacks.
330 video_sink_.reset(new CastVideoSink( 322 video_sink_.reset(new CastVideoSink(
331 track_, 323 track_,
332 media::BindToCurrentLoop(base::Bind(&CastRtpStream::DidEncounterError, 324 media::BindToCurrentLoop(base::Bind(&CastRtpStream::DidEncounterError,
333 weak_factory_.GetWeakPtr())))); 325 weak_factory_.GetWeakPtr()))));
334 cast_session_->StartVideo( 326 cast_session_->StartVideo(
335 config, 327 config,
336 base::Bind(&CastVideoSink::AddToTrack, 328 base::Bind(&CastVideoSink::AddToTrack, video_sink_->AsWeakPtr()));
337 video_sink_->AsWeakPtr()));
338 start_callback.Run(); 329 start_callback.Run();
339 } 330 }
340 } 331 }
341 332
342 void CastRtpStream::Stop() { 333 void CastRtpStream::Stop() {
343 audio_sink_.reset(); 334 audio_sink_.reset();
344 video_sink_.reset(); 335 video_sink_.reset();
345 stop_callback_.Run(); 336 stop_callback_.Run();
346 } 337 }
347 338
348 void CastRtpStream::ToggleLogging(bool enable) { 339 void CastRtpStream::ToggleLogging(bool enable) {
349 cast_session_->ToggleLogging(IsAudio(), enable); 340 cast_session_->ToggleLogging(IsAudio(), enable);
350 } 341 }
351 342
352 void CastRtpStream::GetRawEvents( 343 void CastRtpStream::GetRawEvents(
353 const base::Callback<void(scoped_ptr<std::string>)>& callback) { 344 const base::Callback<void(scoped_ptr<std::string>)>& callback) {
354 cast_session_->GetEventLogsAndReset(IsAudio(), callback); 345 cast_session_->GetEventLogsAndReset(IsAudio(), callback);
355 } 346 }
356 347
357 bool CastRtpStream::IsAudio() const { 348 bool CastRtpStream::IsAudio() const {
358 return track_.source().type() == blink::WebMediaStreamSource::TypeAudio; 349 return track_.source().type() == blink::WebMediaStreamSource::TypeAudio;
359 } 350 }
360 351
361 void CastRtpStream::DidEncounterError(const std::string& message) { 352 void CastRtpStream::DidEncounterError(const std::string& message) {
362 error_callback_.Run(message); 353 error_callback_.Run(message);
363 Stop(); 354 Stop();
364 } 355 }
OLDNEW
« no previous file with comments | « no previous file | chrome/renderer/media/cast_session.h » ('j') | chrome/renderer/media/cast_session_delegate.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698