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

Side by Side Diff: remoting/protocol/webrtc_video_capturer_adapter.h

Issue 1571543002: Implement missing features in WebrtcVideoStream. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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
OLDNEW
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 #ifndef REMOTING_PROTOCOL_WEBRTC_VIDEO_CAPTURER_ADAPTER_H_ 5 #ifndef REMOTING_PROTOCOL_WEBRTC_VIDEO_CAPTURER_ADAPTER_H_
6 #define REMOTING_PROTOCOL_WEBRTC_VIDEO_CAPTURER_ADAPTER_H_ 6 #define REMOTING_PROTOCOL_WEBRTC_VIDEO_CAPTURER_ADAPTER_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <stdint.h> 9 #include <stdint.h>
10 10
11 #include <vector> 11 #include <vector>
12 12
13 #include "base/macros.h" 13 #include "base/macros.h"
14 #include "base/memory/scoped_ptr.h" 14 #include "base/memory/scoped_ptr.h"
15 #include "base/memory/weak_ptr.h"
15 #include "base/threading/thread_checker.h" 16 #include "base/threading/thread_checker.h"
16 #include "base/timer/timer.h" 17 #include "base/timer/timer.h"
17 #include "third_party/libjingle/source/talk/media/base/videocapturer.h" 18 #include "third_party/libjingle/source/talk/media/base/videocapturer.h"
18 #include "third_party/webrtc/modules/desktop_capture/desktop_capturer.h" 19 #include "third_party/webrtc/modules/desktop_capture/desktop_capturer.h"
19 20
20 namespace base { 21 namespace base {
21 class SingleThreadTaskRunner; 22 class SingleThreadTaskRunner;
22 } // namespace base 23 } // namespace base
23 24
24 namespace cricket { 25 namespace cricket {
(...skipping 10 matching lines...) Expand all
35 // This class controls the capture of video frames from the desktop and is used 36 // This class controls the capture of video frames from the desktop and is used
36 // to construct a VideoSource as part of the webrtc PeerConnection API. 37 // to construct a VideoSource as part of the webrtc PeerConnection API.
37 // WebrtcVideoCapturerAdapter acts as an adapter between webrtc::DesktopCapturer 38 // WebrtcVideoCapturerAdapter acts as an adapter between webrtc::DesktopCapturer
38 // and the cricket::VideoCapturer interface, which it implements. It is used 39 // and the cricket::VideoCapturer interface, which it implements. It is used
39 // to construct a cricket::VideoSource for a PeerConnection, to capture frames 40 // to construct a cricket::VideoSource for a PeerConnection, to capture frames
40 // of the desktop. As indicated in the base implementation, Start() and Stop() 41 // of the desktop. As indicated in the base implementation, Start() and Stop()
41 // should be called on the same thread. 42 // should be called on the same thread.
42 class WebrtcVideoCapturerAdapter : public cricket::VideoCapturer, 43 class WebrtcVideoCapturerAdapter : public cricket::VideoCapturer,
43 public webrtc::DesktopCapturer::Callback { 44 public webrtc::DesktopCapturer::Callback {
44 public: 45 public:
46 typedef base::Callback<void(const webrtc::DesktopSize& size)> SizeCallback;
47
45 explicit WebrtcVideoCapturerAdapter( 48 explicit WebrtcVideoCapturerAdapter(
46 scoped_ptr<webrtc::DesktopCapturer> capturer); 49 scoped_ptr<webrtc::DesktopCapturer> capturer);
47 ~WebrtcVideoCapturerAdapter() override; 50 ~WebrtcVideoCapturerAdapter() override;
48 51
52 void SetSizeCallback(const SizeCallback& size_callback);
53 base::WeakPtr<WebrtcVideoCapturerAdapter> GetWeakPtr();
54
49 // cricket::VideoCapturer implementation. 55 // cricket::VideoCapturer implementation.
50 bool GetBestCaptureFormat(const cricket::VideoFormat& desired, 56 bool GetBestCaptureFormat(const cricket::VideoFormat& desired,
51 cricket::VideoFormat* best_format) override; 57 cricket::VideoFormat* best_format) override;
52 cricket::CaptureState Start( 58 cricket::CaptureState Start(
53 const cricket::VideoFormat& capture_format) override; 59 const cricket::VideoFormat& capture_format) override;
54 bool Pause(bool pause) override; 60 bool Pause(bool pause) override;
55 void Stop() override; 61 void Stop() override;
56 bool IsRunning() override; 62 bool IsRunning() override;
57 bool IsScreencast() const override; 63 bool IsScreencast() const override;
58 bool GetPreferredFourccs(std::vector<uint32_t>* fourccs) override; 64 bool GetPreferredFourccs(std::vector<uint32_t>* fourccs) override;
59 65
60 private: 66 private:
61 // webrtc::DesktopCapturer::Callback implementation. 67 // webrtc::DesktopCapturer::Callback implementation.
62 webrtc::SharedMemory* CreateSharedMemory(size_t size) override; 68 webrtc::SharedMemory* CreateSharedMemory(size_t size) override;
63 void OnCaptureCompleted(webrtc::DesktopFrame* frame) override; 69 void OnCaptureCompleted(webrtc::DesktopFrame* frame) override;
64 70
65 // Kicks off the next frame capture using |desktop_capturer_|. The captured 71 // Kicks off the next frame capture using |desktop_capturer_|. The captured
66 // frame will be passed to OnCaptureCompleted(). 72 // frame will be passed to OnCaptureCompleted().
67 void CaptureNextFrame(); 73 void CaptureNextFrame();
68 74
69 base::ThreadChecker thread_checker_; 75 base::ThreadChecker thread_checker_;
70 76
71 scoped_ptr<webrtc::DesktopCapturer> desktop_capturer_; 77 scoped_ptr<webrtc::DesktopCapturer> desktop_capturer_;
72 78
79 SizeCallback size_callback_;
80
73 // Timer to call CaptureNextFrame(). 81 // Timer to call CaptureNextFrame().
74 scoped_ptr<base::RepeatingTimer> capture_timer_; 82 scoped_ptr<base::RepeatingTimer> capture_timer_;
75 83
76 // Video frame is kept between captures to avoid YUV conversion for static 84 // Video frame is kept between captures to avoid YUV conversion for static
77 // parts of the screen. 85 // parts of the screen.
78 scoped_ptr<cricket::VideoFrame> yuv_frame_; 86 scoped_ptr<cricket::VideoFrame> yuv_frame_;
79 87
80 bool capture_pending_ = false; 88 bool capture_pending_ = false;
81 89
90 base::WeakPtrFactory<WebrtcVideoCapturerAdapter> weak_factory_;
91
82 DISALLOW_COPY_AND_ASSIGN(WebrtcVideoCapturerAdapter); 92 DISALLOW_COPY_AND_ASSIGN(WebrtcVideoCapturerAdapter);
83 }; 93 };
84 94
85 } // namespace protocol 95 } // namespace protocol
86 } // namespace remoting 96 } // namespace remoting
87 97
88 #endif // REMOTING_PROTOCOL_WEBRTC_VIDEO_CAPTURER_ADAPTER_H_ 98 #endif // REMOTING_PROTOCOL_WEBRTC_VIDEO_CAPTURER_ADAPTER_H_
89 99
OLDNEW
« no previous file with comments | « remoting/protocol/webrtc_connection_to_client.cc ('k') | remoting/protocol/webrtc_video_capturer_adapter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698