From c9c9cdd7e306f4cf1a405d20cade65d0d83d1cb6 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Tue, 12 Jul 2005 17:14:33 +0000 Subject: [PATCH] sys/v4l/gstv4lsrc.c (gst_v4lsrc_get_property) (gst_v4lsrc_set_property, gst_v4lsrc_class_init, gst_v4lsrc_init) Original commit message from CVS: 2005-07-12 Andy Wingo * sys/v4l/gstv4lsrc.c (gst_v4lsrc_get_property) (gst_v4lsrc_set_property, gst_v4lsrc_class_init, gst_v4lsrc_init) (gst_v4lsrc_create): Re-add the copy-mode property, default to TRUE to avoid deadlocks if an element holds on to our buffers. --- ChangeLog | 7 +++++++ docs/libs/tmpl/gstaudio.sgml | 3 +++ docs/libs/tmpl/gstcolorbalance.sgml | 3 +++ docs/libs/tmpl/gstgconf.sgml | 3 +++ docs/libs/tmpl/gstmixer.sgml | 3 +++ docs/libs/tmpl/gstringbuffer.sgml | 3 +++ docs/libs/tmpl/gsttuner.sgml | 3 +++ sys/v4l/gstv4lsrc.c | 22 +++++++++++++++++----- sys/v4l/gstv4lsrc.h | 1 + 9 files changed, 43 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8f36696cba..c8f60298ff 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2005-07-12 Andy Wingo + + * sys/v4l/gstv4lsrc.c (gst_v4lsrc_get_property) + (gst_v4lsrc_set_property, gst_v4lsrc_class_init, gst_v4lsrc_init) + (gst_v4lsrc_create): Re-add the copy-mode property, default to + TRUE to avoid deadlocks if an element holds on to our buffers. + 2005-07-11 Thomas Vander Stichele * gst/sine/gstsinesrc.c: (gst_sinesrc_class_init), diff --git a/docs/libs/tmpl/gstaudio.sgml b/docs/libs/tmpl/gstaudio.sgml index f6ee50a064..4b91883e4e 100644 --- a/docs/libs/tmpl/gstaudio.sgml +++ b/docs/libs/tmpl/gstaudio.sgml @@ -14,6 +14,9 @@ a support library for audio elements + + + diff --git a/docs/libs/tmpl/gstcolorbalance.sgml b/docs/libs/tmpl/gstcolorbalance.sgml index 5953b698ac..59fb98aa53 100644 --- a/docs/libs/tmpl/gstcolorbalance.sgml +++ b/docs/libs/tmpl/gstcolorbalance.sgml @@ -14,6 +14,9 @@ interface for elements that provide color balance operations + + + diff --git a/docs/libs/tmpl/gstgconf.sgml b/docs/libs/tmpl/gstgconf.sgml index 36865fbf3b..e3e6b7ccc7 100644 --- a/docs/libs/tmpl/gstgconf.sgml +++ b/docs/libs/tmpl/gstgconf.sgml @@ -14,6 +14,9 @@ gconf default elements support + + + diff --git a/docs/libs/tmpl/gstmixer.sgml b/docs/libs/tmpl/gstmixer.sgml index da7e32db57..1260283781 100644 --- a/docs/libs/tmpl/gstmixer.sgml +++ b/docs/libs/tmpl/gstmixer.sgml @@ -14,6 +14,9 @@ gstmixer + + + diff --git a/docs/libs/tmpl/gstringbuffer.sgml b/docs/libs/tmpl/gstringbuffer.sgml index fe309533bf..553547d1a5 100644 --- a/docs/libs/tmpl/gstringbuffer.sgml +++ b/docs/libs/tmpl/gstringbuffer.sgml @@ -14,6 +14,9 @@ an implementation of an audio ringbuffer + + + diff --git a/docs/libs/tmpl/gsttuner.sgml b/docs/libs/tmpl/gsttuner.sgml index c815a5f9e2..19d288556d 100644 --- a/docs/libs/tmpl/gsttuner.sgml +++ b/docs/libs/tmpl/gsttuner.sgml @@ -14,6 +14,9 @@ interface for elements that provide tuner operations + + + diff --git a/sys/v4l/gstv4lsrc.c b/sys/v4l/gstv4lsrc.c index e1071cc303..d196008c61 100644 --- a/sys/v4l/gstv4lsrc.c +++ b/sys/v4l/gstv4lsrc.c @@ -46,6 +46,7 @@ enum PROP_0, PROP_AUTOPROBE, PROP_AUTOPROBE_FPS, + PROP_COPY_MODE, PROP_TIMESTAMP_OFFSET }; @@ -102,6 +103,10 @@ gst_v4lsrc_class_init (GstV4lSrcClass * klass) g_param_spec_boolean ("autoprobe-fps", "Autoprobe FPS", "Whether the device should be probed for framerates", TRUE, G_PARAM_READWRITE)); + g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_COPY_MODE, + g_param_spec_boolean ("copy-mode", "Copy mode", + "Whether to send out copies of buffers, or direct pointers to the mmap region", + TRUE, G_PARAM_READWRITE)); g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_TIMESTAMP_OFFSET, g_param_spec_int64 ("timestamp-offset", "Timestamp offset", @@ -129,6 +134,7 @@ gst_v4lsrc_init (GstV4lSrc * v4lsrc) v4lsrc->is_capturing = FALSE; v4lsrc->autoprobe = TRUE; v4lsrc->autoprobe_fps = TRUE; + v4lsrc->copy_mode = TRUE; v4lsrc->timestamp_offset = 0; @@ -155,6 +161,9 @@ gst_v4lsrc_set_property (GObject * object, g_return_if_fail (!GST_V4L_IS_ACTIVE (GST_V4LELEMENT (v4lsrc))); v4lsrc->autoprobe_fps = g_value_get_boolean (value); break; + case PROP_COPY_MODE: + v4lsrc->copy_mode = g_value_get_boolean (value); + break; case PROP_TIMESTAMP_OFFSET: v4lsrc->timestamp_offset = g_value_get_int (value); break; @@ -178,6 +187,9 @@ gst_v4lsrc_get_property (GObject * object, case PROP_AUTOPROBE_FPS: g_value_set_boolean (value, v4lsrc->autoprobe_fps); break; + case PROP_COPY_MODE: + g_value_set_boolean (value, v4lsrc->copy_mode); + break; case PROP_TIMESTAMP_OFFSET: g_value_set_int (value, v4lsrc->timestamp_offset); break; @@ -638,12 +650,12 @@ gst_v4lsrc_create (GstPushSrc * src, GstBuffer ** buf) *buf = gst_v4lsrc_buffer_new (v4lsrc, num); -#if 0 - GstBuffer *copy = gst_buffer_copy (buf); + if (v4lsrc->copy_mode) { + GstBuffer *copy = gst_buffer_copy (*buf); - gst_buffer_unref (buf); - buf = copy; -#endif + gst_buffer_unref (*buf); + *buf = copy; + } return GST_FLOW_OK; } diff --git a/sys/v4l/gstv4lsrc.h b/sys/v4l/gstv4lsrc.h index 6aec993f88..6eab6a733a 100644 --- a/sys/v4l/gstv4lsrc.h +++ b/sys/v4l/gstv4lsrc.h @@ -89,6 +89,7 @@ struct _GstV4lSrc gboolean autoprobe; /* probe features on startup ? */ gboolean autoprobe_fps; /* probe fps on startup ? */ + gboolean copy_mode; GValue *fps_list; /* list of fps probed */ };