// 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_BASE_WIN_DCOMP_TEXTURE_WRAPPER_H_
#define MEDIA_BASE_WIN_DCOMP_TEXTURE_WRAPPER_H_

#include "base/callback.h"
#include "base/unguessable_token.h"

namespace gfx {
class Rect;
class Size;
}  // namespace gfx

namespace media {

class VideoFrame;

// DCOMPTextureWrapper encapsulates a DCOMPTexture's initialization and other
// operations related to composition output path.
class DCOMPTextureWrapper {
 public:
  virtual ~DCOMPTextureWrapper() = default;

  // Initializes the DCOMPTexture and returns success/failure.
  using OutputRectChangeCB = base::RepeatingCallback<void(gfx::Rect)>;
  virtual bool Initialize(const gfx::Size& output_size,
                          OutputRectChangeCB output_rect_change_cb) = 0;

  // Called whenever the video's output size changes.
  virtual void UpdateTextureSize(const gfx::Size& output_size) = 0;

  // Sets the DirectComposition surface identified by `token`.
  using SetDCOMPSurfaceHandleCB = base::OnceCallback<void(bool)>;
  virtual void SetDCOMPSurfaceHandle(
      const base::UnguessableToken& token,
      SetDCOMPSurfaceHandleCB set_dcomp_surface_handle_cb) = 0;

  // Creates VideoFrame which will be returned in `create_video_frame_cb`.
  using CreateVideoFrameCB =
      base::OnceCallback<void(scoped_refptr<VideoFrame>)>;
  virtual void CreateVideoFrame(const gfx::Size& natural_size,
                                CreateVideoFrameCB create_video_frame_cb) = 0;
};

}  // namespace media

#endif  // MEDIA_BASE_WIN_DCOMP_TEXTURE_WRAPPER_H_
