msdkdec: add d3d11 caps for srcpad

Set decoder srcpad with D3D11Memory.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4088>
This commit is contained in:
Tong Wu 2022-10-18 18:46:52 +08:00 committed by GStreamer Marge Bot
parent a11f811155
commit 2b9cda928b
6 changed files with 58 additions and 5 deletions

View file

@ -61,7 +61,8 @@ GST_DEBUG_CATEGORY_EXTERN (gst_msdkav1dec_debug);
#define VA_SRC_CAPS_STR \
";" GST_MSDK_CAPS_MAKE_WITH_VA_FEATURE ("{ NV12 }")
#else
#define VA_SRC_CAPS_STR ""
#define D3D11_SRC_CAPS_STR \
";" GST_MSDK_CAPS_MAKE_WITH_D3D11_FEATURE ("{ NV12 }")
#endif
static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
@ -70,11 +71,19 @@ static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
GST_STATIC_CAPS ("video/x-av1")
);
#ifndef _WIN32
static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
GST_STATIC_CAPS (GST_MSDK_CAPS_STR (COMMON_FORMAT, COMMON_FORMAT)
VA_SRC_CAPS_STR));
#else
static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
GST_STATIC_CAPS (GST_MSDK_CAPS_STR (COMMON_FORMAT, COMMON_FORMAT)
D3D11_SRC_CAPS_STR));
#endif
#define gst_msdkav1dec_parent_class parent_class
G_DEFINE_TYPE (GstMsdkAV1Dec, gst_msdkav1dec, GST_TYPE_MSDKDEC);

View file

@ -44,6 +44,8 @@
#ifndef _WIN32
#include <gst/va/gstvaallocator.h>
#else
#include <gst/d3d11/gstd3d11.h>
#endif
GST_DEBUG_CATEGORY_EXTERN (gst_msdkdec_debug);
@ -750,6 +752,12 @@ gst_msdkdec_set_src_caps (GstMsdkDec * thiz, gboolean need_allocation)
gst_caps_set_features (output_state->caps, 0,
gst_caps_features_new (GST_CAPS_FEATURE_MEMORY_DMABUF, NULL));
}
#else
if (pad_accept_memory (thiz, GST_CAPS_FEATURE_MEMORY_D3D11_MEMORY,
output_state->caps)) {
gst_caps_set_features (output_state->caps, 0,
gst_caps_features_new (GST_CAPS_FEATURE_MEMORY_D3D11_MEMORY, NULL));
}
#endif
if (need_allocation) {

View file

@ -60,7 +60,8 @@ GST_DEBUG_CATEGORY_EXTERN (gst_msdkh264dec_debug);
#define VA_SRC_CAPS_STR \
"; " GST_MSDK_CAPS_MAKE_WITH_VA_FEATURE ("{ NV12 }")
#else
#define VA_SRC_CAPS_STR ""
#define D3D11_SRC_CAPS_STR \
";" GST_MSDK_CAPS_MAKE_WITH_D3D11_FEATURE ("{ NV12 }")
#endif
static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
@ -72,11 +73,19 @@ static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
"profile = (string) { high, progressive-high, constrained-high, main, baseline, constrained-baseline }")
);
#ifndef _WIN32
static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
GST_STATIC_CAPS (GST_MSDK_CAPS_STR (COMMON_FORMAT, COMMON_FORMAT)
VA_SRC_CAPS_STR));
#else
static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
GST_STATIC_CAPS (GST_MSDK_CAPS_STR (COMMON_FORMAT, COMMON_FORMAT)
D3D11_SRC_CAPS_STR));
#endif
#define gst_msdkh264dec_parent_class parent_class
G_DEFINE_TYPE (GstMsdkH264Dec, gst_msdkh264dec, GST_TYPE_MSDKDEC);

View file

@ -62,7 +62,8 @@ GST_DEBUG_CATEGORY_EXTERN (gst_msdkh265dec_debug);
#define VA_SRC_CAPS_STR \
"; " GST_MSDK_CAPS_MAKE_WITH_VA_FEATURE ("{ NV12 }")
#else
#define VA_SRC_CAPS_STR ""
#define D3D11_SRC_CAPS_STR \
";" GST_MSDK_CAPS_MAKE_WITH_D3D11_FEATURE ("{ NV12 }")
#endif
/* TODO: update both sink and src dynamically */
@ -74,11 +75,19 @@ static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
"stream-format = (string) byte-stream , alignment = (string) au ")
);
#ifndef _WIN32
static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
GST_STATIC_CAPS (GST_MSDK_CAPS_STR (COMMON_FORMAT, COMMON_FORMAT)
VA_SRC_CAPS_STR));
#else
static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
GST_STATIC_CAPS (GST_MSDK_CAPS_STR (COMMON_FORMAT, COMMON_FORMAT)
D3D11_SRC_CAPS_STR));
#endif
#define gst_msdkh265dec_parent_class parent_class
G_DEFINE_TYPE (GstMsdkH265Dec, gst_msdkh265dec, GST_TYPE_MSDKDEC);

View file

@ -71,14 +71,23 @@ static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
#define VA_SRC_CAPS_STR \
"; " GST_MSDK_CAPS_MAKE_WITH_VA_FEATURE ("{ NV12 }")
#else
#define VA_SRC_CAPS_STR ""
#define D3D11_SRC_CAPS_STR \
"; " GST_MSDK_CAPS_MAKE_WITH_D3D11_FEATURE ("{ NV12 }")
#endif
#ifndef _WIN32
static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
GST_STATIC_CAPS (GST_MSDK_CAPS_STR ("{ NV12, YUY2 }", "{ NV12, YUY2 }")
VA_SRC_CAPS_STR));
#else
static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
GST_STATIC_CAPS (GST_MSDK_CAPS_STR ("{ NV12, YUY2 }", "{ NV12, YUY2 }")
D3D11_SRC_CAPS_STR));
#endif
#define gst_msdkmjpegdec_parent_class parent_class
G_DEFINE_TYPE (GstMsdkMJPEGDec, gst_msdkmjpegdec, GST_TYPE_MSDKDEC);

View file

@ -64,7 +64,8 @@ GST_DEBUG_CATEGORY_EXTERN (gst_msdkvp9dec_debug);
#define VA_SRC_CAPS_STR \
"; " GST_MSDK_CAPS_MAKE_WITH_VA_FEATURE (SUPPORTED_VA_FORMAT)
#else
#define VA_SRC_CAPS_STR ""
#define D3D11_SRC_CAPS_STR \
"; " GST_MSDK_CAPS_MAKE_WITH_D3D11_FEATURE ("{ NV12 }")
#endif
static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
@ -73,11 +74,19 @@ static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink",
GST_STATIC_CAPS ("video/x-vp9")
);
#ifndef _WIN32
static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
GST_STATIC_CAPS (GST_MSDK_CAPS_STR (COMMON_FORMAT, COMMON_FORMAT)
VA_SRC_CAPS_STR));
#else
static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src",
GST_PAD_SRC,
GST_PAD_ALWAYS,
GST_STATIC_CAPS (GST_MSDK_CAPS_STR (COMMON_FORMAT, COMMON_FORMAT)
D3D11_SRC_CAPS_STR));
#endif
#define gst_msdkvp9dec_parent_class parent_class
G_DEFINE_TYPE (GstMsdkVP9Dec, gst_msdkvp9dec, GST_TYPE_MSDKDEC);