#ifndef MEDIA_VIDEO_RENDERABLE_GPU_MEMORY_BUFFER_VIDEO_FRAME_POOL_H_
#define MEDIA_VIDEO_RENDERABLE_GPU_MEMORY_BUFFER_VIDEO_FRAME_POOL_H_
#include <memory>
#include "base/memory/scoped_refptr.h"
#include "gpu/command_buffer/common/shared_image_usage.h"
#include "media/base/media_export.h"
#include "media/base/video_types.h"
#include "third_party/skia/include/core/SkImageInfo.h"
#include "third_party/skia/include/gpu/ganesh/GrTypes.h"
#include "ui/gfx/buffer_types.h"
namespace gfx {
class ColorSpace;
class GpuMemoryBuffer;
class Size;
}
namespace gpu {
class ClientSharedImage;
class GpuMemoryBufferManager;
struct SharedImageCapabilities;
class SharedImageInterface;
struct SyncToken;
}
namespace viz {
class SharedImageFormat;
}
namespace media {
class VideoFrame;
class MEDIA_EXPORT RenderableGpuMemoryBufferVideoFramePool {
public:
class Context {
public:
virtual scoped_refptr<gpu::ClientSharedImage> CreateSharedImage(
const gfx::Size& size,
gfx::BufferUsage buffer_usage,
const viz::SharedImageFormat& si_format,
const gfx::ColorSpace& color_space,
gpu::SharedImageUsageSet usage,
gpu::SyncToken& sync_token) = 0;
virtual void DestroySharedImage(
const gpu::SyncToken& sync_token,
scoped_refptr<gpu::ClientSharedImage> shared_image) = 0;
virtual const gpu::SharedImageCapabilities& GetCapabilities() = 0;
virtual ~Context() = default;
};
static std::unique_ptr<RenderableGpuMemoryBufferVideoFramePool> Create(
std::unique_ptr<Context> context,
VideoPixelFormat format = PIXEL_FORMAT_NV12,
bool requires_cpu_access = true);
virtual scoped_refptr<VideoFrame> MaybeCreateVideoFrame(
const gfx::Size& coded_size,
const gfx::ColorSpace& color_space) = 0;
virtual ~RenderableGpuMemoryBufferVideoFramePool() = default;
};
}
#endif