mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-06-26 01:40:38 +00:00
d3d11screencapture: Subclassing capture implementation
Preparation to use WinRT capture API Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3144>
This commit is contained in:
parent
dcd3f210a0
commit
087e335006
1983
subprojects/gst-plugins-bad/sys/d3d11/gstd3d11dxgicapture.cpp
Normal file
1983
subprojects/gst-plugins-bad/sys/d3d11/gstd3d11dxgicapture.cpp
Normal file
File diff suppressed because it is too large
Load diff
38
subprojects/gst-plugins-bad/sys/d3d11/gstd3d11dxgicapture.h
Normal file
38
subprojects/gst-plugins-bad/sys/d3d11/gstd3d11dxgicapture.h
Normal file
|
@ -0,0 +1,38 @@
|
|||
/*
|
||||
* GStreamer
|
||||
* Copyright (C) 2020 Seungha Yang <seungha@centricular.com>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <gst/gst.h>
|
||||
#include <gst/video/video.h>
|
||||
#include <gst/d3d11/gstd3d11.h>
|
||||
#include "gstd3d11screencapture.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GST_TYPE_D3D11_DXGI_CAPTURE (gst_d3d11_dxgi_capture_get_type())
|
||||
G_DECLARE_FINAL_TYPE (GstD3D11DxgiCapture, gst_d3d11_dxgi_capture,
|
||||
GST, D3D11_DXGI_CAPTURE, GstD3D11ScreenCapture);
|
||||
|
||||
GstD3D11ScreenCapture * gst_d3d11_dxgi_capture_new (GstD3D11Device * device,
|
||||
HMONITOR monitor_handle);
|
||||
|
||||
G_END_DECLS
|
||||
|
File diff suppressed because it is too large
Load diff
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
* GStreamer
|
||||
* Copyright (C) 2020 Seungha Yang <seungha@centricular.com>
|
||||
* Copyright (C) 2022 Seungha Yang <seungha@centricular.com>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
|
@ -26,16 +26,53 @@
|
|||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
#define GST_TYPE_D3D11_SCREEN_CAPTURE (gst_d3d11_screen_capture_get_type())
|
||||
#define GST_D3D11_SCREEN_CAPTURE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_D3D11_SCREEN_CAPTURE,GstD3D11ScreenCapture))
|
||||
#define GST_D3D11_SCREEN_CAPTURE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_D3D11_SCREEN_CAPTURE,GstD3D11ScreenCaptureClass))
|
||||
#define GST_D3D11_SCREEN_CAPTURE_GET_CLASS(obj) (GST_D3D11_SCREEN_CAPTURE_CLASS(G_OBJECT_GET_CLASS(obj)))
|
||||
#define GST_IS_D3D11_SCREEN_CAPTURE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_D3D11_SCREEN_CAPTURE))
|
||||
#define GST_IS_D3D11_SCREEN_CAPTURE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_D3D11_SCREEN_CAPTURE))
|
||||
#define GST_D3D11_SCREEN_CAPTURE_CAST(obj) ((GstD3D11ScreenCapture*)(obj))
|
||||
|
||||
typedef struct _GstD3D11ScreenCapture GstD3D11ScreenCapture;
|
||||
typedef struct _GstD3D11ScreenCaptureClass GstD3D11ScreenCaptureClass;
|
||||
|
||||
#define GST_D3D11_SCREEN_CAPTURE_FLOW_EXPECTED_ERROR GST_FLOW_CUSTOM_SUCCESS
|
||||
#define GST_D3D11_SCREEN_CAPTURE_FLOW_SIZE_CHANGED GST_FLOW_CUSTOM_SUCCESS_1
|
||||
#define GST_D3D11_SCREEN_CAPTURE_FLOW_UNSUPPORTED GST_FLOW_CUSTOM_ERROR
|
||||
|
||||
#define GST_TYPE_D3D11_SCREEN_CAPTURE (gst_d3d11_screen_capture_get_type())
|
||||
G_DECLARE_FINAL_TYPE (GstD3D11ScreenCapture, gst_d3d11_screen_capture,
|
||||
GST, D3D11_SCREEN_CAPTURE, GstObject);
|
||||
struct _GstD3D11ScreenCapture
|
||||
{
|
||||
GstObject parent;
|
||||
};
|
||||
|
||||
GstD3D11ScreenCapture * gst_d3d11_screen_capture_new (GstD3D11Device * device,
|
||||
HMONITOR monitor_handle);
|
||||
struct _GstD3D11ScreenCaptureClass
|
||||
{
|
||||
GstObjectClass parent_class;
|
||||
|
||||
GstFlowReturn (*prepare) (GstD3D11ScreenCapture * capture);
|
||||
|
||||
gboolean (*get_size) (GstD3D11ScreenCapture * capture,
|
||||
guint * width,
|
||||
guint * height);
|
||||
|
||||
gboolean (*get_colorimetry) (GstD3D11ScreenCapture * capture,
|
||||
GstVideoColorimetry * colorimetry);
|
||||
|
||||
GstFlowReturn (*do_capture) (GstD3D11ScreenCapture * capture,
|
||||
GstD3D11Device * device,
|
||||
ID3D11Texture2D * texture,
|
||||
ID3D11RenderTargetView * rtv,
|
||||
ID3D11VertexShader * vs,
|
||||
ID3D11PixelShader * ps,
|
||||
ID3D11InputLayout * layout,
|
||||
ID3D11SamplerState * sampler,
|
||||
ID3D11BlendState * blend,
|
||||
D3D11_BOX * crop_box,
|
||||
gboolean draw_mouse);
|
||||
};
|
||||
|
||||
GType gst_d3d11_screen_capture_get_type (void);
|
||||
|
||||
GstFlowReturn gst_d3d11_screen_capture_prepare (GstD3D11ScreenCapture * capture);
|
||||
|
||||
|
@ -71,5 +108,7 @@ HRESULT gst_d3d11_screen_capture_find_nth_monitor (guint index,
|
|||
IDXGIAdapter1 ** adapter,
|
||||
IDXGIOutput ** output);
|
||||
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstD3D11ScreenCapture, gst_object_unref)
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
|
|
|
@ -37,7 +37,7 @@
|
|||
#endif
|
||||
|
||||
#include "gstd3d11screencapturesrc.h"
|
||||
#include "gstd3d11screencapture.h"
|
||||
#include "gstd3d11dxgicapture.h"
|
||||
#include "gstd3d11pluginutils.h"
|
||||
#include <wrl.h>
|
||||
#include <string.h>
|
||||
|
@ -759,7 +759,7 @@ gst_d3d11_screen_capture_src_start (GstBaseSrc * bsrc)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
self->capture = gst_d3d11_screen_capture_new (self->device, monitor);
|
||||
self->capture = gst_d3d11_dxgi_capture_new (self->device, monitor);
|
||||
if (!self->capture)
|
||||
goto error;
|
||||
|
||||
|
|
|
@ -56,10 +56,11 @@ if d3d11_winapi_app
|
|||
endif
|
||||
|
||||
if d3d11_winapi_desktop
|
||||
d3d11_sources += ['gstd3d11window_win32.cpp']
|
||||
d3d11_sources += ['gstd3d11screencapture.cpp',
|
||||
d3d11_sources += ['gstd3d11dxgicapture.cpp',
|
||||
'gstd3d11screencapture.cpp',
|
||||
'gstd3d11screencapturedevice.cpp',
|
||||
'gstd3d11screencapturesrc.cpp']
|
||||
'gstd3d11screencapturesrc.cpp',
|
||||
'gstd3d11window_win32.cpp']
|
||||
|
||||
# multimedia clock is desktop only API
|
||||
if winmm_lib.found() and cc.has_header('mmsystem.h')
|
||||
|
|
Loading…
Reference in a new issue