diff --git a/gst-libs/gst/allocators/gstfdmemory.c b/gst-libs/gst/allocators/gstfdmemory.c index 312a3d4746..a15859a8a5 100644 --- a/gst-libs/gst/allocators/gstfdmemory.c +++ b/gst-libs/gst/allocators/gstfdmemory.c @@ -65,7 +65,8 @@ gst_fd_mem_free (GstAllocator * allocator, GstMemory * gmem) munmap ((void *) mem->data, gmem->maxsize); } - if (mem->fd >= 0 && gmem->parent == NULL) + if (mem->fd >= 0 && gmem->parent == NULL + && !(mem->flags & GST_FD_MEMORY_FLAG_DONT_CLOSE)) close (mem->fd); g_mutex_clear (&mem->lock); g_slice_free (GstFdMemory, mem); @@ -245,7 +246,8 @@ gst_fd_allocator_new (void) * Return a %GstMemory that wraps a generic file descriptor. * * Returns: (transfer full): a GstMemory based on @allocator. - * When the buffer will be released the allocator will close the @fd. + * When the buffer will be released the allocator will close the @fd unless + * the %GST_FD_MEMORY_FLAG_DONT_CLOSE flag is specified. * The memory is only mmapped on gst_buffer_mmap() request. * * Since: 1.6 diff --git a/gst-libs/gst/allocators/gstfdmemory.h b/gst-libs/gst/allocators/gstfdmemory.h index 75efae20a2..40c90d0bd0 100644 --- a/gst-libs/gst/allocators/gstfdmemory.h +++ b/gst-libs/gst/allocators/gstfdmemory.h @@ -45,6 +45,8 @@ typedef struct _GstFdAllocatorClass GstFdAllocatorClass; * keep it mapped until the memory is destroyed. * @GST_FD_MEMORY_FLAG_MAP_PRIVATE: do a private mapping instead of * the default shared mapping. + * @GST_FD_MEMORY_FLAG_DONT_CLOSE: don't close the file descriptor when + * the memory is freed. Since: 1.10. * * Various flags to control the operation of the fd backed memory. * @@ -54,6 +56,7 @@ typedef enum { GST_FD_MEMORY_FLAG_NONE = 0, GST_FD_MEMORY_FLAG_KEEP_MAPPED = (1 << 0), GST_FD_MEMORY_FLAG_MAP_PRIVATE = (1 << 1), + GST_FD_MEMORY_FLAG_DONT_CLOSE = (1 << 2), } GstFdMemoryFlags; /**