#ifndef CONTENT_BROWSER_DEVTOOLS_DEVTOOLS_VIDEO_CONSUMER_H_
#define CONTENT_BROWSER_DEVTOOLS_DEVTOOLS_VIDEO_CONSUMER_H_
#include <memory>
#include "base/time/time.h"
#include "components/viz/host/client_frame_sink_video_capturer.h"
#include "content/common/content_export.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "ui/gfx/geometry/size.h"
class SkBitmap;
namespace content {
class CONTENT_EXPORT DevToolsVideoConsumer
: public viz::mojom::FrameSinkVideoConsumer {
public:
using OnFrameCapturedCallback =
base::RepeatingCallback<void(scoped_refptr<media::VideoFrame> frame)>;
explicit DevToolsVideoConsumer(OnFrameCapturedCallback callback);
DevToolsVideoConsumer(const DevToolsVideoConsumer&) = delete;
DevToolsVideoConsumer& operator=(const DevToolsVideoConsumer&) = delete;
~DevToolsVideoConsumer() override;
static SkBitmap GetSkBitmapFromFrame(scoped_refptr<media::VideoFrame> frame);
void StartCapture();
void StopCapture();
void SetFrameSinkId(const viz::FrameSinkId& frame_sink_id);
void SetMinCapturePeriod(base::TimeDelta min_capture_period);
void SetMinAndMaxFrameSize(gfx::Size min_frame_size,
gfx::Size max_frame_size);
void SetFormat(media::VideoPixelFormat format);
private:
friend class DevToolsVideoConsumerTest;
void InnerStartCapture(
std::unique_ptr<viz::ClientFrameSinkVideoCapturer> capturer);
bool IsValidMinAndMaxFrameSize(gfx::Size min_frame_size,
gfx::Size max_frame_size);
void OnFrameCaptured(
::media::mojom::VideoBufferHandlePtr data,
::media::mojom::VideoFrameInfoPtr info,
const gfx::Rect& content_rect,
mojo::PendingRemote<viz::mojom::FrameSinkVideoConsumerFrameCallbacks>
callbacks) override;
void OnNewCaptureVersion(
const media::CaptureVersion& capture_version) override {}
void OnFrameWithEmptyRegionCapture() override {}
void OnStopped() override;
void OnLog(const std::string& ) override {}
static constexpr gfx::Size kDefaultMinFrameSize = gfx::Size(1, 1);
static constexpr gfx::Size kDefaultMaxFrameSize = gfx::Size(500, 500);
const OnFrameCapturedCallback callback_;
base::TimeDelta min_capture_period_;
gfx::Size min_frame_size_;
gfx::Size max_frame_size_;
viz::FrameSinkId frame_sink_id_;
media::VideoPixelFormat pixel_format_;
std::unique_ptr<viz::ClientFrameSinkVideoCapturer> capturer_;
};
}
#endif