From c3438b5a0fde3f57b7c0e59243f1cbb8df623c91 Mon Sep 17 00:00:00 2001 From: Hyunjun Ko Date: Fri, 30 Mar 2018 11:03:00 -0800 Subject: [PATCH] msdk: generalize the parameter of msdk video memory functions There needs to be generalized for the parameter from GstVideoMsdkVideoMemory to GstMemory. Thus we can call these functions if using DMABuf memory. https://bugzilla.gnome.org/show_bug.cgi?id=793707 --- sys/msdk/gstmsdkbufferpool.c | 7 +++---- sys/msdk/gstmsdkvideomemory.c | 34 ++++++++++++++++++++++------------ sys/msdk/gstmsdkvideomemory.h | 4 ++-- 3 files changed, 27 insertions(+), 18 deletions(-) diff --git a/sys/msdk/gstmsdkbufferpool.c b/sys/msdk/gstmsdkbufferpool.c index b42d021..8bb9cf9 100644 --- a/sys/msdk/gstmsdkbufferpool.c +++ b/sys/msdk/gstmsdkbufferpool.c @@ -253,8 +253,8 @@ gst_msdk_buffer_pool_acquire_buffer (GstBufferPool * pool, surface = gst_msdk_get_surface_from_buffer (buf); if (!surface || surface->Data.Locked > 0) { - if (!gst_msdk_video_memory_get_surface_available (GST_MSDK_VIDEO_MEMORY_CAST - (gst_buffer_peek_memory (buf, 0)))) { + if (!gst_msdk_video_memory_get_surface_available (gst_buffer_peek_memory + (buf, 0))) { GST_WARNING_OBJECT (pool, "failed to get new surface available"); return GST_FLOW_ERROR; } @@ -278,8 +278,7 @@ gst_msdk_buffer_pool_release_buffer (GstBufferPool * pool, GstBuffer * buf) if (!surface) goto done; - gst_msdk_video_memory_release_surface (GST_MSDK_VIDEO_MEMORY_CAST - (gst_buffer_peek_memory (buf, 0))); + gst_msdk_video_memory_release_surface (gst_buffer_peek_memory (buf, 0)); done: return GST_BUFFER_POOL_CLASS (parent_class)->release_buffer (pool, buf); diff --git a/sys/msdk/gstmsdkvideomemory.c b/sys/msdk/gstmsdkvideomemory.c index ced7c96..8f56dda 100644 --- a/sys/msdk/gstmsdkvideomemory.c +++ b/sys/msdk/gstmsdkvideomemory.c @@ -61,13 +61,18 @@ gst_msdk_video_allocator_get_surface (GstAllocator * allocator) } gboolean -gst_msdk_video_memory_get_surface_available (GstMsdkVideoMemory * mem) +gst_msdk_video_memory_get_surface_available (GstMemory * mem) { GstAllocator *allocator; + GstMsdkVideoMemory *msdk_mem; - allocator = GST_MEMORY_CAST (mem)->allocator; - mem->surface = gst_msdk_video_allocator_get_surface (allocator); - return mem->surface ? TRUE : FALSE; + g_return_val_if_fail (mem, FALSE); + g_return_val_if_fail (GST_IS_MSDK_VIDEO_MEMORY (mem), FALSE); + + msdk_mem = GST_MSDK_VIDEO_MEMORY_CAST (mem); + allocator = mem->allocator; + msdk_mem->surface = gst_msdk_video_allocator_get_surface (allocator); + return msdk_mem->surface ? TRUE : FALSE; } /* @@ -76,23 +81,28 @@ gst_msdk_video_memory_get_surface_available (GstMsdkVideoMemory * mem) * Otherwise, we put the surface to the available list. */ void -gst_msdk_video_memory_release_surface (GstMsdkVideoMemory * mem) +gst_msdk_video_memory_release_surface (GstMemory * mem) { GstMsdkVideoAllocator *msdk_video_allocator; + GstMsdkVideoMemory *msdk_mem; - msdk_video_allocator = - GST_MSDK_VIDEO_ALLOCATOR_CAST (GST_MEMORY_CAST (mem)->allocator); - if (!mem->surface) + g_return_if_fail (mem); + g_return_if_fail (GST_IS_MSDK_VIDEO_MEMORY (mem)); + + msdk_mem = GST_MSDK_VIDEO_MEMORY_CAST (mem); + msdk_video_allocator = GST_MSDK_VIDEO_ALLOCATOR_CAST (mem->allocator); + + if (!msdk_mem->surface) return; - if (mem->surface->Data.Locked > 0) + if (msdk_mem->surface->Data.Locked > 0) gst_msdk_context_put_surface_locked (msdk_video_allocator->context, - msdk_video_allocator->alloc_response, mem->surface); + msdk_video_allocator->alloc_response, msdk_mem->surface); else gst_msdk_context_put_surface_available (msdk_video_allocator->context, - msdk_video_allocator->alloc_response, mem->surface); + msdk_video_allocator->alloc_response, msdk_mem->surface); - mem->surface = NULL; + msdk_mem->surface = NULL; return; } diff --git a/sys/msdk/gstmsdkvideomemory.h b/sys/msdk/gstmsdkvideomemory.h index 554b4a4..4e7941a 100644 --- a/sys/msdk/gstmsdkvideomemory.h +++ b/sys/msdk/gstmsdkvideomemory.h @@ -73,10 +73,10 @@ GstMemory * gst_msdk_video_memory_new (GstAllocator * allocator); gboolean -gst_msdk_video_memory_get_surface_available (GstMsdkVideoMemory * mem); +gst_msdk_video_memory_get_surface_available (GstMemory * mem); void -gst_msdk_video_memory_release_surface (GstMsdkVideoMemory * mem); +gst_msdk_video_memory_release_surface (GstMemory * mem); gboolean gst_video_meta_map_msdk_memory (GstVideoMeta * meta, guint plane, -- 2.7.4