"long-name": "NVENC H.264 Video Encoder",
"pad-templates": {
"sink": {
- "caps": "video/x-raw:\n format: { NV12, YV12, I420, BGRA, RGBA, Y444, VUYA }\n width: [ 33, 4096 ]\n height: [ 17, 4096 ]\n framerate: [ 0/1, 2147483647/1 ]\n interlace-mode: { (string)progressive, (string)interleaved, (string)mixed }\n\nvideo/x-raw(memory:GLMemory):\n format: { NV12, YV12, I420, BGRA, RGBA, Y444, VUYA }\n width: [ 33, 4096 ]\n height: [ 17, 4096 ]\n framerate: [ 0/1, 2147483647/1 ]\n interlace-mode: { (string)progressive, (string)interleaved, (string)mixed }\n",
+ "caps": "video/x-raw:\n format: { NV12, YV12, I420, BGRA, RGBA, Y444, VUYA }\n width: [ 145, 4096 ]\n height: [ 49, 4096 ]\n framerate: [ 0/1, 2147483647/1 ]\n interlace-mode: { (string)progressive }\n\nvideo/x-raw(memory:GLMemory):\n format: { NV12, YV12, I420, BGRA, RGBA, Y444, VUYA }\n width: [ 145, 4096 ]\n height: [ 49, 4096 ]\n framerate: [ 0/1, 2147483647/1 ]\n interlace-mode: { (string)progressive }\n",
"direction": "sink",
"presence": "always"
},
"src": {
- "caps": "video/x-h264:\n width: [ 33, 4096 ]\n height: [ 17, 4096 ]\n framerate: [ 0/1, 2147483647/1 ]\n stream-format: byte-stream\n alignment: au\n profile: { (string)main, (string)high, (string)high-4:4:4, (string)baseline }\n",
+ "caps": "video/x-h264:\n width: [ 145, 4096 ]\n height: [ 49, 4096 ]\n framerate: [ 0/1, 2147483647/1 ]\n stream-format: byte-stream\n alignment: au\n profile: { (string)main, (string)high, (string)high-4:4:4, (string)baseline }\n",
"direction": "src",
"presence": "always"
}
"writable": true
},
"b-adapt": {
- "blurb": "Enable adaptive B-frame insert when lookahead is enabled (Exposed only if supported by device)",
- "conditionally-available": false,
+ "blurb": "Enable adaptive B-frame insert when lookahead is enabled",
+ "conditionally-available": true,
"construct": false,
"construct-only": false,
"controllable": false,
"writable": true
},
"bframes": {
- "blurb": "Number of B-frames between I and P (Exposed only if supported by device)",
- "conditionally-available": false,
+ "blurb": "Number of B-frames between I and P",
+ "conditionally-available": true,
"construct": false,
"construct-only": false,
"controllable": false,
"writable": true
},
"rc-lookahead": {
- "blurb": "Number of frames for frame type lookahead (Exposed only if supported by device)",
- "conditionally-available": false,
+ "blurb": "Number of frames for frame type lookahead",
+ "conditionally-available": true,
"construct": false,
"construct-only": false,
"controllable": false,
"writable": true
},
"temporal-aq": {
- "blurb": "Temporal Adaptive Quantization (Exposed only if supported by device)",
- "conditionally-available": false,
+ "blurb": "Temporal Adaptive Quantization",
+ "conditionally-available": true,
"construct": false,
"construct-only": false,
"controllable": false,
"writable": true
},
"vbv-buffer-size": {
- "blurb": "VBV(HRD) Buffer Size in kbits (0 = NVENC default) (Exposed only if supported by device)",
- "conditionally-available": false,
+ "blurb": "VBV(HRD) Buffer Size in kbits (0 = NVENC default)",
+ "conditionally-available": true,
"construct": false,
"construct-only": false,
"controllable": false,
"writable": true
},
"weighted-pred": {
- "blurb": "Weighted Prediction (Exposed only if supported by device)",
- "conditionally-available": false,
+ "blurb": "Weighted Prediction",
+ "conditionally-available": true,
"construct": false,
"construct-only": false,
"controllable": false,
"long-name": "NVDEC h265 Video Decoder",
"pad-templates": {
"sink": {
- "caps": "video/x-h265:\n stream-format: byte-stream\n alignment: au\n profile: { (string)main, (string)main-10, (string)main-12 }\n width: [ 144, 8192 ]\n height: [ 144, 8192 ]\n",
+ "caps": "video/x-h265:\n stream-format: byte-stream\n alignment: au\n profile: { (string)main, (string)main-10, (string)main-12, (string)main-444, (string)main-444-10, (string)main-444-12 }\n width: [ 144, 8192 ]\n height: [ 144, 8192 ]\n",
"direction": "sink",
"presence": "always"
},
"src": {
- "caps": "video/x-raw:\n width: [ 144, 8192 ]\n height: [ 144, 8192 ]\n framerate: [ 0/1, 2147483647/1 ]\n format: { NV12, P010_10LE, P016_LE }\n\nvideo/x-raw(memory:GLMemory):\n width: [ 144, 8192 ]\n height: [ 144, 8192 ]\n framerate: [ 0/1, 2147483647/1 ]\n format: { NV12, P010_10LE, P016_LE }\n",
+ "caps": "video/x-raw:\n width: [ 144, 8192 ]\n height: [ 144, 8192 ]\n framerate: [ 0/1, 2147483647/1 ]\n format: { NV12, P010_10LE, P016_LE, Y444, Y444_16LE, Y444_16LE }\n\nvideo/x-raw(memory:GLMemory):\n width: [ 144, 8192 ]\n height: [ 144, 8192 ]\n framerate: [ 0/1, 2147483647/1 ]\n format: { NV12, P010_10LE, P016_LE, Y444, Y444_16LE, Y444_16LE }\n",
"direction": "src",
"presence": "always"
}
"long-name": "NVENC HEVC Video Encoder",
"pad-templates": {
"sink": {
- "caps": "video/x-raw:\n format: { NV12, YV12, I420, BGRA, RGBA, Y444, VUYA, P010_10LE, BGR10A2_LE, RGB10A2_LE, Y444_16LE }\n width: [ 65, 8192 ]\n height: [ 33, 8192 ]\n framerate: [ 0/1, 2147483647/1 ]\n interlace-mode: { (string)progressive }\n\nvideo/x-raw(memory:GLMemory):\n format: { NV12, YV12, I420, BGRA, RGBA, Y444, VUYA, P010_10LE, BGR10A2_LE, RGB10A2_LE, Y444_16LE }\n width: [ 65, 8192 ]\n height: [ 33, 8192 ]\n framerate: [ 0/1, 2147483647/1 ]\n interlace-mode: { (string)progressive }\n",
+ "caps": "video/x-raw:\n format: { NV12, P010_10LE, P016_LE, Y444, Y444_16LE, Y444_16LE }\n width: [ 144, 8192 ]\n height: [ 144, 8192 ]\n framerate: [ 0/1, 2147483647/1 ]\n\nvideo/x-raw(memory:GLMemory):\n format: { NV12, P010_10LE, P016_LE, Y444, Y444_16LE, Y444_16LE }\n width: [ 144, 8192 ]\n height: [ 144, 8192 ]\n framerate: [ 0/1, 2147483647/1 ]\n",
"direction": "sink",
"presence": "always"
},
"src": {
- "caps": "video/x-h265:\n width: [ 65, 8192 ]\n height: [ 33, 8192 ]\n framerate: [ 0/1, 2147483647/1 ]\n stream-format: byte-stream\n alignment: au\n profile: { (string)main, (string)main-10, (string)main-444 }\n",
+ "caps": "video/x-h265:\n width: [ 144, 8192 ]\n height: [ 144, 8192 ]\n stream-format: byte-stream\n alignment: au\n profile: { (string)main, (string)main-10, (string)main-12, (string)main-444, (string)main-444-10, (string)main-444-12 }\n",
"direction": "src",
"presence": "always"
}
"type": "gboolean",
"writable": true
},
+ "b-adapt": {
+ "blurb": "Enable adaptive B-frame insert when lookahead is enabled",
+ "conditionally-available": true,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "false",
+ "mutable": "ready",
+ "readable": true,
+ "type": "gboolean",
+ "writable": true
+ },
+ "bframes": {
+ "blurb": "Number of B-frames between I and P",
+ "conditionally-available": true,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "0",
+ "max": "5",
+ "min": "0",
+ "mutable": "ready",
+ "readable": true,
+ "type": "guint",
+ "writable": true
+ },
"rc-lookahead": {
- "blurb": "Number of frames for frame type lookahead (Exposed only if supported by device)",
- "conditionally-available": false,
+ "blurb": "Number of frames for frame type lookahead",
+ "conditionally-available": true,
"construct": false,
"construct-only": false,
"controllable": false,
"type": "guint",
"writable": true
},
+ "temporal-aq": {
+ "blurb": "Temporal Adaptive Quantization",
+ "conditionally-available": true,
+ "construct": false,
+ "construct-only": false,
+ "controllable": false,
+ "default": "false",
+ "mutable": "playing",
+ "readable": true,
+ "type": "gboolean",
+ "writable": true
+ },
"vbv-buffer-size": {
- "blurb": "VBV(HRD) Buffer Size in kbits (0 = NVENC default) (Exposed only if supported by device)",
- "conditionally-available": false,
+ "blurb": "VBV(HRD) Buffer Size in kbits (0 = NVENC default)",
+ "conditionally-available": true,
"construct": false,
"construct-only": false,
"controllable": false,
"writable": true
},
"weighted-pred": {
- "blurb": "Weighted Prediction (Exposed only if supported by device)",
- "conditionally-available": false,
+ "blurb": "Weighted Prediction",
+ "conditionally-available": true,
"construct": false,
"construct-only": false,
"controllable": false,
},
"rank": "primary + 256"
},
+ "nvh265sldec": {
+ "author": "Seungha Yang <seungha@centricular.com>",
+ "description": "Nvidia H.265 video decoder",
+ "hierarchy": [
+ "GstNvH265StatelessDec",
+ "GstNvH265Dec",
+ "GstH265Decoder",
+ "GstVideoDecoder",
+ "GstElement",
+ "GstObject",
+ "GInitiallyUnowned",
+ "GObject"
+ ],
+ "klass": "Codec/Decoder/Video/Hardware",
+ "long-name": "NVDEC H.265 Stateless Decoder",
+ "pad-templates": {
+ "sink": {
+ "caps": "video/x-h265:\n stream-format: { (string)hev1, (string)hvc1, (string)byte-stream }\n alignment: au\n profile: { (string)main, (string)main-10, (string)main-12, (string)main-444, (string)main-444-10, (string)main-444-12 }\n width: [ 144, 8192 ]\n height: [ 144, 8192 ]\n",
+ "direction": "sink",
+ "presence": "always"
+ },
+ "src": {
+ "caps": "video/x-raw:\n width: [ 144, 8192 ]\n height: [ 144, 8192 ]\n framerate: [ 0/1, 2147483647/1 ]\n format: { NV12, P010_10LE, P016_LE, Y444, Y444_16LE, Y444_16LE }\n\nvideo/x-raw(memory:GLMemory):\n width: [ 144, 8192 ]\n height: [ 144, 8192 ]\n framerate: [ 0/1, 2147483647/1 ]\n format: { NV12, P010_10LE, P016_LE, Y444, Y444_16LE, Y444_16LE }\n",
+ "direction": "src",
+ "presence": "always"
+ }
+ },
+ "rank": "secondary"
+ },
"nvjpegdec": {
"author": "Ericsson AB, http://www.ericsson.com, Seungha Yang <seungha.yang@navercorp.com>",
"description": "NVDEC video decoder",
},
"rank": "primary"
},
+ "nvvp8dec": {
+ "author": "Ericsson AB, http://www.ericsson.com, Seungha Yang <seungha.yang@navercorp.com>",
+ "description": "NVDEC video decoder",
+ "hierarchy": [
+ "nvvp8dec",
+ "GstNvDec",
+ "GstVideoDecoder",
+ "GstElement",
+ "GstObject",
+ "GInitiallyUnowned",
+ "GObject"
+ ],
+ "klass": "Codec/Decoder/Video/Hardware",
+ "long-name": "NVDEC vp8 Video Decoder",
+ "pad-templates": {
+ "sink": {
+ "caps": "video/x-vp8:\n width: [ 48, 4096 ]\n height: [ 16, 4096 ]\n",
+ "direction": "sink",
+ "presence": "always"
+ },
+ "src": {
+ "caps": "video/x-raw:\n width: [ 48, 4096 ]\n height: [ 16, 4096 ]\n framerate: [ 0/1, 2147483647/1 ]\n format: { NV12 }\n\nvideo/x-raw(memory:GLMemory):\n width: [ 48, 4096 ]\n height: [ 16, 4096 ]\n framerate: [ 0/1, 2147483647/1 ]\n format: { NV12 }\n",
+ "direction": "src",
+ "presence": "always"
+ }
+ },
+ "rank": "primary"
+ },
"nvvp9dec": {
"author": "Ericsson AB, http://www.ericsson.com, Seungha Yang <seungha.yang@navercorp.com>",
"description": "NVDEC video decoder",
],
"kind": "object"
},
+ "GstNvH265Dec": {
+ "hierarchy": [
+ "GstNvH265Dec",
+ "GstH265Decoder",
+ "GstVideoDecoder",
+ "GstElement",
+ "GstObject",
+ "GInitiallyUnowned",
+ "GObject"
+ ],
+ "kind": "object"
+ },
"GstNvPreset": {
"kind": "enum",
"values": [
GstVideoDecoderClass *decoder_class = GST_VIDEO_DECODER_CLASS (klass);
GstH264DecoderClass *h264decoder_class = GST_H264_DECODER_CLASS (klass);
+ /**
+ * GstNvH264Dec
+ *
+ * Since: 1.18
+ */
+
object_class->finalize = gst_nv_h264_decoder_finalize;
element_class->set_context = GST_DEBUG_FUNCPTR (gst_nv_h264_dec_set_context);
const GValue *value;
GstStructure *s;
+ /**
+ * element-nvh264sldec
+ *
+ * Since: 1.18
+ */
+
cdata = g_new0 (GstNvH264DecClassData, 1);
cdata->sink_caps = gst_caps_from_string ("video/x-h264, "
"stream-format= (string) { avc, avc3, byte-stream }, "
#define DEFAULT_BFRAMES 0
#define DEFAULT_B_ADAPT FALSE
+/* captured using RTX 2080 */
+#define DOCUMENTATION_SINK_CAPS_COMM \
+ "format = (string) { NV12, YV12, I420, BGRA, RGBA, Y444, VUYA }, " \
+ "width = (int) [ 145, 4096 ], " \
+ "height = (int) [ 49, 4096 ], " \
+ "framerate = " GST_VIDEO_FPS_RANGE ", " \
+ "interlace-mode = (string) { progressive } "
+
+#define DOCUMENTATION_SINK_CAPS \
+ "video/x-raw, " DOCUMENTATION_SINK_CAPS_COMM "; " \
+ "video/x-raw(memory:GLMemory), " DOCUMENTATION_SINK_CAPS_COMM
+
+#define DOCUMENTATION_SRC_CAPS \
+ "video/x-h264, " \
+ "width = (int) [ 145, 4096 ], " \
+ "height = (int) [ 49, 4096 ], " \
+ "framerate = " GST_VIDEO_FPS_RANGE ", " \
+ "stream-format = (string) byte-stream, " \
+ "alignment = (string) au, " \
+ "profile = (string) { main, high, high-4:4:4, baseline }"
+
static gboolean gst_nv_h264_enc_open (GstVideoEncoder * enc);
static gboolean gst_nv_h264_enc_close (GstVideoEncoder * enc);
static gboolean gst_nv_h264_enc_set_src_caps (GstNvBaseEnc * nvenc,
GstNvEncDeviceCaps *device_caps = &nvenc_class->device_caps;
GstNvH264EncClassData *cdata = (GstNvH264EncClassData *) data;
gchar *long_name;
+ GstPadTemplate *pad_templ;
+ GstCaps *doc_caps;
parent_class = g_type_class_peek_parent (klass);
nvenc_class->set_src_caps = gst_nv_h264_enc_set_src_caps;
nvenc_class->set_pic_params = gst_nv_h264_enc_set_pic_params;
+ /**
+ * GstNvH264Enc:aud:
+ *
+ * Use AU (Access Unit) delimiter
+ *
+ * Since: 1.18
+ */
g_object_class_install_property (gobject_class, PROP_AUD,
g_param_spec_boolean ("aud", "AUD",
"Use AU (Access Unit) delimiter", DEFAULT_AUD,
G_PARAM_STATIC_STRINGS));
if (device_caps->weighted_prediction) {
+ /**
+ * GstNvH264Enc:weighted-pred:
+ *
+ * Weighted Prediction
+ *
+ * Since: 1.18
+ */
g_object_class_install_property (gobject_class, PROP_WEIGHTED_PRED,
g_param_spec_boolean ("weighted-pred", "Weighted Pred",
- "Weighted Prediction "
- "(Exposed only if supported by device)", DEFAULT_WEIGHTED_PRED,
+ "Weighted Prediction", DEFAULT_WEIGHTED_PRED,
G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
- G_PARAM_STATIC_STRINGS));
+ GST_PARAM_CONDITIONALLY_AVAILABLE | G_PARAM_STATIC_STRINGS));
}
if (device_caps->custom_vbv_bufsize) {
+ /**
+ * GstNvH264Enc:vbv-buffer-size:
+ *
+ * VBV(HRD) Buffer Size in kbits (0 = NVENC default)
+ *
+ * Since: 1.18
+ */
g_object_class_install_property (gobject_class,
PROP_VBV_BUFFER_SIZE,
g_param_spec_uint ("vbv-buffer-size", "VBV Buffer Size",
- "VBV(HRD) Buffer Size in kbits (0 = NVENC default) "
- "(Exposed only if supported by device)", 0, G_MAXUINT,
- DEFAULT_VBV_BUFFER_SIZE,
+ "VBV(HRD) Buffer Size in kbits (0 = NVENC default)",
+ 0, G_MAXUINT, DEFAULT_VBV_BUFFER_SIZE,
G_PARAM_READWRITE | GST_PARAM_MUTABLE_READY |
- G_PARAM_STATIC_STRINGS));
+ GST_PARAM_CONDITIONALLY_AVAILABLE | G_PARAM_STATIC_STRINGS));
}
if (device_caps->lookahead) {
+ /**
+ * GstNvH264Enc:rc-lookahead:
+ *
+ * Number of frames for frame type lookahead
+ *
+ * Since: 1.18
+ */
g_object_class_install_property (gobject_class, PROP_RC_LOOKAHEAD,
g_param_spec_uint ("rc-lookahead", "Rate Control Lookahead",
- "Number of frames for frame type lookahead "
- "(Exposed only if supported by device)", 0, 32,
- DEFAULT_RC_LOOKAHEAD,
+ "Number of frames for frame type lookahead",
+ 0, 32, DEFAULT_RC_LOOKAHEAD,
G_PARAM_READWRITE | GST_PARAM_MUTABLE_READY |
- G_PARAM_STATIC_STRINGS));
+ GST_PARAM_CONDITIONALLY_AVAILABLE | G_PARAM_STATIC_STRINGS));
}
if (device_caps->temporal_aq) {
+ /**
+ * GstNvH264Enc:temporal-aq:
+ *
+ * Temporal Adaptive Quantization
+ *
+ * Since: 1.18
+ */
g_object_class_install_property (gobject_class, PROP_TEMPORAL_AQ,
g_param_spec_boolean ("temporal-aq", "Temporal AQ",
- "Temporal Adaptive Quantization "
- "(Exposed only if supported by device)", DEFAULT_TEMPORAL_AQ,
+ "Temporal Adaptive Quantization", DEFAULT_TEMPORAL_AQ,
G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
- G_PARAM_STATIC_STRINGS));
+ GST_PARAM_CONDITIONALLY_AVAILABLE | G_PARAM_STATIC_STRINGS));
}
if (device_caps->bframes > 0) {
+ /**
+ * GstNvH264Enc:bframes:
+ *
+ * Number of B-frames between I and P
+ *
+ * Since: 1.18
+ */
g_object_class_install_property (gobject_class, PROP_BFRAMES,
g_param_spec_uint ("bframes", "B-Frames",
- "Number of B-frames between I and P "
- "(Exposed only if supported by device)", 0, device_caps->bframes,
+ "Number of B-frames between I and P", 0, device_caps->bframes,
DEFAULT_BFRAMES,
G_PARAM_READWRITE | GST_PARAM_MUTABLE_READY |
- G_PARAM_STATIC_STRINGS));
-
+ GST_PARAM_CONDITIONALLY_AVAILABLE | G_PARAM_STATIC_STRINGS));
+
+ /**
+ * GstNvH264Enc:b-adapt:
+ *
+ * Enable adaptive B-frame insert when lookahead is enabled
+ *
+ * Since: 1.18
+ */
g_object_class_install_property (gobject_class, PROP_B_ADAPT,
g_param_spec_boolean ("b-adapt", "B Adapt",
- "Enable adaptive B-frame insert when lookahead is enabled "
- "(Exposed only if supported by device)",
+ "Enable adaptive B-frame insert when lookahead is enabled",
DEFAULT_B_ADAPT,
G_PARAM_READWRITE | GST_PARAM_MUTABLE_READY |
- G_PARAM_STATIC_STRINGS));
+ GST_PARAM_CONDITIONALLY_AVAILABLE | G_PARAM_STATIC_STRINGS));
}
if (cdata->is_default)
GST_DEBUG_CATEGORY_INIT (gst_nv_h264_enc_debug,
"nvh264enc", 0, "Nvidia H.264 encoder");
- 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));
+ pad_templ = gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS,
+ cdata->sink_caps);
+ doc_caps = gst_caps_from_string (DOCUMENTATION_SINK_CAPS);
+ gst_pad_template_set_documentation_caps (pad_templ, doc_caps);
+ gst_caps_unref (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);
+ doc_caps = gst_caps_from_string (DOCUMENTATION_SRC_CAPS);
+ gst_pad_template_set_documentation_caps (pad_templ, doc_caps);
+ gst_caps_unref (doc_caps);
+ gst_element_class_add_pad_template (element_class, pad_templ);
gst_caps_unref (cdata->sink_caps);
gst_caps_unref (cdata->src_caps);
GstVideoDecoderClass *decoder_class = GST_VIDEO_DECODER_CLASS (klass);
GstH265DecoderClass *h265decoder_class = GST_H265_DECODER_CLASS (klass);
+ /**
+ * GstNvH265Dec
+ *
+ * Since: 1.18
+ */
+
object_class->finalize = gst_nv_h265_decoder_finalize;
element_class->set_context = GST_DEBUG_FUNCPTR (gst_nv_h265_dec_set_context);
GValue value_list = G_VALUE_INIT;
GValue value = G_VALUE_INIT;
+ /**
+ * element-nvh265sldec
+ *
+ * Since: 1.18
+ */
+
cdata = g_new0 (GstNvH265DecClassData, 1);
cdata->sink_caps = gst_caps_copy (sink_caps);
#define DEFAULT_BFRAMES 0
#define DEFAULT_B_ADAPT FALSE
+/* captured using RTX 2080 */
+#define DOCUMENTATION_SINK_CAPS_COMM \
+ "format = (string) { NV12, P010_10LE, P016_LE, Y444, Y444_16LE, Y444_16LE }, " \
+ "width = (int) [ 144, 8192 ], " \
+ "height = (int) [ 144, 8192 ], " \
+ "framerate = " GST_VIDEO_FPS_RANGE
+
+#define DOCUMENTATION_SINK_CAPS \
+ "video/x-raw, " DOCUMENTATION_SINK_CAPS_COMM "; " \
+ "video/x-raw(memory:GLMemory), " DOCUMENTATION_SINK_CAPS_COMM
+
+#define DOCUMENTATION_SRC_CAPS \
+ "video/x-h265, " \
+ "width = (int) [ 144, 8192 ], " \
+ "height = (int) [ 144, 8192 ], " \
+ "stream-format = (string) byte-stream, " \
+ "alignment = (string) au, " \
+ "profile = (string) { main, main-10, main-12, main-444, main-444-10, main-444-12 }"
+
static gboolean gst_nv_h265_enc_open (GstVideoEncoder * enc);
static gboolean gst_nv_h265_enc_close (GstVideoEncoder * enc);
static gboolean gst_nv_h265_enc_stop (GstVideoEncoder * enc);
GstNvEncDeviceCaps *device_caps = &nvenc_class->device_caps;
GstNvH265EncClassData *cdata = (GstNvH265EncClassData *) data;
gchar *long_name;
+ GstPadTemplate *pad_templ;
+ GstCaps *doc_caps;
parent_class = g_type_class_peek_parent (klass);
nvenc_class->set_src_caps = gst_nv_h265_enc_set_src_caps;
nvenc_class->set_pic_params = gst_nv_h265_enc_set_pic_params;
+ /**
+ * GstNvH265Enc:aud:
+ *
+ * Use AU (Access Unit) delimiter
+ *
+ * Since: 1.18
+ */
g_object_class_install_property (gobject_class, PROP_AUD,
g_param_spec_boolean ("aud", "AUD",
"Use AU (Access Unit) delimiter", DEFAULT_AUD,
G_PARAM_STATIC_STRINGS));
if (device_caps->weighted_prediction) {
+ /**
+ * GstNvH265Enc:weighted-pred:
+ *
+ * Weighted Prediction
+ *
+ * Since: 1.18
+ */
g_object_class_install_property (gobject_class, PROP_WEIGHTED_PRED,
g_param_spec_boolean ("weighted-pred", "Weighted Pred",
- "Weighted Prediction "
- "(Exposed only if supported by device)", DEFAULT_WEIGHTED_PRED,
+ "Weighted Prediction", DEFAULT_WEIGHTED_PRED,
G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
- G_PARAM_STATIC_STRINGS));
+ GST_PARAM_CONDITIONALLY_AVAILABLE | G_PARAM_STATIC_STRINGS));
}
if (device_caps->custom_vbv_bufsize) {
+ /**
+ * GstNvH265Enc:vbv-buffer-size:
+ *
+ * VBV(HRD) Buffer Size in kbits (0 = NVENC default)
+ *
+ * Since: 1.18
+ */
g_object_class_install_property (gobject_class,
PROP_VBV_BUFFER_SIZE,
g_param_spec_uint ("vbv-buffer-size", "VBV Buffer Size",
- "VBV(HRD) Buffer Size in kbits (0 = NVENC default) "
- "(Exposed only if supported by device)", 0, G_MAXUINT,
- DEFAULT_VBV_BUFFER_SIZE,
+ "VBV(HRD) Buffer Size in kbits (0 = NVENC default)",
+ 0, G_MAXUINT, DEFAULT_VBV_BUFFER_SIZE,
G_PARAM_READWRITE | GST_PARAM_MUTABLE_READY |
- G_PARAM_STATIC_STRINGS));
+ GST_PARAM_CONDITIONALLY_AVAILABLE | G_PARAM_STATIC_STRINGS));
}
if (device_caps->lookahead) {
+ /**
+ * GstNvH265Enc:rc-lookahead:
+ *
+ * Number of frames for frame type lookahead
+ *
+ * Since: 1.18
+ */
g_object_class_install_property (gobject_class, PROP_RC_LOOKAHEAD,
g_param_spec_uint ("rc-lookahead", "Rate Control Lookahead",
- "Number of frames for frame type lookahead "
- "(Exposed only if supported by device)", 0, 32,
+ "Number of frames for frame type lookahead", 0, 32,
DEFAULT_RC_LOOKAHEAD,
G_PARAM_READWRITE | GST_PARAM_MUTABLE_READY |
- G_PARAM_STATIC_STRINGS));
+ GST_PARAM_CONDITIONALLY_AVAILABLE | G_PARAM_STATIC_STRINGS));
}
if (device_caps->temporal_aq) {
+ /**
+ * GstNvH265Enc:temporal-aq:
+ *
+ * Temporal Adaptive Quantization
+ *
+ * Since: 1.18
+ */
g_object_class_install_property (gobject_class, PROP_TEMPORAL_AQ,
g_param_spec_boolean ("temporal-aq", "Temporal AQ",
- "Temporal Adaptive Quantization "
- "(Exposed only if supported by device)", DEFAULT_TEMPORAL_AQ,
+ "Temporal Adaptive Quantization", DEFAULT_TEMPORAL_AQ,
G_PARAM_READWRITE | GST_PARAM_MUTABLE_PLAYING |
- G_PARAM_STATIC_STRINGS));
+ GST_PARAM_CONDITIONALLY_AVAILABLE | G_PARAM_STATIC_STRINGS));
}
if (device_caps->bframes > 0) {
+ /**
+ * GstNvH265Enc:bframes:
+ *
+ * Number of B-frames between I and P
+ *
+ * Since: 1.18
+ */
g_object_class_install_property (gobject_class, PROP_BFRAMES,
g_param_spec_uint ("bframes", "B-Frames",
- "Number of B-frames between I and P "
- "(Exposed only if supported by device)", 0, device_caps->bframes,
+ "Number of B-frames between I and P", 0, device_caps->bframes,
DEFAULT_BFRAMES,
G_PARAM_READWRITE | GST_PARAM_MUTABLE_READY |
- G_PARAM_STATIC_STRINGS));
-
+ GST_PARAM_CONDITIONALLY_AVAILABLE | G_PARAM_STATIC_STRINGS));
+
+ /**
+ * GstNvH265Enc:b-adapt:
+ *
+ * Enable adaptive B-frame insert when lookahead is enabled
+ *
+ * Since: 1.18
+ */
g_object_class_install_property (gobject_class, PROP_B_ADAPT,
g_param_spec_boolean ("b-adapt", "B Adapt",
- "Enable adaptive B-frame insert when lookahead is enabled "
- "(Exposed only if supported by device)",
+ "Enable adaptive B-frame insert when lookahead is enabled",
DEFAULT_B_ADAPT,
G_PARAM_READWRITE | GST_PARAM_MUTABLE_READY |
- G_PARAM_STATIC_STRINGS));
+ GST_PARAM_CONDITIONALLY_AVAILABLE | G_PARAM_STATIC_STRINGS));
}
if (cdata->is_default)
GST_DEBUG_CATEGORY_INIT (gst_nv_h265_enc_debug,
"nvh265enc", 0, "Nvidia HEVC encoder");
- 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));
+ pad_templ = gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS,
+ cdata->sink_caps);
+ doc_caps = gst_caps_from_string (DOCUMENTATION_SINK_CAPS);
+ gst_pad_template_set_documentation_caps (pad_templ, doc_caps);
+ gst_caps_unref (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);
+ doc_caps = gst_caps_from_string (DOCUMENTATION_SRC_CAPS);
+ gst_pad_template_set_documentation_caps (pad_templ, doc_caps);
+ gst_caps_unref (doc_caps);
+ gst_element_class_add_pad_template (element_class, pad_templ);
+
gst_caps_unref (cdata->sink_caps);
gst_caps_unref (cdata->src_caps);