OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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_HOST_SCREEN_RECORDER_H_ | 5 #ifndef REMOTING_HOST_SCREEN_RECORDER_H_ |
6 #define REMOTING_HOST_SCREEN_RECORDER_H_ | 6 #define REMOTING_HOST_SCREEN_RECORDER_H_ |
7 | 7 |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| 11 #include "base/callback.h" |
11 #include "base/memory/ref_counted.h" | 12 #include "base/memory/ref_counted.h" |
12 #include "base/memory/scoped_ptr.h" | 13 #include "base/memory/scoped_ptr.h" |
13 #include "base/message_loop.h" | 14 #include "base/message_loop.h" |
14 #include "base/time.h" | 15 #include "base/time.h" |
15 #include "base/timer.h" | 16 #include "base/timer.h" |
16 #include "remoting/base/encoder.h" | 17 #include "remoting/base/encoder.h" |
17 #include "remoting/host/capturer.h" | 18 #include "remoting/host/capturer.h" |
18 #include "remoting/proto/video.pb.h" | 19 #include "remoting/proto/video.pb.h" |
19 | 20 |
20 namespace remoting { | 21 namespace remoting { |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
78 Capturer* capturer, | 79 Capturer* capturer, |
79 Encoder* encoder); | 80 Encoder* encoder); |
80 | 81 |
81 virtual ~ScreenRecorder(); | 82 virtual ~ScreenRecorder(); |
82 | 83 |
83 // Start recording. | 84 // Start recording. |
84 void Start(); | 85 void Start(); |
85 | 86 |
86 // Stop the recording session. |done_task| is executed when recording is fully | 87 // Stop the recording session. |done_task| is executed when recording is fully |
87 // stopped. This object cannot be used again after |task| is executed. | 88 // stopped. This object cannot be used again after |task| is executed. |
88 void Stop(Task* done_task); | 89 void Stop(const base::Closure& done_task); |
89 | 90 |
90 // Set the maximum capture rate. This is denoted by number of updates | 91 // Set the maximum capture rate. This is denoted by number of updates |
91 // in one second. The actual system may run in a slower rate than the maximum | 92 // in one second. The actual system may run in a slower rate than the maximum |
92 // rate due to various factors, e.g. capture speed, encode speed and network | 93 // rate due to various factors, e.g. capture speed, encode speed and network |
93 // conditions. | 94 // conditions. |
94 // This method should be called before Start() is called. | 95 // This method should be called before Start() is called. |
95 void SetMaxRate(double rate); | 96 void SetMaxRate(double rate); |
96 | 97 |
97 // Add a connection to this recording session. | 98 // Add a connection to this recording session. |
98 void AddConnection(scoped_refptr<protocol::ConnectionToClient> connection); | 99 void AddConnection(scoped_refptr<protocol::ConnectionToClient> connection); |
99 | 100 |
100 // Remove a connection from receiving screen updates. | 101 // Remove a connection from receiving screen updates. |
101 void RemoveConnection(scoped_refptr<protocol::ConnectionToClient> connection); | 102 void RemoveConnection(scoped_refptr<protocol::ConnectionToClient> connection); |
102 | 103 |
103 // Remove all connections. | 104 // Remove all connections. |
104 void RemoveAllConnections(); | 105 void RemoveAllConnections(); |
105 | 106 |
106 // Update the sequence number for tracing performance. | 107 // Update the sequence number for tracing performance. |
107 void UpdateSequenceNumber(int64 sequence_number); | 108 void UpdateSequenceNumber(int64 sequence_number); |
108 | 109 |
109 private: | 110 private: |
110 // Getters for capturer and encoder. | 111 // Getters for capturer and encoder. |
111 Capturer* capturer(); | 112 Capturer* capturer(); |
112 Encoder* encoder(); | 113 Encoder* encoder(); |
113 | 114 |
114 // Capturer thread ---------------------------------------------------------- | 115 // Capturer thread ---------------------------------------------------------- |
115 | 116 |
116 void DoStart(); | 117 void DoStart(); |
117 void DoStop(Task* done_task); | |
118 | |
119 void DoSetMaxRate(double max_rate); | 118 void DoSetMaxRate(double max_rate); |
120 | 119 |
121 // Hepler method to schedule next capture using the current rate. | 120 // Hepler method to schedule next capture using the current rate. |
122 void StartCaptureTimer(); | 121 void StartCaptureTimer(); |
123 | 122 |
124 void DoCapture(); | 123 void DoCapture(); |
125 void CaptureDoneCallback(scoped_refptr<CaptureData> capture_data); | 124 void CaptureDoneCallback(scoped_refptr<CaptureData> capture_data); |
126 void DoFinishOneRecording(); | 125 void DoFinishOneRecording(); |
127 void DoInvalidateFullScreen(); | 126 void DoInvalidateFullScreen(); |
128 | 127 |
129 // Network thread ----------------------------------------------------------- | 128 // Network thread ----------------------------------------------------------- |
130 | 129 |
131 // DoSendVideoPacket takes ownership of the |packet| and is responsible | 130 // DoSendVideoPacket takes ownership of the |packet| and is responsible |
132 // for deleting it. | 131 // for deleting it. |
133 void DoSendVideoPacket(VideoPacket* packet); | 132 void DoSendVideoPacket(VideoPacket* packet); |
134 | 133 |
135 void DoSendInit(scoped_refptr<protocol::ConnectionToClient> connection, | 134 void DoSendInit(scoped_refptr<protocol::ConnectionToClient> connection, |
136 int width, int height); | 135 int width, int height); |
137 | 136 |
138 void DoAddConnection(scoped_refptr<protocol::ConnectionToClient> connection); | 137 void DoAddConnection(scoped_refptr<protocol::ConnectionToClient> connection); |
139 void DoRemoveClient(scoped_refptr<protocol::ConnectionToClient> connection); | 138 void DoRemoveClient(scoped_refptr<protocol::ConnectionToClient> connection); |
140 void DoRemoveAllClients(); | 139 void DoRemoveAllClients(); |
141 | 140 |
142 // Signal network thread to cease activities. | 141 // Signal network thread to cease activities. |
143 void DoStopOnNetworkThread(Task* done_task); | 142 void DoStopOnNetworkThread(const base::Closure& done_task); |
144 | 143 |
145 // Callback for the last packet in one update. Deletes |packet| and | 144 // Callback for the last packet in one update. Deletes |packet| and |
146 // schedules next screen capture. | 145 // schedules next screen capture. |
147 void FrameSentCallback(VideoPacket* packet); | 146 void FrameSentCallback(VideoPacket* packet); |
148 | 147 |
149 // Encoder thread ----------------------------------------------------------- | 148 // Encoder thread ----------------------------------------------------------- |
150 | 149 |
151 void DoEncode(scoped_refptr<CaptureData> capture_data); | 150 void DoEncode(scoped_refptr<CaptureData> capture_data); |
152 | 151 |
153 // Perform stop operations on encode thread. | 152 // Perform stop operations on encode thread. |
154 void DoStopOnEncodeThread(Task* done_task); | 153 void DoStopOnEncodeThread(const base::Closure& done_task); |
155 | 154 |
156 // EncodedDataAvailableCallback takes ownership of |packet|. | 155 // EncodedDataAvailableCallback takes ownership of |packet|. |
157 void EncodedDataAvailableCallback(VideoPacket* packet); | 156 void EncodedDataAvailableCallback(VideoPacket* packet); |
158 void SendVideoPacket(VideoPacket* packet); | 157 void SendVideoPacket(VideoPacket* packet); |
159 | 158 |
160 // Message loops used by this class. | 159 // Message loops used by this class. |
161 MessageLoop* capture_loop_; | 160 MessageLoop* capture_loop_; |
162 MessageLoop* encode_loop_; | 161 MessageLoop* encode_loop_; |
163 MessageLoop* network_loop_; | 162 MessageLoop* network_loop_; |
164 | 163 |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
206 | 205 |
207 // This is a number updated by client to trace performance. | 206 // This is a number updated by client to trace performance. |
208 int64 sequence_number_; | 207 int64 sequence_number_; |
209 | 208 |
210 DISALLOW_COPY_AND_ASSIGN(ScreenRecorder); | 209 DISALLOW_COPY_AND_ASSIGN(ScreenRecorder); |
211 }; | 210 }; |
212 | 211 |
213 } // namespace remoting | 212 } // namespace remoting |
214 | 213 |
215 #endif // REMOTING_HOST_SCREEN_RECORDER_H_ | 214 #endif // REMOTING_HOST_SCREEN_RECORDER_H_ |
OLD | NEW |