mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-06-05 06:58:56 +00:00
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:
parent
da4b6f17cf
commit
a4fc1c5031
8 changed files with 119 additions and 36 deletions
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue