mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-03-01 17:31:10 +00:00
va: vpp: Make the global lock only to DMA buffer's import.
The normal gst_va_buffer_get_surface does not need a global lock. Too big lock may make the performance lower. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2009>
This commit is contained in:
parent
03847b65ca
commit
188e01ca44
1 changed files with 9 additions and 6 deletions
|
@ -879,7 +879,7 @@ _get_plane_data_size (GstVideoInfo * info, guint plane)
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
_try_import_dmabuf (GstVaVpp * self, GstBuffer * inbuf)
|
_try_import_dmabuf_unlocked (GstVaVpp * self, GstBuffer * inbuf)
|
||||||
{
|
{
|
||||||
GstVideoMeta *meta;
|
GstVideoMeta *meta;
|
||||||
GstVideoInfo in_info = self->in_info;
|
GstVideoInfo in_info = self->in_info;
|
||||||
|
@ -982,15 +982,20 @@ _get_sinkpad_pool (GstVaVpp * self)
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
_try_import_buffer_unlocked (GstVaVpp * self, GstBuffer * inbuf)
|
_try_import_buffer (GstVaVpp * self, GstBuffer * inbuf)
|
||||||
{
|
{
|
||||||
VASurfaceID surface;
|
VASurfaceID surface;
|
||||||
|
gboolean ret;
|
||||||
|
|
||||||
surface = gst_va_buffer_get_surface (inbuf);
|
surface = gst_va_buffer_get_surface (inbuf);
|
||||||
if (surface != VA_INVALID_ID)
|
if (surface != VA_INVALID_ID)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
return _try_import_dmabuf (self, inbuf);
|
g_rec_mutex_lock (&GST_VA_SHARED_LOCK);
|
||||||
|
ret = _try_import_dmabuf_unlocked (self, inbuf);
|
||||||
|
g_rec_mutex_unlock (&GST_VA_SHARED_LOCK);
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static GstFlowReturn
|
static GstFlowReturn
|
||||||
|
@ -1003,9 +1008,7 @@ gst_va_vpp_import_input_buffer (GstVaVpp * self, GstBuffer * inbuf,
|
||||||
GstVideoFrame in_frame, out_frame;
|
GstVideoFrame in_frame, out_frame;
|
||||||
gboolean imported, copied;
|
gboolean imported, copied;
|
||||||
|
|
||||||
g_rec_mutex_lock (&GST_VA_SHARED_LOCK);
|
imported = _try_import_buffer (self, inbuf);
|
||||||
imported = _try_import_buffer_unlocked (self, inbuf);
|
|
||||||
g_rec_mutex_unlock (&GST_VA_SHARED_LOCK);
|
|
||||||
if (imported) {
|
if (imported) {
|
||||||
*buf = gst_buffer_ref (inbuf);
|
*buf = gst_buffer_ref (inbuf);
|
||||||
return GST_FLOW_OK;
|
return GST_FLOW_OK;
|
||||||
|
|
Loading…
Reference in a new issue