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

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

Issue 2405333002: Add remoting::protocol::NetworkStateObserver interface. (Closed)
Patch Set: address feedback Created 4 years, 2 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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_FRAME_SCHEDULER_SIMPLE_H_ 5 #ifndef REMOTING_PROTOCOL_WEBRTC_FRAME_SCHEDULER_SIMPLE_H_
6 #define REMOTING_PROTOCOL_WEBRTC_FRAME_SCHEDULER_SIMPLE_H_ 6 #define REMOTING_PROTOCOL_WEBRTC_FRAME_SCHEDULER_SIMPLE_H_
7 7
8 #include "remoting/protocol/webrtc_frame_scheduler.h" 8 #include "remoting/protocol/webrtc_frame_scheduler.h"
9 9
10 #include "base/threading/thread_checker.h"
10 #include "base/timer/timer.h" 11 #include "base/timer/timer.h"
11 #include "remoting/base/leaky_bucket.h" 12 #include "remoting/base/leaky_bucket.h"
12 #include "remoting/base/running_samples.h" 13 #include "remoting/base/running_samples.h"
14 #include "remoting/protocol/video_channel_state_observer.h"
13 15
14 namespace remoting { 16 namespace remoting {
15 namespace protocol { 17 namespace protocol {
16 18
17 // WebrtcFrameSchedulerSimple is a simple implementation of 19 // WebrtcFrameSchedulerSimple is a simple implementation of
18 // WebrtcFrameScheduler that always keeps only one frame in the pipeline. 20 // WebrtcFrameScheduler that always keeps only one frame in the pipeline.
19 // It schedules each frame after the previous one is expected to finish sending. 21 // It schedules each frame after the previous one is expected to finish sending.
20 class WebrtcFrameSchedulerSimple : public WebrtcFrameScheduler { 22 class WebrtcFrameSchedulerSimple : public VideoChannelStateObserver,
23 public WebrtcFrameScheduler {
21 public: 24 public:
22 WebrtcFrameSchedulerSimple(); 25 WebrtcFrameSchedulerSimple();
23 ~WebrtcFrameSchedulerSimple() override; 26 ~WebrtcFrameSchedulerSimple() override;
24 27
28 // VideoChannelStateObserver implementation.
29 void OnKeyFrameRequested() override;
30 void OnChannelParameters(int packet_loss, base::TimeDelta rtt) override;
31 void OnTargetBitrateChanged(int bitrate_kbps) override;
32
25 // WebrtcFrameScheduler implementation. 33 // WebrtcFrameScheduler implementation.
26 void Start(const base::Closure& capture_callback) override; 34 void Start(WebrtcDummyVideoEncoderFactory* video_encoder_factory,
35 const base::Closure& capture_callback) override;
27 void Pause(bool pause) override; 36 void Pause(bool pause) override;
28 void SetKeyFrameRequest() override;
29 void SetTargetBitrate(int bitrate_kbps) override;
30 bool GetEncoderFrameParams( 37 bool GetEncoderFrameParams(
31 const webrtc::DesktopFrame& frame, 38 const webrtc::DesktopFrame& frame,
32 WebrtcVideoEncoder::FrameParams* params_out) override; 39 WebrtcVideoEncoder::FrameParams* params_out) override;
33 void OnFrameEncoded( 40 void OnFrameEncoded(
34 const WebrtcVideoEncoder::EncodedFrame& encoded_frame, 41 const WebrtcVideoEncoder::EncodedFrame& encoded_frame,
35 const webrtc::EncodedImageCallback::Result& send_result) override; 42 const webrtc::EncodedImageCallback::Result& send_result) override;
36 43
37 private: 44 private:
38 void ScheduleNextFrame(base::TimeTicks now); 45 void ScheduleNextFrame(base::TimeTicks now);
39 void CaptureNextFrame(); 46 void CaptureNextFrame();
40 47
41 base::Closure capture_callback_; 48 base::Closure capture_callback_;
42 bool paused_ = false; 49 bool paused_ = false;
43 bool key_frame_request_ = false; 50 bool key_frame_request_ = false;
44 51
45 base::TimeTicks last_capture_started_time_; 52 base::TimeTicks last_capture_started_time_;
46 53
47 LeakyBucket pacing_bucket_; 54 LeakyBucket pacing_bucket_;
48 55
49 // Set to true when encoding unchanged frames for top-off. 56 // Set to true when encoding unchanged frames for top-off.
50 bool top_off_is_active_ = false; 57 bool top_off_is_active_ = false;
51 58
52 // Accumulator for capture and encoder delay history. 59 // Accumulator for capture and encoder delay history.
53 RunningSamples frame_processing_delay_us_; 60 RunningSamples frame_processing_delay_us_;
54 61
55 // Accumulator for updated region area in the previously encoded frames. 62 // Accumulator for updated region area in the previously encoded frames.
56 RunningSamples updated_region_area_; 63 RunningSamples updated_region_area_;
57 64
58 base::OneShotTimer capture_timer_; 65 base::OneShotTimer capture_timer_;
66
67 base::ThreadChecker thread_checker_;
68 base::WeakPtrFactory<WebrtcFrameSchedulerSimple> weak_factory_;
59 }; 69 };
60 70
61 } // namespace protocol 71 } // namespace protocol
62 } // namespace remoting 72 } // namespace remoting
63 73
64 #endif // REMOTING_PROTOCOL_WEBRTC_FRAME_SCHEDULER_SIMPLE_H_ 74 #endif // REMOTING_PROTOCOL_WEBRTC_FRAME_SCHEDULER_SIMPLE_H_
OLDNEW
« no previous file with comments | « remoting/protocol/webrtc_frame_scheduler.h ('k') | remoting/protocol/webrtc_frame_scheduler_simple.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698