summaryrefslogtreecommitdiffstats
path: root/sys/v4l2/gstv4l2src.c
diff options
context:
space:
mode:
authorEdgard Lima <edgard.lima@indt.org.br>2007-11-15 12:22:10 +0000
committerEdgard Lima <edgard.lima@indt.org.br>2007-11-15 12:22:10 +0000
commit66ca1b2280a918d3bd7c7ce09ec22d485be34666 (patch)
treeae256a076c31d42542f63cd4656e1e137f77eadc /sys/v4l2/gstv4l2src.c
parent62d8456eb715a3cb849ca0f14d2182fe5229ddf4 (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.c17
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;