mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-29 21:21:12 +00:00
video: convertframe: Add support for d3d12 conversion
Use d3d12convert in case of d3d12 memory Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7095>
This commit is contained in:
parent
76fd732d42
commit
fca7e5aa23
1 changed files with 20 additions and 6 deletions
|
@ -138,7 +138,7 @@ fail:
|
||||||
static GstElement *
|
static GstElement *
|
||||||
build_convert_frame_pipeline_d3d11 (GstElement ** src_element,
|
build_convert_frame_pipeline_d3d11 (GstElement ** src_element,
|
||||||
GstElement ** sink_element, GstCaps * from_caps, GstCaps * to_caps,
|
GstElement ** sink_element, GstCaps * from_caps, GstCaps * to_caps,
|
||||||
GError ** err)
|
gboolean is_d3d12, GError ** err)
|
||||||
{
|
{
|
||||||
GstElement *pipeline = NULL;
|
GstElement *pipeline = NULL;
|
||||||
GstElement *appsrc = NULL;
|
GstElement *appsrc = NULL;
|
||||||
|
@ -148,10 +148,17 @@ build_convert_frame_pipeline_d3d11 (GstElement ** src_element,
|
||||||
GstElement *enc = NULL;
|
GstElement *enc = NULL;
|
||||||
GstElement *appsink = NULL;
|
GstElement *appsink = NULL;
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
|
const gchar *d3d_conv_name = "d3d11convert";
|
||||||
|
const gchar *d3d_download_name = "d3d11download";
|
||||||
|
|
||||||
|
if (is_d3d12) {
|
||||||
|
d3d_conv_name = "d3d12convert";
|
||||||
|
d3d_download_name = "d3d12download";
|
||||||
|
}
|
||||||
|
|
||||||
if (!create_element ("appsrc", &appsrc, &error) ||
|
if (!create_element ("appsrc", &appsrc, &error) ||
|
||||||
!create_element ("d3d11convert", &d3d11_convert, &error) ||
|
!create_element (d3d_conv_name, &d3d11_convert, &error) ||
|
||||||
!create_element ("d3d11download", &d3d11_download, &error) ||
|
!create_element (d3d_download_name, &d3d11_download, &error) ||
|
||||||
!create_element ("videoconvert", &convert, &error) ||
|
!create_element ("videoconvert", &convert, &error) ||
|
||||||
!create_element ("appsink", &appsink, &error)) {
|
!create_element ("appsink", &appsink, &error)) {
|
||||||
GST_ERROR ("Could not create element");
|
GST_ERROR ("Could not create element");
|
||||||
|
@ -224,9 +231,16 @@ build_convert_frame_pipeline (GstElement ** src_element,
|
||||||
GstCapsFeatures *features;
|
GstCapsFeatures *features;
|
||||||
|
|
||||||
features = gst_caps_get_features (from_caps, 0);
|
features = gst_caps_get_features (from_caps, 0);
|
||||||
if (features && gst_caps_features_contains (features, "memory:D3D11Memory")) {
|
if (features && !gst_caps_features_is_any (features)) {
|
||||||
|
gboolean is_d3d11 =
|
||||||
|
gst_caps_features_contains (features, "memory:D3D11Memory");
|
||||||
|
gboolean is_d3d12 =
|
||||||
|
gst_caps_features_contains (features, "memory:D3D12Memory");
|
||||||
|
|
||||||
|
if (is_d3d11 || is_d3d12) {
|
||||||
return build_convert_frame_pipeline_d3d11 (src_element, sink_element,
|
return build_convert_frame_pipeline_d3d11 (src_element, sink_element,
|
||||||
from_caps, to_caps, err);
|
from_caps, to_caps, is_d3d12, err);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#ifdef HAVE_GL
|
#ifdef HAVE_GL
|
||||||
if (features &&
|
if (features &&
|
||||||
|
|
Loading…
Reference in a new issue