sys/v4l/gstv4lsrc.c (gst_v4lsrc_get_property) (gst_v4lsrc_set_property, gst_v4lsrc_cl...
authorAndy Wingo <wingo@pobox.com>
Tue, 12 Jul 2005 17:14:33 +0000 (17:14 +0000)
committerAndy Wingo <wingo@pobox.com>
Tue, 12 Jul 2005 17:14:33 +0000 (17:14 +0000)
Original commit message from CVS:
2005-07-12  Andy Wingo  <wingo@pobox.com>

* 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
docs/libs/tmpl/gstaudio.sgml
docs/libs/tmpl/gstcolorbalance.sgml
docs/libs/tmpl/gstgconf.sgml
docs/libs/tmpl/gstmixer.sgml
docs/libs/tmpl/gstringbuffer.sgml
docs/libs/tmpl/gsttuner.sgml
sys/v4l/gstv4lsrc.c
sys/v4l/gstv4lsrc.h

index 8f36696cbafcad9e967aade7fbc01d94c360d4f4..c8f60298ffb4c7010645ff827bb2ec6427ccceb2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2005-07-12  Andy Wingo  <wingo@pobox.com>
+
+       * 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  <thomas at apestaart dot org>
 
        * gst/sine/gstsinesrc.c: (gst_sinesrc_class_init),
index f6ee50a0640e75cf81102bcd83deefb3bb0bbadc..4b91883e4ecc6ec78c46e93d15c6712aa7d4da0a 100644 (file)
@@ -14,6 +14,9 @@ a support library for audio elements
 
 </para>
 
+<!-- ##### SECTION Stability_Level ##### -->
+
+
 <!-- ##### ENUM GstAudioFieldFlag ##### -->
 <para>
 
index 5953b698acc5e65a6c6394bcbafbd27c6bc5e16f..59fb98aa53fd571d09fb92c2f9bdd3de8e3b60de 100644 (file)
@@ -14,6 +14,9 @@ interface for elements that provide color balance operations
 
 </para>
 
+<!-- ##### SECTION Stability_Level ##### -->
+
+
 <!-- ##### STRUCT GstColorBalance ##### -->
 <para>
 
index 36865fbf3be0c3cda3d441cde4047f3c2b7f8172..e3e6b7ccc773a9c37bf0ac7944258e6cea553ff9 100644 (file)
@@ -14,6 +14,9 @@ gconf default elements support
 
 </para>
 
+<!-- ##### SECTION Stability_Level ##### -->
+
+
 <!-- ##### FUNCTION gst_gconf_get_string ##### -->
 <para>
 
index da7e32db575df4f3ac75e3ab247d71de8e332a20..126028378118a607615fc0aa63a71022400dff36 100644 (file)
@@ -14,6 +14,9 @@ gstmixer
 
 </para>
 
+<!-- ##### SECTION Stability_Level ##### -->
+
+
 <!-- ##### STRUCT GstMixer ##### -->
 <para>
 
index fe309533bfe849b30901a94b41c53988c60b0158..553547d1a5444b78d88939b0f0a594cc3439f227 100644 (file)
@@ -14,6 +14,9 @@ an implementation of an audio ringbuffer
 
 </para>
 
+<!-- ##### SECTION Stability_Level ##### -->
+
+
 <!-- ##### STRUCT GstRingBuffer ##### -->
 <para>
 
index c815a5f9e201ead929a2ed4ffbd25661a009dd79..19d288556df8235ff7bb4eebad07e4ba53bb5932 100644 (file)
@@ -14,6 +14,9 @@ interface for elements that provide tuner operations
 
 </para>
 
+<!-- ##### SECTION Stability_Level ##### -->
+
+
 <!-- ##### STRUCT GstTuner ##### -->
 <para>
 
index e1071cc3033e5ec0ef977aa811a68d6ceaadd648..d196008c61f8aeaf26a6085015e72384ad31e978 100644 (file)
@@ -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;
 }
index 6aec993f88aa0f470fa72262d4485e42d19d3525..6eab6a733ab2f52d349619d0f1e115256316997d 100644 (file)
@@ -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 */
 };