blob: f868b7b67c29c78bfb2be01394e8ba5b26276f12 [file] [log] [blame]
// Copyright 2019 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 GPU_COMMAND_BUFFER_SERVICE_STREAM_TEXTURE_SHARED_IMAGE_INTERFACE_H_
#define GPU_COMMAND_BUFFER_SERVICE_STREAM_TEXTURE_SHARED_IMAGE_INTERFACE_H_
#include "gpu/gpu_gles2_export.h"
#include "ui/gl/gl_image.h"
namespace gpu {
class TextureOwner;
class TextureBase;
// This class is a specialized GLImage that lets SharedImageVideo draw video
// frames.
class GPU_GLES2_EXPORT StreamTextureSharedImageInterface : public gl::GLImage {
public:
enum class BindingsMode {
// Ensures that the TextureOwner's texture is bound to the latest image, if
// it requires explicit binding.
kEnsureTexImageBound,
// Updates the current image but does not bind it. If updating the image
// implicitly binds the texture, the current bindings will be restored.
kRestoreIfBound,
// Updates the current image but does not bind it. If updating the image
// implicitly binds the texture, the current bindings will not be restored.
kDontRestoreIfBound
};
// Release the underlying resources. This should be called when the image is
// not longer valid or the context is lost.
virtual void ReleaseResources() = 0;
// Whether the StreamTextureSharedImageInterface is accounting for gpu memory
// or not.
virtual bool IsUsingGpuMemory() const = 0;
// Update the texture image to the most recent frame and bind it to the
// texture.
virtual void UpdateAndBindTexImage() = 0;
virtual bool HasTextureOwner() const = 0;
virtual TextureBase* GetTextureBase() const = 0;
// Notify the texture of overlay decision, When overlay promotion is true,
// this also sets the bounds of where the overlay is.
virtual void NotifyOverlayPromotion(bool promotion,
const gfx::Rect& bounds) = 0;
// Render the video frame into an overlay plane. Should only be called after
// the overlay promotion. Return true if it could render to overlay correctly.
virtual bool RenderToOverlay() = 0;
protected:
~StreamTextureSharedImageInterface() override = default;
};
} // namespace gpu
#endif // GPU_COMMAND_BUFFER_SERVICE_STREAM_TEXTURE_SHARED_IMAGE_INTERFACE_H_