| // Copyright 2016 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_GPU_VIDEO_DECODE_ACCELERATOR_HELPERS_H_ |
| #define MEDIA_GPU_GPU_VIDEO_DECODE_ACCELERATOR_HELPERS_H_ |
| |
| #include "base/callback.h" |
| #include "base/memory/weak_ptr.h" |
| #include "media/base/supported_video_decoder_config.h" |
| #include "media/gpu/media_gpu_export.h" |
| #include "media/video/video_decode_accelerator.h" |
| |
| namespace gl { |
| class GLContext; |
| class GLImage; |
| } |
| |
| namespace gpu { |
| namespace gles2 { |
| class AbstractTexture; |
| class ContextGroup; |
| } |
| } |
| |
| namespace media { |
| |
| // Helpers/defines for specific VideoDecodeAccelerator implementations in GPU |
| // process. Which callbacks are required depends on the implementation. |
| // |
| // Note that these callbacks may be called more than once, and so must own/share |
| // ownership of any objects bound to them. |
| // |
| // Unless specified otherwise, these callbacks must be executed on the GPU Child |
| // thread (i.e. the thread which the VDAs are initialized on). |
| |
| // Return current GLContext. |
| using GetGLContextCallback = base::RepeatingCallback<gl::GLContext*(void)>; |
| |
| // Make the applicable GL context current. To be called by VDAs before |
| // executing any GL calls. Return true on success, false otherwise. |
| using MakeGLContextCurrentCallback = base::RepeatingCallback<bool(void)>; |
| |
| // Bind |image| to |client_texture_id| given |texture_target|. If |
| // |can_bind_to_sampler| is true, then the image may be used as a sampler |
| // directly, otherwise a copy to a staging buffer is required. |
| // Return true on success, false otherwise. |
| using BindGLImageCallback = |
| base::RepeatingCallback<bool(uint32_t client_texture_id, |
| uint32_t texture_target, |
| const scoped_refptr<gl::GLImage>& image, |
| bool can_bind_to_sampler)>; |
| |
| // Return a ContextGroup*, if one is available. |
| using GetContextGroupCallback = |
| base::RepeatingCallback<gpu::gles2::ContextGroup*(void)>; |
| |
| // Create and return an AbstractTexture, if possible. |
| using CreateAbstractTextureCallback = |
| base::RepeatingCallback<std::unique_ptr<gpu::gles2::AbstractTexture>( |
| unsigned /* GLenum */ target, |
| unsigned /* GLenum */ internal_format, |
| int /* GLsizei */ width, |
| int /* GLsizei */ height, |
| int /* GLsizei */ depth, |
| int /* GLint */ border, |
| unsigned /* GLenum */ format, |
| unsigned /* GLenum */ type)>; |
| |
| // OpenGL callbacks made by VideoDecodeAccelerator sub-classes. |
| struct MEDIA_GPU_EXPORT GpuVideoDecodeGLClient { |
| GpuVideoDecodeGLClient(); |
| ~GpuVideoDecodeGLClient(); |
| GpuVideoDecodeGLClient(const GpuVideoDecodeGLClient&); |
| GpuVideoDecodeGLClient& operator=(const GpuVideoDecodeGLClient&); |
| |
| // Return current GLContext. |
| using GetGLContextCallback = base::RepeatingCallback<gl::GLContext*(void)>; |
| |
| // Make the applicable GL context current. To be called by VDAs before |
| // executing any GL calls. Return true on success, false otherwise. |
| using MakeGLContextCurrentCallback = base::RepeatingCallback<bool(void)>; |
| |
| // Bind |image| to |client_texture_id| given |texture_target|. If |
| // |can_bind_to_sampler| is true, then the image may be used as a sampler |
| // directly, otherwise a copy to a staging buffer is required. |
| // Return true on success, false otherwise. |
| using BindGLImageCallback = |
| base::RepeatingCallback<bool(uint32_t client_texture_id, |
| uint32_t texture_target, |
| const scoped_refptr<gl::GLImage>& image, |
| bool can_bind_to_sampler)>; |
| |
| // Return a ContextGroup*, if one is available. |
| using GetContextGroupCallback = |
| base::RepeatingCallback<gpu::gles2::ContextGroup*(void)>; |
| |
| // Callback to return current GLContext, if available. |
| GetGLContextCallback get_context; |
| |
| // Callback for making the relevant context current for GL calls. |
| MakeGLContextCurrentCallback make_context_current; |
| |
| // Callback to bind a GLImage to a given texture id and target. |
| BindGLImageCallback bind_image; |
| |
| // Callback to return a ContextGroup*. |
| GetContextGroupCallback get_context_group; |
| |
| // Callback to return a DecoderContext*. |
| CreateAbstractTextureCallback create_abstract_texture; |
| |
| // Whether or not the command buffer is passthrough. |
| bool is_passthrough = false; |
| |
| // Whether or not ARB_texture_rectangle is present. |
| bool supports_arb_texture_rectangle = false; |
| }; |
| |
| // Convert vector of VDA::SupportedProfile to vector of |
| // SupportedVideoDecoderConfig. |
| MEDIA_GPU_EXPORT SupportedVideoDecoderConfigs ConvertFromSupportedProfiles( |
| const VideoDecodeAccelerator::SupportedProfiles& profiles, |
| bool allow_encrypted); |
| |
| } // namespace media |
| |
| #endif // MEDIA_GPU_GPU_VIDEO_DECODE_ACCELERATOR_HELPERS_H_ |