// 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 MEDIA_GPU_V4L2_V4L2_FRAMERATE_CONTROL_H_
#define MEDIA_GPU_V4L2_V4L2_FRAMERATE_CONTROL_H_

#include "base/memory/scoped_refptr.h"
#include "base/memory/weak_ptr.h"
#include "base/sequenced_task_runner.h"
#include "base/time/time.h"
#include "media/base/moving_average.h"
#include "media/base/video_frame.h"
#include "media/gpu/v4l2/v4l2_device.h"

namespace media {

// Some hardware decoder implementations (Qualcomm) need to know the framerate
// of the content being decoded.  On these platforms the hardware uses the
// framerate to allocate resources correctly.  The number of simultaneous
// contexts supported is dependent on hardware usage, i.e. only 1 4KP60 decode
// may be supported but if the framerate is reduce to 30 fps, 2 4KP30 clips
// can be decoded simultaneously.
class V4L2FrameRateControl {
 public:
  V4L2FrameRateControl(scoped_refptr<V4L2Device> device,
                       scoped_refptr<base::SequencedTaskRunner> task_runner);
  ~V4L2FrameRateControl();

  // Trampoline method for VideoFrame destructor callbacks to be directed
  // to this class' task runner.
  static void RecordFrameDurationThunk(
      base::WeakPtr<V4L2FrameRateControl> weak_this,
      scoped_refptr<base::SequencedTaskRunner> task_runner);

  // Called from the VideoFrame destructor.  Stores the duration between
  // subsequent video frames into the moving average.
  void RecordFrameDuration();

  // Register this class as a VideoFrame destructor observer.
  void AttachToVideoFrame(scoped_refptr<VideoFrame>& video_frame);

 private:
  void UpdateFrameRate();

  scoped_refptr<V4L2Device> device_;
  const bool framerate_control_present_;
  int64_t current_frame_duration_avg_ms_;
  base::TimeTicks last_frame_display_time_;
  MovingAverage frame_duration_moving_average_;

  const scoped_refptr<base::SequencedTaskRunner> task_runner_;
  base::WeakPtrFactory<V4L2FrameRateControl> weak_this_factory_;

  SEQUENCE_CHECKER(sequence_checker_);
};

}  // namespace media

#endif  // MEDIA_GPU_V4L2_V4L2_FRAMERATE_CONTROL_H_
