Add GST_FD_MEMORY_FLAG_DONT_CLOSE to avoid closing the fd when the
memory is freed. When you can guarantee the lifetime of the fd is
longer than the memory, this can save a dup() call.
munmap ((void *) mem->data, gmem->maxsize);
}
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);
close (mem->fd);
g_mutex_clear (&mem->lock);
g_slice_free (GstFdMemory, mem);
* Return a %GstMemory that wraps a generic file descriptor.
*
* Returns: (transfer full): a GstMemory based on @allocator.
* 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
* The memory is only mmapped on gst_buffer_mmap() request.
*
* Since: 1.6
* keep it mapped until the memory is destroyed.
* @GST_FD_MEMORY_FLAG_MAP_PRIVATE: do a private mapping instead of
* the default shared mapping.
* 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.
*
*
* Various flags to control the operation of the fd backed memory.
*
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_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),