diff --git a/sys/v4l2/gstv4l2bufferpool.c b/sys/v4l2/gstv4l2bufferpool.c index 2019072e7d..2ea9eb58c2 100644 --- a/sys/v4l2/gstv4l2bufferpool.c +++ b/sys/v4l2/gstv4l2bufferpool.c @@ -517,6 +517,8 @@ gst_v4l2_buffer_pool_set_config (GstBufferPool * bpool, GstStructure * config) gst_buffer_pool_config_set_params (config, caps, size, min_buffers, max_buffers); + gst_buffer_pool_config_set_allocator (config, pool->allocator, ¶ms); + /* keep a GstVideoInfo with defaults for the when we need to copy */ gst_video_info_from_caps (&pool->caps_info, caps); diff --git a/sys/v4l2/gstv4l2object.c b/sys/v4l2/gstv4l2object.c index d70b53d6f4..974624335a 100644 --- a/sys/v4l2/gstv4l2object.c +++ b/sys/v4l2/gstv4l2object.c @@ -2362,8 +2362,12 @@ gst_v4l2_object_setup_pool (GstV4l2Object * v4l2object, GstCaps * caps) goto method_not_supported; if (v4l2object->vcap.capabilities & V4L2_CAP_STREAMING) { - if (v4l2object->req_mode == GST_V4L2_IO_AUTO) - mode = GST_V4L2_IO_MMAP; + if (v4l2object->req_mode == GST_V4L2_IO_AUTO) { + if (GST_V4L2_OBJECT_CAN_REQUEST (v4l2object, DMABUF)) + mode = GST_V4L2_IO_DMABUF; + else + mode = GST_V4L2_IO_MMAP; + } } else if (v4l2object->req_mode == GST_V4L2_IO_MMAP) goto method_not_supported;