| // 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 "base/memory/ref_counted.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 { | |
| // 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; | |
| virtual bool HasTextureOwner() 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; | |
| // 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_ |