mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-26 03:31:05 +00:00
glupload: make raw manner only consider system memory
The current _raw_data_upload_transform_caps() only simply apply "memory:GLMemory" to all input caps to transform the output caps. This is not precise and may cause problem. For example, if the input caps include: video/x-raw(memory:DMABuf), width=(int)1920, height=(int)1080, \ interlace-mode=(string)progressive, multiview-mode=(string)mono, \ framerate=(fraction)30/1, drm-format=(string)NV12:0x0100000000000002 it will be changed as video/x-raw(memory:GLMemory), width=(int)1920, height=(int)1080, \ interlace-mode=(string)progressive, multiview-mode=(string)mono, \ framerate=(fraction)30/1, drm-format=(string)NV12:0x0100000000000002 For GLMemory kind caps, no drm-format should appear. So we should let it only transforms which it can recognize. We also should recognize the system memory caps in _accept() early, if the input is not system memory, we just return early. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/3524>
This commit is contained in:
parent
cae46d36b5
commit
fe07763fd8
1 changed files with 22 additions and 2 deletions
|
@ -2083,11 +2083,21 @@ _raw_data_upload_transform_caps (gpointer impl, GstGLContext * context,
|
|||
|
||||
if (direction == GST_PAD_SINK) {
|
||||
GstGLTextureTarget target_mask = 0;
|
||||
GstCapsFeatures *filter_features;
|
||||
GstCaps *tmp;
|
||||
|
||||
ret =
|
||||
_set_caps_features_with_passthrough (caps,
|
||||
filter_features =
|
||||
gst_caps_features_from_string (GST_CAPS_FEATURE_MEMORY_SYSTEM_MEMORY);
|
||||
if (!_filter_caps_with_features (caps, filter_features, &tmp)) {
|
||||
gst_caps_features_free (filter_features);
|
||||
gst_caps_features_free (passthrough);
|
||||
return NULL;
|
||||
}
|
||||
gst_caps_features_free (filter_features);
|
||||
|
||||
ret = _set_caps_features_with_passthrough (tmp,
|
||||
GST_CAPS_FEATURE_MEMORY_GL_MEMORY, passthrough);
|
||||
gst_caps_unref (tmp);
|
||||
|
||||
target_mask |= 1 << GST_GL_TEXTURE_TARGET_2D;
|
||||
target_mask |= 1 << GST_GL_TEXTURE_TARGET_RECTANGLE;
|
||||
|
@ -2121,6 +2131,16 @@ _raw_data_upload_accept (gpointer impl, GstBuffer * buffer, GstCaps * in_caps,
|
|||
struct RawUpload *raw = impl;
|
||||
GstCapsFeatures *features;
|
||||
|
||||
features =
|
||||
gst_caps_features_from_string (GST_CAPS_FEATURE_MEMORY_SYSTEM_MEMORY);
|
||||
/* Also consider the omited system memory feature cases, such as
|
||||
video/x-raw(meta:GstVideoOverlayComposition) */
|
||||
if (!_filter_caps_with_features (in_caps, features, NULL)) {
|
||||
gst_caps_features_free (features);
|
||||
return FALSE;
|
||||
}
|
||||
gst_caps_features_free (features);
|
||||
|
||||
features = gst_caps_get_features (out_caps, 0);
|
||||
if (!gst_caps_features_contains (features, GST_CAPS_FEATURE_MEMORY_GL_MEMORY))
|
||||
return FALSE;
|
||||
|
|
Loading…
Reference in a new issue