From 5716ee3513fe71ff83eff24c24536cbaa4d7e26c Mon Sep 17 00:00:00 2001 From: Haihua Hu Date: Tue, 13 Jun 2023 10:30:16 +0800 Subject: [PATCH] glfilter: add parent meta to output buffer for input buffer glfilter will unref input buffer after _transform() call immidiately, but gpu may still reading input buffer for rendering because gl api is executed async. Need hold reference for input buffer by adding parent meta to output buffer. Part-of: --- .../gst-plugins-base/gst-libs/gst/gl/gstglfilter.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/subprojects/gst-plugins-base/gst-libs/gst/gl/gstglfilter.c b/subprojects/gst-plugins-base/gst-libs/gst/gl/gstglfilter.c index 1e2d092163..a45664147f 100644 --- a/subprojects/gst-plugins-base/gst-libs/gst/gl/gstglfilter.c +++ b/subprojects/gst-plugins-base/gst-libs/gst/gl/gstglfilter.c @@ -1033,6 +1033,14 @@ gst_gl_filter_transform (GstBaseTransform * bt, GstBuffer * inbuf, if (out_sync_meta) gst_gl_sync_meta_set_sync_point (out_sync_meta, context); + /* since gl api is async operation, when return from transform() + * function, basetransform will unref input buffer immidiately, + * but gpu may still reading input buffer for rendering. Add parent + * buffer meta to hold one reference of inbuf, this can avoid this + * buffer sync problem. + */ + gst_buffer_add_parent_buffer_meta (outbuf, inbuf); + return ret ? GST_FLOW_OK : GST_FLOW_ERROR; }