diff options
author | Edgard Lima <edgard.lima@indt.org.br> | 2007-11-15 12:22:10 +0000 |
---|---|---|
committer | Edgard Lima <edgard.lima@indt.org.br> | 2007-11-15 12:22:10 +0000 |
commit | 66ca1b2280a918d3bd7c7ce09ec22d485be34666 (patch) | |
tree | ae256a076c31d42542f63cd4656e1e137f77eadc /sys/v4l2/gstv4l2src.c | |
parent | 62d8456eb715a3cb849ca0f14d2182fe5229ddf4 (diff) |
Always copy buffers by default (handle safer with bugged drivers) and added a property to make it possible to use mma...
Original commit message from CVS:
Always copy buffers by default (handle safer with bugged drivers) and added a property to make it possible to use mmap effectively (no copy if possible) when application wants to. Fixes: #480557.
Diffstat (limited to 'sys/v4l2/gstv4l2src.c')
-rw-r--r-- | sys/v4l2/gstv4l2src.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/sys/v4l2/gstv4l2src.c b/sys/v4l2/gstv4l2src.c index 9fce1846..e8fd9c2d 100644 --- a/sys/v4l2/gstv4l2src.c +++ b/sys/v4l2/gstv4l2src.c @@ -68,11 +68,14 @@ GST_ELEMENT_DETAILS ("Video (video4linux2/raw) Source", GST_DEBUG_CATEGORY (v4l2src_debug); #define GST_CAT_DEFAULT v4l2src_debug +#define DEFAULT_PROP_ALWAYS_COPY TRUE + enum { PROP_0, V4L2_STD_OBJECT_PROPS, - PROP_QUEUE_SIZE + PROP_QUEUE_SIZE, + PROP_ALWAYS_COPY }; static const guint32 gst_v4l2_formats[] = { @@ -289,6 +292,10 @@ gst_v4l2src_class_init (GstV4l2SrcClass * klass) "Number of buffers to be enqueud in the driver", GST_V4L2_MIN_BUFFERS, GST_V4L2_MAX_BUFFERS, GST_V4L2_MIN_BUFFERS, G_PARAM_READWRITE)); + g_object_class_install_property (gobject_class, PROP_ALWAYS_COPY, + g_param_spec_boolean ("always-copy", "Always Copy", + "If the buffer will or not be used directly from mmap", + DEFAULT_PROP_ALWAYS_COPY, G_PARAM_READWRITE)); basesrc_class->get_caps = GST_DEBUG_FUNCPTR (gst_v4l2src_get_caps); basesrc_class->set_caps = GST_DEBUG_FUNCPTR (gst_v4l2src_set_caps); @@ -310,6 +317,8 @@ gst_v4l2src_init (GstV4l2Src * v4l2src, GstV4l2SrcClass * klass) /* number of buffers requested */ v4l2src->num_buffers = GST_V4L2_MIN_BUFFERS; + v4l2src->always_copy = DEFAULT_PROP_ALWAYS_COPY; + v4l2src->formats = NULL; v4l2src->is_capturing = FALSE; @@ -356,6 +365,9 @@ gst_v4l2src_set_property (GObject * object, case PROP_QUEUE_SIZE: v4l2src->num_buffers = g_value_get_uint (value); break; + case PROP_ALWAYS_COPY: + v4l2src->always_copy = g_value_get_boolean (value); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -376,6 +388,9 @@ gst_v4l2src_get_property (GObject * object, case PROP_QUEUE_SIZE: g_value_set_uint (value, v4l2src->num_buffers); break; + case PROP_ALWAYS_COPY: + g_value_set_boolean (value, v4l2src->always_copy); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; |