d3d11: Update for documentation
authorSeungha Yang <seungha@centricular.com>
Fri, 21 Oct 2022 17:49:00 +0000 (02:49 +0900)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Mon, 24 Oct 2022 12:42:51 +0000 (12:42 +0000)
* Use GST_PARAM_DOC_SHOW_DEFAULT flags for GPU ID related
  properties
* Add doc caps
* Increase deinterlace max resolution

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3250>

subprojects/gst-docs/symbols/symbol_index.json
subprojects/gst-plugins-bad/sys/d3d11/gstd3d11compositor.cpp
subprojects/gst-plugins-bad/sys/d3d11/gstd3d11decoder.cpp
subprojects/gst-plugins-bad/sys/d3d11/gstd3d11deinterlace.cpp
subprojects/gst-plugins-bad/sys/d3d11/gstd3d11screencapturesrc.cpp
subprojects/gst-plugins-bad/sys/d3d11/gstd3d11testsrc.cpp
subprojects/gst-plugins-bad/sys/d3d11/gstd3d11videosink.cpp

index 54c29ae..ffb4993 100644 (file)
   "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",
index 995d741..6a4ae2e 100644 (file)
@@ -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",
index bdda7b6..774c40e 100644 (file)
@@ -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);
 }
index 69c854d..a5e0e4a 100644 (file)
@@ -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 <seungha@centricular.com>");
   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);
index c2d17d1..fbeeda2 100644 (file)
@@ -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 "
index 3dc322a..b668876 100644 (file)
@@ -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)
index 17776e7..001c4f1 100644 (file)
@@ -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);