From 6974b6f6ffcdedda64dc016a442b1829711884c7 Mon Sep 17 00:00:00 2001 From: Seungha Yang Date: Sat, 22 Oct 2022 02:49:00 +0900 Subject: [PATCH] d3d11: Update for documentation * Use GST_PARAM_DOC_SHOW_DEFAULT flags for GPU ID related properties * Add doc caps * Increase deinterlace max resolution Part-of: --- .../gst-docs/symbols/symbol_index.json | 55 -------- .../sys/d3d11/gstd3d11compositor.cpp | 13 ++ .../sys/d3d11/gstd3d11decoder.cpp | 117 ++++++++++++++++-- .../sys/d3d11/gstd3d11deinterlace.cpp | 90 +++++++++----- .../sys/d3d11/gstd3d11screencapturesrc.cpp | 75 +++++++++++ .../sys/d3d11/gstd3d11testsrc.cpp | 5 + .../sys/d3d11/gstd3d11videosink.cpp | 36 +++++- 7 files changed, 291 insertions(+), 100 deletions(-) diff --git a/subprojects/gst-docs/symbols/symbol_index.json b/subprojects/gst-docs/symbols/symbol_index.json index 54c29aef1f..ffb4993762 100644 --- a/subprojects/gst-docs/symbols/symbol_index.json +++ b/subprojects/gst-docs/symbols/symbol_index.json @@ -8490,63 +8490,8 @@ "GstD3D11CompositorBackground::checker", "GstD3D11CompositorBackground::transparent", "GstD3D11CompositorBackground::white", - "GstD3D11CompositorBin!sink_%u", - "GstD3D11CompositorBin!src", - "GstD3D11CompositorBinInput", - "GstD3D11CompositorBinInput:alpha", - "GstD3D11CompositorBinInput:blend-dest-alpha", - "GstD3D11CompositorBinInput:blend-dest-rgb", - "GstD3D11CompositorBinInput:blend-factor-alpha", - "GstD3D11CompositorBinInput:blend-factor-blue", - "GstD3D11CompositorBinInput:blend-factor-green", - "GstD3D11CompositorBinInput:blend-factor-red", - "GstD3D11CompositorBinInput:blend-op-alpha", - "GstD3D11CompositorBinInput:blend-op-rgb", - "GstD3D11CompositorBinInput:blend-src-alpha", - "GstD3D11CompositorBinInput:blend-src-rgb", - "GstD3D11CompositorBinInput:height", - "GstD3D11CompositorBinInput:max-last-buffer-repeat", - "GstD3D11CompositorBinInput:repeat-after-eos", - "GstD3D11CompositorBinInput:sizing-policy", - "GstD3D11CompositorBinInput:width", - "GstD3D11CompositorBinInput:xpos", - "GstD3D11CompositorBinInput:ypos", - "GstD3D11CompositorBinInput:zorder", - "GstD3D11CompositorBinPad", - "GstD3D11CompositorBinPad::buffer-consumed", - "GstD3D11CompositorBinPad:emit-signals", - "GstD3D11CompositorBlend", - "GstD3D11CompositorBlend::blend-factor", - "GstD3D11CompositorBlend::dest-alpha", - "GstD3D11CompositorBlend::dest-color", - "GstD3D11CompositorBlend::inv-blend-factor", - "GstD3D11CompositorBlend::inv-dest-alpha", - "GstD3D11CompositorBlend::inv-dest-color", - "GstD3D11CompositorBlend::inv-src-alpha", - "GstD3D11CompositorBlend::inv-src-color", - "GstD3D11CompositorBlend::one", - "GstD3D11CompositorBlend::src-alpha", - "GstD3D11CompositorBlend::src-alpha-sat", - "GstD3D11CompositorBlend::src-color", - "GstD3D11CompositorBlend::zero", - "GstD3D11CompositorBlendOperation", - "GstD3D11CompositorBlendOperation::add", - "GstD3D11CompositorBlendOperation::max", - "GstD3D11CompositorBlendOperation::min", - "GstD3D11CompositorBlendOperation::rev-subtract", - "GstD3D11CompositorBlendOperation::subtract", "GstD3D11CompositorPad", "GstD3D11CompositorPad:alpha", - "GstD3D11CompositorPad:blend-dest-alpha", - "GstD3D11CompositorPad:blend-dest-rgb", - "GstD3D11CompositorPad:blend-factor-alpha", - "GstD3D11CompositorPad:blend-factor-blue", - "GstD3D11CompositorPad:blend-factor-green", - "GstD3D11CompositorPad:blend-factor-red", - "GstD3D11CompositorPad:blend-op-alpha", - "GstD3D11CompositorPad:blend-op-rgb", - "GstD3D11CompositorPad:blend-src-alpha", - "GstD3D11CompositorPad:blend-src-rgb", "GstD3D11CompositorPad:height", "GstD3D11CompositorPad:sizing-policy", "GstD3D11CompositorPad:width", diff --git a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11compositor.cpp b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11compositor.cpp index 995d7410ad..6a4ae2ee06 100644 --- a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11compositor.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11compositor.cpp @@ -91,6 +91,11 @@ typedef enum GST_D3D11_COMPOSITOR_OPERATOR_OVER, } GstD3D11CompositorOperator; +/** + * GstD3D11CompositorOperator: + * + * Since: 1.22 + */ #define GST_TYPE_D3D11_COMPOSITOR_OPERATOR (gst_d3d11_compositor_operator_get_type()) static GType gst_d3d11_compositor_operator_get_type (void) @@ -393,6 +398,14 @@ gst_d3d11_compositor_pad_class_init (GstD3D11CompositorPadClass * klass) g_object_class_install_property (object_class, PROP_PAD_ALPHA, g_param_spec_double ("alpha", "Alpha", "Alpha of the picture", 0.0, 1.0, DEFAULT_PAD_ALPHA, param_flags)); + + /** + * GstD3D11CompositorPad:operator: + * + * Blending operator to use for blending this pad over the previous ones + * + * Since: 1.22 + */ g_object_class_install_property (object_class, PROP_PAD_OPERATOR, g_param_spec_enum ("operator", "Operator", "Blending operator to use for blending this pad over the previous ones", diff --git a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11decoder.cpp b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11decoder.cpp index bdda7b698e..774c40ee0d 100644 --- a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11decoder.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11decoder.cpp @@ -2283,6 +2283,81 @@ gst_d3d11_decoder_class_data_free (GstD3D11DecoderClassData * data) g_free (data); } +typedef struct _GstD3D11DecoderDocCaps +{ + GstDXVACodec codec; + const gchar *sink_caps; + const gchar *src_caps; +} GstD3D11DecoderDocCaps; + +/* *INDENT-OFF* */ +static const GstD3D11DecoderDocCaps doc_caps_list[] = { + { + GST_DXVA_CODEC_MPEG2, + "video/mpeg, width = (int) [ 1, 1920 ], height = (int) [ 1, 1920 ], " + "mpegversion = (int) 2, systemstream = (boolean) false, " + "profile = (string) { main, simple }", + + "video/x-raw(memory:D3D11Memory), format = (string) NV12, " + "width = (int) [ 1, 1920 ], height = (int) [ 1, 1920 ]; " + "video/x-raw, format = (string) NV12, " + "width = (int) [ 1, 1920 ], height = (int) [ 1, 1920 ]"}, + { + GST_DXVA_CODEC_H264, + "video/x-h264, width = (int) [ 1, 4096 ], height = (int) [ 1, 4096 ], " + "stream-format = (string) { avc, avc3, byte-stream }, " + "alignment = (string) au, " + "profile = (string) { high, progressive-high, constrained-high, main, " + "constrained-baseline, baseline }", + + "video/x-raw(memory:D3D11Memory), format = (string) NV12, " + "width = (int) [ 1, 4096 ], height = (int) [ 1, 4096 ]; " + "video/x-raw, format = (string) NV12, " + "width = (int) [ 1, 4096 ], height = (int) [ 1, 4096 ]" + }, + { + GST_DXVA_CODEC_H265, + "video/x-h265, width = (int) [ 1, 16384 ], height = (int) [ 1, 16384 ], " + "stream-format = (string) { hev1, hvc1, byte-stream }, " + "alignment = (string) au, profile = (string) { main, main-10 }", + + "video/x-raw(memory:D3D11Memory), format = (string) { NV12, P010_10LE }, " + "width = (int) [ 1, 16384 ], height = (int) [ 1, 16384 ]; " + "video/x-raw, format = (string) { NV12, P010_10LE }, " + "width = (int) [ 1, 16384 ], height = (int) [ 1, 16384 ]" + }, + { + GST_DXVA_CODEC_VP8, + "video/x-vp8, width = (int) [ 1, 4096 ], height = (int) [ 1, 4096 ]", + + "video/x-raw(memory:D3D11Memory), format = (string) NV12, " + "width = (int) [ 1, 4096 ], height = (int) [ 1, 4096 ]; " + "video/x-raw, format = (string) NV12, " + "width = (int) [ 1, 4096 ], height = (int) [ 1, 4096 ]" + }, + { + GST_DXVA_CODEC_VP9, + "video/x-vp9, width = (int) [ 1, 16384 ], height = (int) [ 1, 16384 ], " + "alignment = (string) frame, profile = (string) { 0, 2 }", + + "video/x-raw(memory:D3D11Memory), format = (string) { NV12, P010_10LE }, " + "width = (int) [ 1, 16384 ], height = (int) [ 1, 16384 ]; " + "video/x-raw, format = (string) { NV12, P010_10LE }, " + "width = (int) [ 1, 16384 ], height = (int) [ 1, 16384 ]" + }, + { + GST_DXVA_CODEC_AV1, + "video/x-av1, width = (int) [ 1, 16384 ], height = (int) [ 1, 16384 ], " + "alignment = (string) frame, profile = (string) main", + + "video/x-raw(memory:D3D11Memory), format = (string) { NV12, P010_10LE }, " + "width = (int) [ 1, 16384 ], height = (int) [ 1, 16384 ]; " + "video/x-raw, format = (string) { NV12, P010_10LE }, " + "width = (int) [ 1, 16384 ], height = (int) [ 1, 16384 ]" + }, +}; +/* *INDENT-ON* */ + void gst_d3d11_decoder_proxy_class_init (GstElementClass * klass, GstD3D11DecoderClassData * data, const gchar * author) @@ -2292,22 +2367,24 @@ gst_d3d11_decoder_proxy_class_init (GstElementClass * klass, std::string long_name; std::string description; const gchar *codec_name; + GParamFlags param_flags = (GParamFlags) (GST_PARAM_DOC_SHOW_DEFAULT | + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS); + GstPadTemplate *pad_templ; + GstCaps *doc_caps; + const GstD3D11DecoderDocCaps *d3d11_doc_caps = nullptr; g_object_class_install_property (gobject_class, PROP_DECODER_ADAPTER_LUID, g_param_spec_int64 ("adapter-luid", "Adapter LUID", "DXGI Adapter LUID (Locally Unique Identifier) of created device", - G_MININT64, G_MAXINT64, cdata->adapter_luid, - (GParamFlags) (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS))); + G_MININT64, G_MAXINT64, 0, param_flags)); g_object_class_install_property (gobject_class, PROP_DECODER_DEVICE_ID, g_param_spec_uint ("device-id", "Device Id", - "DXGI Device ID", 0, G_MAXUINT32, 0, - (GParamFlags) (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS))); + "DXGI Device ID", 0, G_MAXUINT32, 0, param_flags)); g_object_class_install_property (gobject_class, PROP_DECODER_VENDOR_ID, g_param_spec_uint ("vendor-id", "Vendor Id", - "DXGI Vendor ID", 0, G_MAXUINT32, 0, - (GParamFlags) (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS))); + "DXGI Vendor ID", 0, G_MAXUINT32, 0, param_flags)); codec_name = gst_dxva_codec_to_string (cdata->codec); long_name = "Direct3D11/DXVA " + std::string (codec_name) + " " + @@ -2318,12 +2395,28 @@ gst_d3d11_decoder_proxy_class_init (GstElementClass * klass, gst_element_class_set_metadata (klass, long_name.c_str (), "Codec/Decoder/Video/Hardware", description.c_str (), author); - gst_element_class_add_pad_template (klass, - gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, - data->sink_caps)); - gst_element_class_add_pad_template (klass, - gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS, - data->src_caps)); + for (guint i = 0; i < G_N_ELEMENTS (doc_caps_list); i++) { + if (doc_caps_list[i].codec == cdata->codec) { + d3d11_doc_caps = &doc_caps_list[i]; + break; + } + } + + g_assert (d3d11_doc_caps); + + pad_templ = gst_pad_template_new ("sink", + GST_PAD_SINK, GST_PAD_ALWAYS, data->sink_caps); + doc_caps = gst_caps_from_string (d3d11_doc_caps->sink_caps); + gst_pad_template_set_documentation_caps (pad_templ, doc_caps); + gst_caps_unref (doc_caps); + gst_element_class_add_pad_template (klass, pad_templ); + + pad_templ = gst_pad_template_new ("src", + GST_PAD_SRC, GST_PAD_ALWAYS, data->src_caps); + doc_caps = gst_caps_from_string (d3d11_doc_caps->src_caps); + gst_pad_template_set_documentation_caps (pad_templ, doc_caps); + gst_caps_unref (doc_caps); + gst_element_class_add_pad_template (klass, pad_templ); gst_d3d11_decoder_class_data_free (data); } diff --git a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11deinterlace.cpp b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11deinterlace.cpp index 69c854d77d..a5e0e4ab69 100644 --- a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11deinterlace.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11deinterlace.cpp @@ -94,6 +94,14 @@ typedef enum /* TODO: INVERSE_TELECINE */ } GstD3D11DeinterlaceMethod; +DEFINE_ENUM_FLAG_OPERATORS (GstD3D11DeinterlaceMethod); + +#define DEINTERLACE_METHOD_ALL \ + ((GstD3D11DeinterlaceMethod) (GST_D3D11_DEINTERLACE_METHOD_BLEND | \ + GST_D3D11_DEINTERLACE_METHOD_BOB | \ + GST_D3D11_DEINTERLACE_METHOD_ADAPTVIE | \ + GST_D3D11_DEINTERLACE_METHOD_MOTION_COMPENSATION)) + /** * GstD3D11DeinterlaceMethod: * @@ -204,6 +212,13 @@ enum /* hardcoded maximum queue size for each past/future frame queue */ #define MAX_NUM_REFERENCES 2 +#define DOC_CAPS \ + "video/x-raw(memory:D3D11Memory), format = (string) { NV12, P010_10LE}, " \ + "width = (int) [ 1, 16384 ], height = (int) [ 1, 16384 ]; " \ + "video/x-raw(memory:D3D11Memory, meta:GstVideoOverlayComposition), " \ + "format = (string) { NV12, P010_10LE}, " \ + "width = (int) [ 1, 16384 ], height = (int) [ 1, 16384 ]" + typedef struct _GstD3D11Deinterlace { GstBaseTransform parent; @@ -316,6 +331,8 @@ gst_d3d11_deinterlace_class_init (GstD3D11DeinterlaceClass * klass, GstBaseTransformClass *trans_class = GST_BASE_TRANSFORM_CLASS (klass); GstD3D11DeinterlaceClassData *cdata = (GstD3D11DeinterlaceClassData *) data; gchar *long_name; + GstPadTemplate *pad_templ; + GstCaps *doc_caps; parent_class = (GstElementClass *) g_type_class_peek_parent (klass); @@ -326,31 +343,35 @@ gst_d3d11_deinterlace_class_init (GstD3D11DeinterlaceClass * klass, g_object_class_install_property (gobject_class, PROP_ADAPTER, g_param_spec_uint ("adapter", "Adapter", "DXGI Adapter index for creating device", - 0, G_MAXUINT32, cdata->adapter, - (GParamFlags) (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS))); + 0, G_MAXUINT32, 0, + (GParamFlags) (GST_PARAM_DOC_SHOW_DEFAULT | + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS))); g_object_class_install_property (gobject_class, PROP_DEVICE_ID, g_param_spec_uint ("device-id", "Device Id", "DXGI Device ID", 0, G_MAXUINT32, 0, - (GParamFlags) (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS))); + (GParamFlags) (GST_PARAM_DOC_SHOW_DEFAULT | + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS))); g_object_class_install_property (gobject_class, PROP_VENDOR_ID, g_param_spec_uint ("vendor-id", "Vendor Id", "DXGI Vendor ID", 0, G_MAXUINT32, 0, - (GParamFlags) (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS))); + (GParamFlags) (GST_PARAM_DOC_SHOW_DEFAULT | + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS))); g_object_class_install_property (gobject_class, PROP_METHOD, g_param_spec_flags ("method", "Method", "Deinterlace Method. Use can set multiple methods as a flagset " "and element will select one of method automatically. " "If deinterlacing device failed to deinterlace with given mode, " "fallback might happen by the device", - GST_TYPE_D3D11_DEINTERLACE_METHOD, cdata->device_caps.default_method, - (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_TYPE_D3D11_DEINTERLACE_METHOD, DEINTERLACE_METHOD_ALL, + (GParamFlags) (GST_PARAM_DOC_SHOW_DEFAULT | + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_MUTABLE_READY))); g_object_class_install_property (gobject_class, PROP_SUPPORTED_METHODS, g_param_spec_flags ("supported-methods", "Supported Methods", "Set of supported deinterlace methods by device", - GST_TYPE_D3D11_DEINTERLACE_METHOD, - cdata->device_caps.supported_methods, - (GParamFlags) (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS))); + GST_TYPE_D3D11_DEINTERLACE_METHOD, DEINTERLACE_METHOD_ALL, + (GParamFlags) (GST_PARAM_DOC_SHOW_DEFAULT | + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS))); element_class->set_context = GST_DEBUG_FUNCPTR (gst_d3d11_deinterlace_set_context); @@ -363,12 +384,17 @@ gst_d3d11_deinterlace_class_init (GstD3D11DeinterlaceClass * klass, "Seungha Yang "); g_free (long_name); - gst_element_class_add_pad_template (element_class, - gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, - cdata->sink_caps)); - gst_element_class_add_pad_template (element_class, - gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS, - cdata->src_caps)); + doc_caps = gst_caps_from_string (DOC_CAPS); + pad_templ = gst_pad_template_new ("sink", + GST_PAD_SINK, GST_PAD_ALWAYS, cdata->sink_caps); + gst_pad_template_set_documentation_caps (pad_templ, doc_caps); + gst_element_class_add_pad_template (element_class, pad_templ); + + pad_templ = gst_pad_template_new ("src", + GST_PAD_SRC, GST_PAD_ALWAYS, cdata->src_caps); + gst_pad_template_set_documentation_caps (pad_templ, doc_caps); + gst_element_class_add_pad_template (element_class, pad_templ); + gst_caps_unref (doc_caps); trans_class->passthrough_on_same_caps = TRUE; @@ -1982,14 +2008,14 @@ static GstElementClass *bin_parent_class = NULL; #define GST_D3D11_DEINTERLACE_BIN_CAPS_MAKE(format) \ "video/x-raw, " \ "format = (string) " format ", " \ - "width = (int) [1, 8192], " \ - "height = (int) [1, 8192] " + "width = (int) [1, 16384], " \ + "height = (int) [1, 16384] " #define GST_D3D11_DEINTERLACE_BIN_CAPS_MAKE_WITH_FEATURES(features,format) \ "video/x-raw(" features "), " \ "format = (string) " format ", " \ - "width = (int) [1, 8192], " \ - "height = (int) [1, 8192] " + "width = (int) [1, 16384], " \ + "height = (int) [1, 16384] " static GstStaticPadTemplate bin_sink_template_caps = GST_STATIC_PAD_TEMPLATE ("sink", @@ -2053,31 +2079,35 @@ gst_d3d11_deinterlace_bin_class_init (GstD3D11DeinterlaceBinClass * klass, g_object_class_install_property (gobject_class, PROP_BIN_ADAPTER, g_param_spec_uint ("adapter", "Adapter", "DXGI Adapter index for creating device", - 0, G_MAXUINT32, cdata->adapter, - (GParamFlags) (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS))); + 0, G_MAXUINT32, 0, + (GParamFlags) (GST_PARAM_DOC_SHOW_DEFAULT | + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS))); g_object_class_install_property (gobject_class, PROP_BIN_DEVICE_ID, g_param_spec_uint ("device-id", "Device Id", "DXGI Device ID", 0, G_MAXUINT32, 0, - (GParamFlags) (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS))); + (GParamFlags) (GST_PARAM_DOC_SHOW_DEFAULT | + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS))); g_object_class_install_property (gobject_class, PROP_BIN_VENDOR_ID, g_param_spec_uint ("vendor-id", "Vendor Id", "DXGI Vendor ID", 0, G_MAXUINT32, 0, - (GParamFlags) (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS))); + (GParamFlags) (GST_PARAM_DOC_SHOW_DEFAULT | + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS))); g_object_class_install_property (gobject_class, PROP_BIN_METHOD, g_param_spec_flags ("method", "Method", "Deinterlace Method. Use can set multiple methods as a flagset " "and element will select one of method automatically. " "If deinterlacing device failed to deinterlace with given mode, " "fallback might happen by the device", - GST_TYPE_D3D11_DEINTERLACE_METHOD, cdata->device_caps.default_method, - (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | + GST_TYPE_D3D11_DEINTERLACE_METHOD, DEINTERLACE_METHOD_ALL, + (GParamFlags) (GST_PARAM_DOC_SHOW_DEFAULT | + G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | GST_PARAM_MUTABLE_READY))); g_object_class_install_property (gobject_class, PROP_BIN_SUPPORTED_METHODS, g_param_spec_flags ("supported-methods", "Supported Methods", "Set of supported deinterlace methods by device", - GST_TYPE_D3D11_DEINTERLACE_METHOD, - cdata->device_caps.supported_methods, - (GParamFlags) (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS))); + GST_TYPE_D3D11_DEINTERLACE_METHOD, DEINTERLACE_METHOD_ALL, + (GParamFlags) (GST_PARAM_DOC_SHOW_DEFAULT | + G_PARAM_READABLE | G_PARAM_STATIC_STRINGS))); long_name = g_strdup_printf ("Direct3D11 %s Deinterlacer Bin", cdata->description); @@ -2371,8 +2401,8 @@ gst_d3d11_deinterlace_register (GstPlugin * plugin, GstD3D11Device * device, /* FIXME: Check supported resolution, it would be different from * supported max texture dimension */ gst_caps_set_simple (caps, - "width", GST_TYPE_INT_RANGE, 1, 8192, - "height", GST_TYPE_INT_RANGE, 1, 8192, NULL); + "width", GST_TYPE_INT_RANGE, 1, 16384, + "height", GST_TYPE_INT_RANGE, 1, 16384, NULL); gst_caps_set_value (caps, "format", supported_formats); g_value_unset (supported_formats); g_free (supported_formats); diff --git a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11screencapturesrc.cpp b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11screencapturesrc.cpp index c2d17d111e..fbeeda2de4 100644 --- a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11screencapturesrc.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11screencapturesrc.cpp @@ -75,6 +75,11 @@ typedef enum } GstD3D11ScreenCaptureAPI; #ifdef HAVE_WINRT_CAPTURE +/** + * GstD3D11ScreenCaptureAPI: + * + * Since: 1.22 + */ #define GST_TYPE_D3D11_SCREEN_CAPTURE_API (gst_d3d11_screen_capture_api_get_type()) static GType gst_d3d11_screen_capture_api_get_type (void) @@ -83,7 +88,18 @@ gst_d3d11_screen_capture_api_get_type (void) GST_D3D11_CALL_ONCE_BEGIN { static const GEnumValue api_types[] = { + /** + * GstD3D11ScreenCaptureAPI::dxgi: + * + * Since: 1.22 + */ {GST_D3D11_SCREEN_CAPTURE_API_DXGI, "DXGI Desktop Duplication", "dxgi"}, + + /** + * GstD3D11ScreenCaptureAPI::wgc: + * + * Since: 1.22 + */ {GST_D3D11_SCREEN_CAPTURE_API_WGC, "Windows Graphics Capture", "wgc"}, {0, nullptr, nullptr}, }; @@ -214,24 +230,52 @@ gst_d3d11_screen_capture_src_class_init (GstD3D11ScreenCaptureSrcClass * klass) DEFAULT_SHOW_CURSOR, (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); + /** + * GstD3D11ScreenCaptureSrc:crop-x: + * + * Horizontal coordinate of top left corner for the screen capture area + * + * Since: 1.22 + */ g_object_class_install_property (gobject_class, PROP_CROP_X, g_param_spec_uint ("crop-x", "Crop X", "Horizontal coordinate of top left corner for the screen capture area", 0, G_MAXUINT, 0, (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); + /** + * GstD3D11ScreenCaptureSrc:crop-y: + * + * Vertical coordinate of top left corner for the screen capture area + * + * Since: 1.22 + */ g_object_class_install_property (gobject_class, PROP_CROP_Y, g_param_spec_uint ("crop-y", "Crop Y", "Vertical coordinate of top left corner for the screen capture area", 0, G_MAXUINT, 0, (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); + /** + * GstD3D11ScreenCaptureSrc:crop-width: + * + * Width of screen capture area (0 = maximum) + * + * Since: 1.22 + */ g_object_class_install_property (gobject_class, PROP_CROP_WIDTH, g_param_spec_uint ("crop-width", "Crop Width", "Width of screen capture area (0 = maximum)", 0, G_MAXUINT, 0, (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); + /** + * GstD3D11ScreenCaptureSrc:crop-height: + * + * Height of screen capture area (0 = maximum) + * + * Since: 1.22 + */ g_object_class_install_property (gobject_class, PROP_CROP_HEIGHT, g_param_spec_uint ("crop-height", "Crop Height", "Height of screen capture area (0 = maximum)", @@ -240,6 +284,13 @@ gst_d3d11_screen_capture_src_class_init (GstD3D11ScreenCaptureSrcClass * klass) #ifdef HAVE_WINRT_CAPTURE if (gst_d3d11_winrt_capture_load_library ()) { + /** + * GstD3D11ScreenCaptureSrc:window-handle: + * + * HWND window handle to capture + * + * Since: 1.22 + */ g_object_class_install_property (gobject_class, PROP_WINDOW_HANDLE, g_param_spec_uint64 ("window-handle", "Window Handle", "A HWND handle of window to capture", @@ -247,6 +298,14 @@ gst_d3d11_screen_capture_src_class_init (GstD3D11ScreenCaptureSrcClass * klass) (GParamFlags) (G_PARAM_READWRITE | GST_PARAM_MUTABLE_READY | GST_PARAM_CONDITIONALLY_AVAILABLE | G_PARAM_STATIC_STRINGS))); + /** + * GstD3D11ScreenCaptureSrc:show-border: + * + * Show border lines to capture area when WGC mode is selected. + * This feature requires Windows11 or newer + * + * Since: 1.22 + */ g_object_class_install_property (gobject_class, PROP_SHOW_BORDER, g_param_spec_boolean ("show-border", "Show Border", "Show border lines to capture area when WGC mode is selected", @@ -254,13 +313,29 @@ gst_d3d11_screen_capture_src_class_init (GstD3D11ScreenCaptureSrcClass * klass) (GParamFlags) (GST_PARAM_CONDITIONALLY_AVAILABLE | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS))); + /** + * GstD3D11ScreenCaptureSrc:capture-api: + * + * Capture API to use + * + * Since: 1.22 + */ g_object_class_install_property (gobject_class, PROP_CAPTURE_API, g_param_spec_enum ("capture-api", "Capture API", "Capture API to use", GST_TYPE_D3D11_SCREEN_CAPTURE_API, DEFAULT_CAPTURE_API, (GParamFlags) (G_PARAM_READWRITE | GST_PARAM_MUTABLE_READY | GST_PARAM_CONDITIONALLY_AVAILABLE | G_PARAM_STATIC_STRINGS))); + gst_type_mark_as_plugin_api (GST_TYPE_D3D11_SCREEN_CAPTURE_API, + (GstPluginAPIFlags) 0); + /** + * GstD3D11ScreenCaptureSrc:adapter: + * + * DXGI Adapter index for creating device when WGC mode is selected + * + * Since: 1.22 + */ g_object_class_install_property (gobject_class, PROP_ADAPTER, g_param_spec_int ("adapter", "Adapter", "DXGI Adapter index for creating device when WGC mode is selected " diff --git a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11testsrc.cpp b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11testsrc.cpp index 3dc322aa57..b668876faf 100644 --- a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11testsrc.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11testsrc.cpp @@ -68,6 +68,11 @@ typedef enum GST_D3D11_TEST_SRC_CHECKERS8, } GstD3D11TestSrcPattern; +/** + * GstD3D11TestSrcPattern: + * + * Since: 1.22 + */ #define GST_TYPE_D3D11_TEST_SRC_PATTERN (gst_d3d11_test_src_pattern_get_type ()) static GType gst_d3d11_test_src_pattern_get_type (void) diff --git a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11videosink.cpp b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11videosink.cpp index 17776e7a7d..001c4f12a1 100644 --- a/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11videosink.cpp +++ b/subprojects/gst-plugins-bad/sys/d3d11/gstd3d11videosink.cpp @@ -78,6 +78,13 @@ enum #define DEFAULT_DISPLAY_FORMAT DXGI_FORMAT_UNKNOWN #define DEFAULT_EMIT_PRESENT FALSE +/** + * GstD3D11VideoSinkDisplayFormat: + * + * Swapchain's DXGI format + * + * Since: 1.22 + */ #define GST_TYPE_D3D11_VIDEO_SINK_DISPLAY_FORMAT (gst_d3d11_video_sink_display_format_type()) static GType gst_d3d11_video_sink_display_format_type (void) @@ -86,11 +93,34 @@ gst_d3d11_video_sink_display_format_type (void) GST_D3D11_CALL_ONCE_BEGIN { static const GEnumValue format_types[] = { + /** + * GstD3D11VideoSinkDisplayFormat::unknown: + * + * Since: 1.22 + */ {DXGI_FORMAT_UNKNOWN, "DXGI_FORMAT_UNKNOWN", "unknown"}, + + /** + * GstD3D11VideoSinkDisplayFormat::r10g10b10a2-unorm: + * + * Since: 1.22 + */ {DXGI_FORMAT_R10G10B10A2_UNORM, "DXGI_FORMAT_R10G10B10A2_UNORM", "r10g10b10a2-unorm"}, + + /** + * GstD3D11VideoSinkDisplayFormat::r8g8b8a8-unorm: + * + * Since: 1.22 + */ {DXGI_FORMAT_R8G8B8A8_UNORM, "DXGI_FORMAT_R8G8B8A8_UNORM", "r8g8b8a8-unorm"}, + + /** + * GstD3D11VideoSinkDisplayFormat::b8g8r8a8-unorm: + * + * Since: 1.22 + */ {DXGI_FORMAT_B8G8R8A8_UNORM, "DXGI_FORMAT_B8G8R8A8_UNORM", "b8g8r8a8-unorm"}, {0, nullptr, nullptr}, @@ -412,14 +442,14 @@ gst_d3d11_video_sink_class_init (GstD3D11VideoSinkClass * klass) /** * GstD3D11VideoSink::present * @videosink: the #GstD3D11VideoSink - * @device: a #GstD3D11Device handle + * @device: a GstD3D11Device object * @render_target: a ID3D11RenderTargetView handle of swapchain's backbuffer * * Emitted just before presenting a texture via the IDXGISwapChain::Present. * The client can perform additional rendering on the given @render_target, * or can read the content already rendered on the swapchain's backbuffer. * - * This signal will be emitted with gst_d3d11_device_lock() taken and + * This signal will be emitted with gst_d3d11_device_lock taken and * client should perform GPU operation from the thread where this signal * emitted. * @@ -428,7 +458,7 @@ gst_d3d11_video_sink_class_init (GstD3D11VideoSinkClass * klass) gst_d3d11_video_sink_signals[SIGNAL_PRESENT] = g_signal_new ("present", G_TYPE_FROM_CLASS (klass), G_SIGNAL_RUN_LAST, 0, nullptr, nullptr, nullptr, - G_TYPE_NONE, 2, GST_TYPE_D3D11_DEVICE, G_TYPE_POINTER); + G_TYPE_NONE, 2, GST_TYPE_OBJECT, G_TYPE_POINTER); element_class->set_context = GST_DEBUG_FUNCPTR (gst_d3d11_video_sink_set_context);