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

Unified Diff: remoting/protocol/webrtc_frame_scheduler_simple.cc

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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/protocol/webrtc_frame_scheduler_simple.h ('k') | remoting/protocol/webrtc_video_stream.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/protocol/webrtc_frame_scheduler_simple.cc
diff --git a/remoting/protocol/webrtc_frame_scheduler_simple.cc b/remoting/protocol/webrtc_frame_scheduler_simple.cc
index 31494ae07840837f3c3d9399bdfdeb4694442a50..336276d6609e20169c69af3b4aa86f95ad614a83 100644
--- a/remoting/protocol/webrtc_frame_scheduler_simple.cc
+++ b/remoting/protocol/webrtc_frame_scheduler_simple.cc
@@ -6,6 +6,7 @@
#include <algorithm>
+#include "remoting/protocol/webrtc_dummy_video_encoder.h"
#include "third_party/webrtc/modules/desktop_capture/desktop_frame.h"
namespace remoting {
@@ -56,15 +57,41 @@ int64_t GetRegionArea(const webrtc::DesktopRegion& region) {
WebrtcFrameSchedulerSimple::WebrtcFrameSchedulerSimple()
: pacing_bucket_(LeakyBucket::kUnlimitedDepth, 0),
frame_processing_delay_us_(kStatsWindow),
- updated_region_area_(kStatsWindow) {}
+ updated_region_area_(kStatsWindow),
+ weak_factory_(this) {}
WebrtcFrameSchedulerSimple::~WebrtcFrameSchedulerSimple() {}
-void WebrtcFrameSchedulerSimple::Start(const base::Closure& capture_callback) {
+void WebrtcFrameSchedulerSimple::OnKeyFrameRequested() {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ key_frame_request_ = true;
+ if (!capture_timer_.IsRunning())
+ ScheduleNextFrame(base::TimeTicks::Now());
+}
+
+void WebrtcFrameSchedulerSimple::OnChannelParameters(int packet_loss,
+ base::TimeDelta rtt) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+}
+
+void WebrtcFrameSchedulerSimple::OnTargetBitrateChanged(int bitrate_kbps) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ base::TimeTicks now = base::TimeTicks::Now();
+ pacing_bucket_.UpdateRate(bitrate_kbps * 1000 / 8, now);
+ ScheduleNextFrame(now);
+}
+
+void WebrtcFrameSchedulerSimple::Start(
+ WebrtcDummyVideoEncoderFactory* video_encoder_factory,
+ const base::Closure& capture_callback) {
+ DCHECK(thread_checker_.CalledOnValidThread());
capture_callback_ = capture_callback;
- ScheduleNextFrame(base::TimeTicks::Now());
+ video_encoder_factory->SetVideoChannelStateObserver(
+ weak_factory_.GetWeakPtr());
}
void WebrtcFrameSchedulerSimple::Pause(bool pause) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+
paused_ = pause;
if (paused_) {
capture_timer_.Stop();
@@ -73,19 +100,11 @@ void WebrtcFrameSchedulerSimple::Pause(bool pause) {
}
}
-void WebrtcFrameSchedulerSimple::SetKeyFrameRequest() {
- key_frame_request_ = true;
-}
-
-void WebrtcFrameSchedulerSimple::SetTargetBitrate(int bitrate_kbps) {
- base::TimeTicks now = base::TimeTicks::Now();
- pacing_bucket_.UpdateRate(bitrate_kbps * 1000 / 8, now);
- ScheduleNextFrame(now);
-}
-
bool WebrtcFrameSchedulerSimple::GetEncoderFrameParams(
const webrtc::DesktopFrame& frame,
WebrtcVideoEncoder::FrameParams* params_out) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+
base::TimeTicks now = base::TimeTicks::Now();
if (frame.updated_region().is_empty() && !top_off_is_active_ &&
@@ -137,6 +156,8 @@ bool WebrtcFrameSchedulerSimple::GetEncoderFrameParams(
void WebrtcFrameSchedulerSimple::OnFrameEncoded(
const WebrtcVideoEncoder::EncodedFrame& encoded_frame,
const webrtc::EncodedImageCallback::Result& send_result) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+
base::TimeTicks now = base::TimeTicks::Now();
pacing_bucket_.RefillOrSpill(encoded_frame.data.size(), now);
@@ -154,6 +175,8 @@ void WebrtcFrameSchedulerSimple::OnFrameEncoded(
}
void WebrtcFrameSchedulerSimple::ScheduleNextFrame(base::TimeTicks now) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+
// Don't capture frames when paused or target bitrate is 0 or there is
// no capture callback set.
if (paused_ || pacing_bucket_.rate() == 0 || capture_callback_.is_null())
@@ -181,6 +204,8 @@ void WebrtcFrameSchedulerSimple::ScheduleNextFrame(base::TimeTicks now) {
}
void WebrtcFrameSchedulerSimple::CaptureNextFrame() {
+ DCHECK(thread_checker_.CalledOnValidThread());
+
last_capture_started_time_ = base::TimeTicks::Now();
capture_callback_.Run();
}
« no previous file with comments | « remoting/protocol/webrtc_frame_scheduler_simple.h ('k') | remoting/protocol/webrtc_video_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698