msdkenc: Add documented capabilities to expose "stable" caps

Although msdkenc supports dynamic caps, it still needs to expose
"stable" caps to users.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4177>
This commit is contained in:
Yinhang Liu 2023-03-06 19:45:06 +08:00 committed by GStreamer Marge Bot
parent da4b6f17cf
commit a4fc1c5031
8 changed files with 119 additions and 36 deletions

View file

@ -78,6 +78,17 @@ enum
#define PROP_B_PYRAMID_DEFAULT MFX_B_REF_UNKNOWN
#define PROP_P_PYRAMID_DEFAULT MFX_P_REF_DEFAULT
/* *INDENT-OFF* */
static const gchar *doc_sink_caps_str =
GST_VIDEO_CAPS_MAKE ("{ NV12, P010_10LE }") " ;"
GST_VIDEO_CAPS_MAKE_WITH_FEATURES ("memory:DMABuf",
"{ NV12, P010_10LE }") " ;"
GST_VIDEO_CAPS_MAKE_WITH_FEATURES ("memory:VAMemory", "{ NV12 }") " ;"
GST_VIDEO_CAPS_MAKE_WITH_FEATURES ("memory:D3D11Memory", "{ NV12 }");
/* *INDENT-ON* */
static const gchar *doc_src_caps_str = "video/x-av1";
static GstElementClass *parent_class = NULL;
static gboolean
@ -364,12 +375,8 @@ gst_msdkav1enc_class_init (gpointer klass, gpointer data)
"Haihao Xiang <haihao.xiang@intel.com>, "
"Mengkejiergeli Ba <mengkejiergeli.ba@intel.com>");
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));
gst_msdkcaps_pad_template_init (element_class,
cdata->sink_caps, cdata->src_caps, doc_sink_caps_str, doc_src_caps_str);
gst_caps_unref (cdata->sink_caps);
gst_caps_unref (cdata->src_caps);

View file

@ -1027,6 +1027,38 @@ failed:
#endif
static void
_pad_template_init (GstElementClass * klass,
const gchar * name_template, GstPadDirection direction,
GstCaps * caps, const gchar * doc_caps_str)
{
GstPadTemplate *pad_templ;
if (!caps)
return;
pad_templ = gst_pad_template_new (name_template,
direction, GST_PAD_ALWAYS, caps);
if (doc_caps_str) {
GstCaps *doc_caps = gst_caps_from_string (doc_caps_str);
gst_pad_template_set_documentation_caps (pad_templ, doc_caps);
gst_caps_unref (doc_caps);
}
gst_element_class_add_pad_template (klass, pad_templ);
}
void
gst_msdkcaps_pad_template_init (GstElementClass * klass,
GstCaps * sink_caps, GstCaps * src_caps,
const gchar * doc_sink_caps_str, const gchar * doc_src_caps_str)
{
_pad_template_init (klass,
"sink", GST_PAD_SINK, sink_caps, doc_sink_caps_str);
_pad_template_init (klass, "src", GST_PAD_SRC, src_caps, doc_src_caps_str);
}
gboolean
gst_msdkcaps_set_strings (GstCaps * caps,
const gchar * features, const char *field, const gchar * strings)

View file

@ -48,6 +48,11 @@ gst_msdkcaps_enc_create_caps (GstMsdkContext * context,
gpointer enc_description, guint codec_id,
GstCaps ** sink_caps, GstCaps ** src_caps);
void
gst_msdkcaps_pad_template_init (GstElementClass * klass,
GstCaps * sink_caps, GstCaps * src_caps,
const gchar * doc_sink_caps_str, const gchar * doc_src_caps_str);
gboolean
gst_msdkcaps_set_strings (GstCaps * caps,
const gchar * features, const char * field, const gchar * strings);

View file

@ -112,6 +112,17 @@ enum
#define PROP_INTRA_REFRESH_CYCLE_DIST_DEFAULT 0
#define PROP_DBLK_IDC_DEFAULT 0
/* *INDENT-OFF* */
static const gchar *doc_sink_caps_str =
GST_VIDEO_CAPS_MAKE ("{ NV12, YUY2, BGRA, VUYA }") " ;"
GST_VIDEO_CAPS_MAKE_WITH_FEATURES ("memory:DMABuf",
"{ NV12, YUY2, BGRA, VUYA }") " ;"
GST_VIDEO_CAPS_MAKE_WITH_FEATURES ("memory:VAMemory", "{ NV12 }") " ;"
GST_VIDEO_CAPS_MAKE_WITH_FEATURES ("memory:D3D11Memory", "{ NV12 }");
/* *INDENT-ON* */
static const gchar *doc_src_caps_str = "video/x-h264";
static GstElementClass *parent_class = NULL;
static GType
@ -871,12 +882,8 @@ gst_msdkh264enc_class_init (gpointer klass, gpointer data)
"H264 video encoder based on " MFX_API_SDK,
"Josep Torra <jtorra@oblong.com>");
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));
gst_msdkcaps_pad_template_init (element_class,
cdata->sink_caps, cdata->src_caps, doc_sink_caps_str, doc_src_caps_str);
gst_caps_unref (cdata->sink_caps);
gst_caps_unref (cdata->src_caps);

View file

@ -110,6 +110,21 @@ enum
#define PROP_INTRA_REFRESH_CYCLE_DIST_DEFAULT 0
#define PROP_DBLK_IDC_DEFAULT 0
/* *INDENT-OFF* */
static const gchar *doc_sink_caps_str =
GST_VIDEO_CAPS_MAKE (
"{ NV12, P010_10LE, YUY2, BGRA, VUYA, BGR10A2_LE, Y210, Y410, "
"P012_LE, Y212_LE }") " ;"
GST_VIDEO_CAPS_MAKE_WITH_FEATURES ("memory:DMABuf",
"{ NV12, P010_10LE, YUY2, BGRA, VUYA, BGR10A2_LE, Y210, Y410, "
"P012_LE, Y212_LE }") " ;"
GST_VIDEO_CAPS_MAKE_WITH_FEATURES ("memory:VAMemory", "{ NV12 }") " ;"
GST_VIDEO_CAPS_MAKE_WITH_FEATURES ("memory:D3D11Memory",
"{ NV12, P010_10LE }");
/* *INDENT-ON* */
static const gchar *doc_src_caps_str = "video/x-h265";
static GstElementClass *parent_class = NULL;
static void
@ -994,12 +1009,8 @@ gst_msdkh265enc_class_init (gpointer klass, gpointer data)
"H265 video encoder based on " MFX_API_SDK,
"Josep Torra <jtorra@oblong.com>");
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));
gst_msdkcaps_pad_template_init (element_class,
cdata->sink_caps, cdata->src_caps, doc_sink_caps_str, doc_src_caps_str);
gst_caps_unref (cdata->sink_caps);
gst_caps_unref (cdata->src_caps);

View file

@ -79,6 +79,17 @@ enum
#define DEFAULT_QUALITY 85
/* *INDENT-OFF* */
static const gchar *doc_sink_caps_str =
GST_VIDEO_CAPS_MAKE ("{ NV12, YUY2, BGRA }") " ;"
GST_VIDEO_CAPS_MAKE_WITH_FEATURES ("memory:DMABuf",
"{ NV12, YUY2, BGRA }") " ;"
GST_VIDEO_CAPS_MAKE_WITH_FEATURES ("memory:VAMemory", "{ NV12 }") " ;"
GST_VIDEO_CAPS_MAKE_WITH_FEATURES ("memory:D3D11Memory", "{ NV12 }");
/* *INDENT-ON* */
static const gchar *doc_src_caps_str = "image/jpeg";
static GstElementClass *parent_class = NULL;
static gboolean
@ -199,12 +210,8 @@ gst_msdkmjpegenc_class_init (gpointer klass, gpointer data)
"MJPEG video encoder based on " MFX_API_SDK,
"Scott D Phillips <scott.d.phillips@intel.com>");
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));
gst_msdkcaps_pad_template_init (element_class,
cdata->sink_caps, cdata->src_caps, doc_sink_caps_str, doc_src_caps_str);
gst_caps_unref (cdata->sink_caps);
gst_caps_unref (cdata->src_caps);

View file

@ -63,6 +63,16 @@ GST_DEBUG_CATEGORY_EXTERN (gst_msdkmpeg2enc_debug);
#define GST_IS_MSDKMPEG2ENC_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE((klass), G_TYPE_FROM_CLASS (klass)))
/* *INDENT-OFF* */
static const gchar *doc_sink_caps_str =
GST_VIDEO_CAPS_MAKE ("{ NV12 }") " ;"
GST_VIDEO_CAPS_MAKE_WITH_FEATURES ("memory:DMABuf", "{ NV12 }") " ;"
GST_VIDEO_CAPS_MAKE_WITH_FEATURES ("memory:VAMemory", "{ NV12 }") " ;"
GST_VIDEO_CAPS_MAKE_WITH_FEATURES ("memory:D3D11Memory", "{ NV12 }");
/* *INDENT-ON* */
static const gchar *doc_src_caps_str = "video/mpeg";
static GstElementClass *parent_class = NULL;
static gboolean
@ -216,12 +226,8 @@ gst_msdkmpeg2enc_class_init (gpointer klass, gpointer data)
"MPEG2 video encoder based on " MFX_API_SDK,
"Josep Torra <jtorra@oblong.com>");
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));
gst_msdkcaps_pad_template_init (element_class,
cdata->sink_caps, cdata->src_caps, doc_sink_caps_str, doc_src_caps_str);
gst_caps_unref (cdata->sink_caps);
gst_caps_unref (cdata->src_caps);

View file

@ -65,6 +65,18 @@ GST_DEBUG_CATEGORY_EXTERN (gst_msdkvp9enc_debug);
#define GST_IS_MSDKVP9ENC_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE((klass), G_TYPE_FROM_CLASS (klass)))
/* *INDENT-OFF* */
static const gchar *doc_sink_caps_str =
GST_VIDEO_CAPS_MAKE ("{ NV12, P010_10LE, VUYA, Y410 }") " ;"
GST_VIDEO_CAPS_MAKE_WITH_FEATURES ("memory:DMABuf",
"{ NV12, P010_10LE, VUYA, Y410 }") " ;"
GST_VIDEO_CAPS_MAKE_WITH_FEATURES ("memory:VAMemory", "{ NV12 }") " ;"
GST_VIDEO_CAPS_MAKE_WITH_FEATURES ("memory:D3D11Memory",
"{ NV12, P010_10LE }");
/* *INDENT-ON* */
static const gchar *doc_src_caps_str = "video/x-vp9";
static GstElementClass *parent_class = NULL;
static gboolean
@ -271,12 +283,8 @@ gst_msdkvp9enc_class_init (gpointer klass, gpointer data)
"VP9 video encoder based on " MFX_API_SDK,
"Haihao Xiang <haihao.xiang@intel.com>");
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));
gst_msdkcaps_pad_template_init (element_class,
cdata->sink_caps, cdata->src_caps, doc_sink_caps_str, doc_src_caps_str);
gst_caps_unref (cdata->sink_caps);
gst_caps_unref (cdata->src_caps);