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 <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <memory> | 10 #include <memory> |
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
338 consecutive_refresh_count_(0), | 338 consecutive_refresh_count_(0), |
339 expecting_a_refresh_frame_(false) {} | 339 expecting_a_refresh_frame_(false) {} |
340 | 340 |
341 ~CastVideoSink() override { | 341 ~CastVideoSink() override { |
342 MediaStreamVideoSink::DisconnectFromTrack(); | 342 MediaStreamVideoSink::DisconnectFromTrack(); |
343 } | 343 } |
344 | 344 |
345 // Attach this sink to a video track represented by |track_|. | 345 // Attach this sink to a video track represented by |track_|. |
346 // Data received from the track will be submitted to |frame_input|. | 346 // Data received from the track will be submitted to |frame_input|. |
347 void AddToTrack( | 347 void AddToTrack( |
| 348 bool is_sink_secure, |
348 const scoped_refptr<media::cast::VideoFrameInput>& frame_input) { | 349 const scoped_refptr<media::cast::VideoFrameInput>& frame_input) { |
349 DCHECK(deliverer_); | 350 DCHECK(deliverer_); |
350 deliverer_->WillConnectToTrack(AsWeakPtr(), frame_input); | 351 deliverer_->WillConnectToTrack(AsWeakPtr(), frame_input); |
351 refresh_timer_.Start( | 352 refresh_timer_.Start( |
352 FROM_HERE, | 353 FROM_HERE, |
353 base::TimeDelta::FromMilliseconds(kRefreshIntervalMilliseconds), | 354 base::TimeDelta::FromMilliseconds(kRefreshIntervalMilliseconds), |
354 base::Bind(&CastVideoSink::OnRefreshTimerFired, | 355 base::Bind(&CastVideoSink::OnRefreshTimerFired, |
355 base::Unretained(this))); | 356 base::Unretained(this))); |
356 MediaStreamVideoSink::ConnectToTrack(track_, | 357 MediaStreamVideoSink::ConnectToTrack( |
357 base::Bind(&Deliverer::OnVideoFrame, | 358 track_, base::Bind(&Deliverer::OnVideoFrame, deliverer_), |
358 deliverer_)); | 359 is_sink_secure); |
359 } | 360 } |
360 | 361 |
361 private: | 362 private: |
362 class Deliverer : public base::RefCountedThreadSafe<Deliverer> { | 363 class Deliverer : public base::RefCountedThreadSafe<Deliverer> { |
363 public: | 364 public: |
364 explicit Deliverer(const CastRtpStream::ErrorCallback& error_callback) | 365 explicit Deliverer(const CastRtpStream::ErrorCallback& error_callback) |
365 : main_task_runner_(base::ThreadTaskRunnerHandle::Get()), | 366 : main_task_runner_(base::ThreadTaskRunnerHandle::Get()), |
366 error_callback_(error_callback) {} | 367 error_callback_(error_callback) {} |
367 | 368 |
368 void WillConnectToTrack( | 369 void WillConnectToTrack( |
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
678 if (!ToVideoSenderConfig(params, &config)) { | 679 if (!ToVideoSenderConfig(params, &config)) { |
679 DidEncounterError("Invalid parameters for video."); | 680 DidEncounterError("Invalid parameters for video."); |
680 return; | 681 return; |
681 } | 682 } |
682 // See the code for audio above for explanation of callbacks. | 683 // See the code for audio above for explanation of callbacks. |
683 video_sink_.reset(new CastVideoSink( | 684 video_sink_.reset(new CastVideoSink( |
684 track_, | 685 track_, |
685 media::BindToCurrentLoop(base::Bind(&CastRtpStream::DidEncounterError, | 686 media::BindToCurrentLoop(base::Bind(&CastRtpStream::DidEncounterError, |
686 weak_factory_.GetWeakPtr())))); | 687 weak_factory_.GetWeakPtr())))); |
687 cast_session_->StartVideo( | 688 cast_session_->StartVideo( |
688 config, | 689 config, base::Bind(&CastVideoSink::AddToTrack, video_sink_->AsWeakPtr(), |
689 base::Bind(&CastVideoSink::AddToTrack, video_sink_->AsWeakPtr()), | 690 !params.payload.aes_key.empty()), |
690 base::Bind(&CastRtpStream::DidEncounterError, | 691 base::Bind(&CastRtpStream::DidEncounterError, |
691 weak_factory_.GetWeakPtr())); | 692 weak_factory_.GetWeakPtr())); |
692 start_callback.Run(); | 693 start_callback.Run(); |
693 } | 694 } |
694 } | 695 } |
695 | 696 |
696 void CastRtpStream::Stop() { | 697 void CastRtpStream::Stop() { |
697 DVLOG(1) << "CastRtpStream::Stop = " << (IsAudio() ? "audio" : "video"); | 698 DVLOG(1) << "CastRtpStream::Stop = " << (IsAudio() ? "audio" : "video"); |
698 if (stop_callback_.is_null()) | 699 if (stop_callback_.is_null()) |
699 return; // Already stopped. | 700 return; // Already stopped. |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
734 DCHECK(content::RenderThread::Get()); | 735 DCHECK(content::RenderThread::Get()); |
735 DVLOG(1) << "CastRtpStream::DidEncounterError(" << message << ") = " | 736 DVLOG(1) << "CastRtpStream::DidEncounterError(" << message << ") = " |
736 << (IsAudio() ? "audio" : "video"); | 737 << (IsAudio() ? "audio" : "video"); |
737 // Save the WeakPtr first because the error callback might delete this object. | 738 // Save the WeakPtr first because the error callback might delete this object. |
738 base::WeakPtr<CastRtpStream> ptr = weak_factory_.GetWeakPtr(); | 739 base::WeakPtr<CastRtpStream> ptr = weak_factory_.GetWeakPtr(); |
739 error_callback_.Run(message); | 740 error_callback_.Run(message); |
740 base::ThreadTaskRunnerHandle::Get()->PostTask( | 741 base::ThreadTaskRunnerHandle::Get()->PostTask( |
741 FROM_HERE, | 742 FROM_HERE, |
742 base::Bind(&CastRtpStream::Stop, ptr)); | 743 base::Bind(&CastRtpStream::Stop, ptr)); |
743 } | 744 } |
OLD | NEW |