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

Side by Side Diff: remoting/host/video_scheduler.h

Issue 292373002: More reliable keep-alive video packets. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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
« no previous file with comments | « no previous file | remoting/host/video_scheduler.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_VIDEO_SCHEDULER_H_ 5 #ifndef REMOTING_HOST_VIDEO_SCHEDULER_H_
6 #define REMOTING_HOST_VIDEO_SCHEDULER_H_ 6 #define REMOTING_HOST_VIDEO_SCHEDULER_H_
7 7
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 // Called when a frame capture has been encoded & sent to the client. 133 // Called when a frame capture has been encoded & sent to the client.
134 void FrameCaptureCompleted(); 134 void FrameCaptureCompleted();
135 135
136 // Network thread ----------------------------------------------------------- 136 // Network thread -----------------------------------------------------------
137 137
138 // Send |packet| to the client, unless we are in the process of stopping. 138 // Send |packet| to the client, unless we are in the process of stopping.
139 void SendVideoPacket(scoped_ptr<VideoPacket> packet); 139 void SendVideoPacket(scoped_ptr<VideoPacket> packet);
140 140
141 // Callback passed to |video_stub_| for the last packet in each frame, to 141 // Callback passed to |video_stub_| for the last packet in each frame, to
142 // rate-limit frame captures to network throughput. 142 // rate-limit frame captures to network throughput.
143 void VideoFrameSentCallback(); 143 void OnVideoPacketSent();
144
145 // Called by |keep_alive_timer_|.
146 void SendKeepAlivePacket();
147
148 // Callback for |video_stub_| called after a keep-alive packet is sent.
149 void OnKeepAlivePacketSent();
144 150
145 // Send updated cursor shape to client. 151 // Send updated cursor shape to client.
146 void SendCursorShape(scoped_ptr<protocol::CursorShapeInfo> cursor_shape); 152 void SendCursorShape(scoped_ptr<protocol::CursorShapeInfo> cursor_shape);
147 153
148 // Encoder thread ----------------------------------------------------------- 154 // Encoder thread -----------------------------------------------------------
149 155
150 // Encode a frame, passing generated VideoPackets to SendVideoPacket(). 156 // Encode a frame, passing generated VideoPackets to SendVideoPacket().
151 void EncodeFrame(scoped_ptr<webrtc::DesktopFrame> frame, 157 void EncodeFrame(scoped_ptr<webrtc::DesktopFrame> frame,
152 int64 sequence_number); 158 int64 sequence_number);
153 159
(...skipping 12 matching lines...) Expand all
166 scoped_ptr<VideoEncoder> encoder_; 172 scoped_ptr<VideoEncoder> encoder_;
167 173
168 // Interfaces through which video frames and cursor shapes are passed to the 174 // Interfaces through which video frames and cursor shapes are passed to the
169 // client. These members are always accessed on the network thread. 175 // client. These members are always accessed on the network thread.
170 protocol::CursorShapeStub* cursor_stub_; 176 protocol::CursorShapeStub* cursor_stub_;
171 protocol::VideoStub* video_stub_; 177 protocol::VideoStub* video_stub_;
172 178
173 // Timer used to schedule CaptureNextFrame(). 179 // Timer used to schedule CaptureNextFrame().
174 scoped_ptr<base::OneShotTimer<VideoScheduler> > capture_timer_; 180 scoped_ptr<base::OneShotTimer<VideoScheduler> > capture_timer_;
175 181
182 // Timer used to ensure that we send empty keep-alive frames to the client
183 // even when the video stream is paused or encoder is busy.
184 scoped_ptr<base::DelayTimer<VideoScheduler> > keep_alive_timer_;
185
176 // The number of frames being processed, i.e. frames that we are currently 186 // The number of frames being processed, i.e. frames that we are currently
177 // capturing, encoding or sending. The value is capped at 2 to minimize 187 // capturing, encoding or sending. The value is capped at 2 to minimize
178 // latency. 188 // latency.
179 int pending_frames_; 189 int pending_frames_;
180 190
181 // Set when the capturer is capturing a frame. 191 // Set when the capturer is capturing a frame.
182 bool capture_pending_; 192 bool capture_pending_;
183 193
184 // True if the previous scheduled capture was skipped. 194 // True if the previous scheduled capture was skipped.
185 bool did_skip_frame_; 195 bool did_skip_frame_;
186 196
187 // True if capture of video frames is paused. 197 // True if capture of video frames is paused.
188 bool is_paused_; 198 bool is_paused_;
189 199
190 // This is a number updated by client to trace performance. 200 // This is a number updated by client to trace performance.
191 int64 sequence_number_; 201 int64 sequence_number_;
192 202
193 // An object to schedule capturing. 203 // An object to schedule capturing.
194 CaptureScheduler scheduler_; 204 CaptureScheduler scheduler_;
195 205
196 DISALLOW_COPY_AND_ASSIGN(VideoScheduler); 206 DISALLOW_COPY_AND_ASSIGN(VideoScheduler);
197 }; 207 };
198 208
199 } // namespace remoting 209 } // namespace remoting
200 210
201 #endif // REMOTING_HOST_VIDEO_SCHEDULER_H_ 211 #endif // REMOTING_HOST_VIDEO_SCHEDULER_H_
OLDNEW
« no previous file with comments | « no previous file | remoting/host/video_scheduler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698