// Copyright 2018 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_DECODE_SURFACE_HANDLER_H_
#define MEDIA_GPU_DECODE_SURFACE_HANDLER_H_

#include "base/memory/scoped_refptr.h"
#include "ui/gfx/geometry/rect.h"

namespace media {

class VideoColorSpace;

// Interface representing {V4L2,Vaapi}DecodeSurface operations, i.e. a client
// gets a T to work with by calling CreateSurface() and returns it when finished
// by calling SurfaceReady(). Class T has to be ref-counted. No assumptions are
// made about threading.
template <class T>
class DecodeSurfaceHandler {
 public:
  DecodeSurfaceHandler() = default;

  DecodeSurfaceHandler(const DecodeSurfaceHandler&) = delete;
  DecodeSurfaceHandler& operator=(const DecodeSurfaceHandler&) = delete;

  virtual ~DecodeSurfaceHandler() = default;

  // Returns a T for decoding into, if available, or nullptr.
  virtual scoped_refptr<T> CreateSurface() = 0;

  // Called by the client to indicate that |dec_surface| is ready to be
  // outputted. This can actually be called before decode is finished in
  // hardware; this method must guarantee that |dec_surface|s are processed in
  // the same order as SurfaceReady() is called. (On Intel, this order doesn't
  // need to be explicitly maintained since the driver will enforce it, together
  // with any necessary dependencies).
  virtual void SurfaceReady(scoped_refptr<T> dec_surface,
                            int32_t bitstream_id,
                            const gfx::Rect& visible_rect,
                            const VideoColorSpace& color_space) = 0;
};

}  // namespace media

#endif  // MEDIA_GPU_DECODE_SURFACE_HANDLER_H_
