[go: nahoru, domu]

blob: 9af2442d47e6ce072f21a1ae6d96a57f25a243d4 [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef REMOTING_PROTOCOL_NO_OP_WEBRTC_FRAME_SCHEDULER_H_
#define REMOTING_PROTOCOL_NO_OP_WEBRTC_FRAME_SCHEDULER_H_
#include "remoting/protocol/webrtc_frame_scheduler.h"
#include "base/functional/callback.h"
#include "base/sequence_checker.h"
#include "remoting/protocol/desktop_capturer.h"
namespace remoting::protocol {
// This no-op scheduler is used in place of constant frame rate scheduler
// when we have a capturer that supports sending us events whenever a frame is
// captured.
class NoOpWebrtcFrameScheduler : public WebrtcFrameScheduler {
public:
explicit NoOpWebrtcFrameScheduler(DesktopCapturer* capturer);
~NoOpWebrtcFrameScheduler() override;
// WebrtcFrameScheduler Interface.
void Start(const base::RepeatingClosure& capture_callback) override;
void Pause(bool pause) override;
void OnFrameCaptured(const webrtc::DesktopFrame* frame) override;
void SetMaxFramerateFps(int max_framerate_fps) override;
void BoostCaptureRate(base::TimeDelta capture_interval,
base::TimeDelta duration) override;
private:
base::raw_ptr<DesktopCapturer> capturer_
GUARDED_BY_CONTEXT(sequence_checker_);
uint32_t last_frame_rate_ GUARDED_BY_CONTEXT(sequence_checker_) = 60;
SEQUENCE_CHECKER(sequence_checker_);
};
} // namespace remoting::protocol
#endif // REMOTING_PROTOCOL_NO_OP_WEBRTC_FRAME_SCHEDULER_H_