/* GStreamer * Copyright (C) 2019 Seungha Yang * Copyright (C) 2020 Seungha Yang * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, * Boston, MA 02110-1301, USA. */ #ifndef __GST_D3D11_PLUGIN_UTILS_H__ #define __GST_D3D11_PLUGIN_UTILS_H__ #include #include #include #include #include #include G_BEGIN_DECLS typedef enum { GST_D3D11_DEVICE_VENDOR_UNKNOWN = 0, GST_D3D11_DEVICE_VENDOR_AMD, GST_D3D11_DEVICE_VENDOR_INTEL, GST_D3D11_DEVICE_VENDOR_NVIDIA, GST_D3D11_DEVICE_VENDOR_QUALCOMM, GST_D3D11_DEVICE_VENDOR_XBOX, } GstD3D11DeviceVendor; typedef enum { GST_D3D11_ALPHA_MODE_UNSPECIFIED = 0, GST_D3D11_ALPHA_MODE_PREMULTIPLIED, GST_D3D11_ALPHA_MODE_STRAIGHT, } GstD3D11AlphaMode; #define GST_TYPE_D3D11_ALPHA_MODE (gst_d3d11_alpha_mode_get_type()) GType gst_d3d11_alpha_mode_get_type (void); typedef enum { GST_D3D11_MSAA_DISABLED, GST_D3D11_MSAA_2X, GST_D3D11_MSAA_4X, GST_D3D11_MSAA_8X, } GstD3D11MSAAMode; #define GST_TYPE_D3D11_MSAA_MODE (gst_d3d11_msaa_mode_get_type()) GType gst_d3d11_msaa_mode_get_type (void); typedef enum { GST_D3D11_SAMPLING_METHOD_NEAREST, GST_D3D11_SAMPLING_METHOD_BILINEAR, GST_D3D11_SAMPLING_METHOD_LINEAR_MINIFICATION, GST_D3D11_SAMPLING_METHOD_ANISOTROPIC, } GstD3D11SamplingMethod; #define GST_TYPE_D3D11_SAMPLING_METHOD (gst_d3d11_sampling_method_get_type()) GType gst_d3d11_sampling_method_get_type (void); void gst_d3d11_plugin_utils_init (D3D_FEATURE_LEVEL feature_level); GstCaps * gst_d3d11_get_updated_template_caps (GstStaticCaps * template_caps); gboolean gst_d3d11_is_windows_8_or_greater (void); GstD3D11DeviceVendor gst_d3d11_get_device_vendor (GstD3D11Device * device); GstD3D11DeviceVendor gst_d3d11_get_device_vendor_from_id (guint vendor_id); gboolean gst_d3d11_hdr_meta_data_to_dxgi (GstVideoMasteringDisplayInfo * minfo, GstVideoContentLightLevel * cll, DXGI_HDR_METADATA_HDR10 * dxgi_hdr10); gboolean gst_d3d11_find_swap_chain_color_space (const GstVideoInfo * info, IDXGISwapChain3 * swapchain, DXGI_COLOR_SPACE_TYPE * color_space); GstBuffer * gst_d3d11_allocate_staging_buffer_for (GstBuffer * buffer, const GstVideoInfo * info, gboolean add_videometa); gboolean gst_d3d11_buffer_copy_into (GstBuffer * dst, GstBuffer * src, const GstVideoInfo * info); gboolean gst_is_d3d11_buffer (GstBuffer * buffer); gboolean gst_d3d11_buffer_can_access_device (GstBuffer * buffer, ID3D11Device * device); gboolean gst_d3d11_buffer_map (GstBuffer * buffer, ID3D11Device * device, GstMapInfo info[GST_VIDEO_MAX_PLANES], GstMapFlags flags); gboolean gst_d3d11_buffer_unmap (GstBuffer * buffer, GstMapInfo info[GST_VIDEO_MAX_PLANES]); guint gst_d3d11_buffer_get_shader_resource_view (GstBuffer * buffer, ID3D11ShaderResourceView * view[GST_VIDEO_MAX_PLANES]); guint gst_d3d11_buffer_get_render_target_view (GstBuffer * buffer, ID3D11RenderTargetView * view[GST_VIDEO_MAX_PLANES]); GstBufferPool * gst_d3d11_buffer_pool_new_with_options (GstD3D11Device * device, GstCaps * caps, GstD3D11AllocationParams * alloc_params, guint min_buffers, guint max_buffers); HRESULT gst_d3d11_get_pixel_shader_checker_luma (GstD3D11Device * device, ID3D11PixelShader ** ps); HRESULT gst_d3d11_get_pixel_shader_checker_rgb (GstD3D11Device * device, ID3D11PixelShader ** ps); HRESULT gst_d3d11_get_pixel_shader_checker_vuya (GstD3D11Device * device, ID3D11PixelShader ** ps); HRESULT gst_d3d11_get_pixel_shader_checker (GstD3D11Device * device, ID3D11PixelShader ** ps); HRESULT gst_d3d11_get_pixel_shader_color (GstD3D11Device * device, ID3D11PixelShader ** ps); HRESULT gst_d3d11_get_pixel_shader_sample_premul (GstD3D11Device * device, ID3D11PixelShader ** ps); HRESULT gst_d3d11_get_pixel_shader_sample (GstD3D11Device * device, ID3D11PixelShader ** ps); HRESULT gst_d3d11_get_pixel_shader_snow (GstD3D11Device * device, ID3D11PixelShader ** ps); HRESULT gst_d3d11_get_vertex_shader_color (GstD3D11Device * device, ID3D11VertexShader ** vs, ID3D11InputLayout ** layout); HRESULT gst_d3d11_get_vertex_shader_coord (GstD3D11Device * device, ID3D11VertexShader ** vs, ID3D11InputLayout ** layout); HRESULT gst_d3d11_get_vertex_shader_pos (GstD3D11Device * device, ID3D11VertexShader ** vs, ID3D11InputLayout ** layout); gboolean gst_d3d11_need_transform (gfloat rotation_x, gfloat rotation_y, gfloat rotation_z, gfloat scale_x, gfloat scale_y); D3D11_FILTER gst_d3d11_sampling_method_to_native (GstD3D11SamplingMethod method); G_END_DECLS #endif /* __GST_D3D11_PLUGIN_UTILS_H__ */