| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "remoting/protocol/webrtc_video_stream.h" | 5 #include "remoting/protocol/webrtc_video_stream.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "remoting/protocol/webrtc_video_capturer_adapter.h" |
| 8 #include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h" | 9 #include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h" |
| 9 #include "third_party/libjingle/source/talk/app/webrtc/peerconnectioninterface.h
" | 10 #include "third_party/libjingle/source/talk/app/webrtc/peerconnectioninterface.h
" |
| 11 #include "third_party/libjingle/source/talk/app/webrtc/test/fakeconstraints.h" |
| 10 #include "third_party/libjingle/source/talk/app/webrtc/videosourceinterface.h" | 12 #include "third_party/libjingle/source/talk/app/webrtc/videosourceinterface.h" |
| 11 | 13 |
| 12 namespace remoting { | 14 namespace remoting { |
| 13 namespace protocol { | 15 namespace protocol { |
| 14 | 16 |
| 15 WebrtcVideoStream::WebrtcVideoStream( | 17 const char kStreamLabel[] = "screen_stream"; |
| 16 rtc::scoped_refptr<webrtc::PeerConnectionInterface> connection, | 18 const char kVideoLabel[] = "screen_video"; |
| 17 rtc::scoped_refptr<webrtc::MediaStreamInterface> stream) | 19 |
| 18 : connection_(connection), stream_(stream) {} | 20 WebrtcVideoStream::WebrtcVideoStream() {} |
| 19 | 21 |
| 20 WebrtcVideoStream::~WebrtcVideoStream() { | 22 WebrtcVideoStream::~WebrtcVideoStream() { |
| 21 for (const auto& track : stream_->GetVideoTracks()) { | 23 if (stream_) { |
| 22 track->GetSource()->Stop(); | 24 for (const auto& track : stream_->GetVideoTracks()) { |
| 23 stream_->RemoveTrack(track.get()); | 25 track->GetSource()->Stop(); |
| 26 stream_->RemoveTrack(track.get()); |
| 27 } |
| 28 connection_->RemoveStream(stream_.get()); |
| 24 } | 29 } |
| 25 connection_->RemoveStream(stream_.get()); | 30 |
| 31 // MediaStream may still outlive WebrtcVideoStream because it's |
| 32 // ref-counted. Reset SizeCallback to make sure it won't be called again. |
| 33 if (capturer_adapter_) |
| 34 capturer_adapter_->SetSizeCallback(SizeCallback()); |
| 35 } |
| 36 |
| 37 bool WebrtcVideoStream::Start( |
| 38 scoped_ptr<webrtc::DesktopCapturer> desktop_capturer, |
| 39 scoped_refptr<webrtc::PeerConnectionInterface> connection, |
| 40 scoped_refptr<webrtc::PeerConnectionFactoryInterface> |
| 41 peer_connection_factory) { |
| 42 scoped_ptr<WebrtcVideoCapturerAdapter> capturer_adapter( |
| 43 new WebrtcVideoCapturerAdapter(std::move(desktop_capturer))); |
| 44 capturer_adapter_ = capturer_adapter_->GetWeakPtr(); |
| 45 |
| 46 connection_ = connection; |
| 47 |
| 48 // Set video stream constraints. |
| 49 webrtc::FakeConstraints video_constraints; |
| 50 video_constraints.AddMandatory( |
| 51 webrtc::MediaConstraintsInterface::kMinFrameRate, 5); |
| 52 |
| 53 rtc::scoped_refptr<webrtc::VideoTrackInterface> video_track = |
| 54 peer_connection_factory->CreateVideoTrack( |
| 55 kVideoLabel, peer_connection_factory->CreateVideoSource( |
| 56 capturer_adapter.release(), &video_constraints)); |
| 57 |
| 58 stream_ = peer_connection_factory->CreateLocalMediaStream(kStreamLabel); |
| 59 |
| 60 if (!stream_->AddTrack(video_track.get()) || |
| 61 !connection_->AddStream(stream_.get())) { |
| 62 stream_ = nullptr; |
| 63 connection_ = nullptr; |
| 64 return false; |
| 65 } |
| 66 |
| 67 return true; |
| 26 } | 68 } |
| 27 | 69 |
| 28 void WebrtcVideoStream::Pause(bool pause) { | 70 void WebrtcVideoStream::Pause(bool pause) { |
| 29 NOTIMPLEMENTED(); | 71 if (capturer_adapter_) |
| 72 capturer_adapter_->Pause(pause); |
| 30 } | 73 } |
| 31 | 74 |
| 32 void WebrtcVideoStream::OnInputEventReceived(int64_t event_timestamp) { | 75 void WebrtcVideoStream::OnInputEventReceived(int64_t event_timestamp) { |
| 33 NOTIMPLEMENTED(); | 76 NOTIMPLEMENTED(); |
| 34 } | 77 } |
| 35 | 78 |
| 36 void WebrtcVideoStream::SetLosslessEncode(bool want_lossless) { | 79 void WebrtcVideoStream::SetLosslessEncode(bool want_lossless) { |
| 37 NOTIMPLEMENTED(); | 80 NOTIMPLEMENTED(); |
| 38 } | 81 } |
| 39 | 82 |
| 40 void WebrtcVideoStream::SetLosslessColor(bool want_lossless) { | 83 void WebrtcVideoStream::SetLosslessColor(bool want_lossless) { |
| 41 NOTIMPLEMENTED(); | 84 NOTIMPLEMENTED(); |
| 42 } | 85 } |
| 43 | 86 |
| 44 void WebrtcVideoStream::SetSizeCallback(const SizeCallback& size_callback) { | 87 void WebrtcVideoStream::SetSizeCallback(const SizeCallback& size_callback) { |
| 45 NOTIMPLEMENTED(); | 88 if (capturer_adapter_) |
| 89 capturer_adapter_->SetSizeCallback(size_callback); |
| 46 } | 90 } |
| 47 | 91 |
| 48 } // namespace protocol | 92 } // namespace protocol |
| 49 } // namespace remoting | 93 } // namespace remoting |
| OLD | NEW |