123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- // Copyright 2021 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef REMOTING_PROTOCOL_WEBRTC_FRAME_SCHEDULER_CONSTANT_RATE_H_
- #define REMOTING_PROTOCOL_WEBRTC_FRAME_SCHEDULER_CONSTANT_RATE_H_
- #include "remoting/protocol/webrtc_frame_scheduler.h"
- #include "base/sequence_checker.h"
- #include "base/thread_annotations.h"
- #include "base/timer/timer.h"
- namespace remoting {
- namespace protocol {
- // WebrtcFrameSchedulerConstantRate is an implementation of WebrtcFrameScheduler
- // that captures frames at a fixed rate. It uses the maximum frame rate provided
- // by SetMaxFramerateFps().
- class WebrtcFrameSchedulerConstantRate : public WebrtcFrameScheduler {
- public:
- WebrtcFrameSchedulerConstantRate();
- WebrtcFrameSchedulerConstantRate(const WebrtcFrameSchedulerConstantRate&) =
- delete;
- WebrtcFrameSchedulerConstantRate& operator=(
- const WebrtcFrameSchedulerConstantRate&) = delete;
- ~WebrtcFrameSchedulerConstantRate() override;
- // VideoChannelStateObserver implementation.
- void OnKeyFrameRequested() override;
- void OnTargetBitrateChanged(int bitrate_kbps) override;
- void OnFrameEncoded(
- WebrtcVideoEncoder::EncodeResult encode_result,
- const WebrtcVideoEncoder::EncodedFrame* encoded_frame) override;
- void OnEncodedFrameSent(
- webrtc::EncodedImageCallback::Result result,
- const WebrtcVideoEncoder::EncodedFrame& frame) override;
- // WebrtcFrameScheduler implementation.
- 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;
- private:
- void ScheduleNextFrame();
- void CaptureNextFrame();
- base::RepeatingClosure capture_callback_
- GUARDED_BY_CONTEXT(sequence_checker_);
- bool paused_ GUARDED_BY_CONTEXT(sequence_checker_) = false;
- base::OneShotTimer capture_timer_ GUARDED_BY_CONTEXT(sequence_checker_);
- base::TimeTicks last_capture_started_time_
- GUARDED_BY_CONTEXT(sequence_checker_);
- // Set to true when a frame is being captured. Used to avoid scheduling more
- // than one capture in parallel.
- bool frame_pending_ GUARDED_BY_CONTEXT(sequence_checker_) = false;
- // Framerate for scheduling frames. Initially 0 to prevent scheduling before
- // the output sink has been added.
- int max_framerate_fps_ GUARDED_BY_CONTEXT(sequence_checker_) = 0;
- SEQUENCE_CHECKER(sequence_checker_);
- };
- } // namespace protocol
- } // namespace remoting
- #endif // REMOTING_PROTOCOL_WEBRTC_FRAME_SCHEDULER_CONSTANT_RATE_H_
|