| // Copyright 2019 The Chromium Authors |
| // 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 <memory> |
| |
| #include "base/android/scoped_hardware_buffer_fence_sync.h" |
| #include "gpu/gpu_gles2_export.h" |
| #include "ui/gfx/geometry/rect.h" |
| #include "ui/gl/gl_bindings.h" |
| |
| namespace base::android { |
| class ScopedHardwareBufferFenceSync; |
| } // namespace base::android |
| |
| namespace gpu { |
| class TextureOwner; |
| class TextureBase; |
| |
| // This class lets AndroidVideoImageBacking draw video frames. |
| class GPU_GLES2_EXPORT StreamTextureSharedImageInterface |
| : public base::RefCounted<StreamTextureSharedImageInterface> { |
| public: |
| // Release the underlying resources. This should be called when the image is |
| // not longer valid or the context is lost. |
| virtual void ReleaseResources() = 0; |
| |
| // Update texture image to the most recent frame. |
| 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; |
| |
| // Whether TextureOwner's implementation binds texture to TextureOwner owned |
| // texture_id during the texture update. |
| virtual bool TextureOwnerBindsTextureOnUpdate() = 0; |
| |
| // Provides the buffer backing this image, if it is backed by an |
| // AHardwareBuffer. The ScopedHardwareBuffer returned may include a fence |
| // which will be signaled when all pending work for the buffer has been |
| // finished and it can be safely read from. |
| // The buffer is guaranteed to be valid until the lifetime of the object |
| // returned. |
| virtual std::unique_ptr<base::android::ScopedHardwareBufferFenceSync> |
| GetAHardwareBuffer() = 0; |
| |
| protected: |
| virtual ~StreamTextureSharedImageInterface() = default; |
| |
| private: |
| friend class base::RefCounted<StreamTextureSharedImageInterface>; |
| }; |
| |
| } // namespace gpu |
| |
| #endif // GPU_COMMAND_BUFFER_SERVICE_STREAM_TEXTURE_SHARED_IMAGE_INTERFACE_H_ |