diff options
author | Wim Taymans <wim.taymans@gmail.com> | 2004-06-16 15:07:58 +0000 |
---|---|---|
committer | Wim Taymans <wim.taymans@gmail.com> | 2004-06-16 15:07:58 +0000 |
commit | ae8739f7616813571c4b4ca334eb2486d9fb7dcc (patch) | |
tree | ff4ca6de4e115012cc740710f4585ab2aa30c270 | |
parent | ac4b3f471800a8a5f9eea86cc083bc5d51cfbf19 (diff) |
sys/v4l/: Added a copy mode to v4lsrc where it will output a copied version of its internal hardware buffer.
Original commit message from CVS:
* sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_get):
* sys/v4l/gstv4lsrc.c: (gst_v4lsrc_sync_mode_get_type),
(gst_v4lsrc_class_init), (gst_v4lsrc_init), (gst_v4lsrc_get_fps),
(gst_v4lsrc_get), (gst_v4lsrc_set_property),
(gst_v4lsrc_get_property):
* sys/v4l/gstv4lsrc.h:
Added a copy mode to v4lsrc where it will output a copied version
of its internal hardware buffer.
Fix the wrong FLAG_SET usage. The flags are integers, not bits, you
can't | them.
-rw-r--r-- | ChangeLog | 13 | ||||
-rw-r--r-- | sys/v4l/gstv4lmjpegsrc.c | 3 | ||||
-rw-r--r-- | sys/v4l/gstv4lsrc.c | 31 | ||||
-rw-r--r-- | sys/v4l/gstv4lsrc.h | 2 |
4 files changed, 43 insertions, 6 deletions
@@ -1,5 +1,18 @@ 2004-06-16 Wim Taymans <wim@fluendo.com> + * sys/v4l/gstv4lmjpegsrc.c: (gst_v4lmjpegsrc_get): + * sys/v4l/gstv4lsrc.c: (gst_v4lsrc_sync_mode_get_type), + (gst_v4lsrc_class_init), (gst_v4lsrc_init), (gst_v4lsrc_get_fps), + (gst_v4lsrc_get), (gst_v4lsrc_set_property), + (gst_v4lsrc_get_property): + * sys/v4l/gstv4lsrc.h: + Added a copy mode to v4lsrc where it will output a copied version + of its internal hardware buffer. + Fix the wrong FLAG_SET usage. The flags are integers, not bits, you + can't | them. + +2004-06-16 Wim Taymans <wim@fluendo.com> + * sys/oss/gstosssrc.c: (gst_osssrc_get): Timestamp fixes. diff --git a/sys/v4l/gstv4lmjpegsrc.c b/sys/v4l/gstv4lmjpegsrc.c index 8377c7b75..83942f1ee 100644 --- a/sys/v4l/gstv4lmjpegsrc.c +++ b/sys/v4l/gstv4lmjpegsrc.c @@ -574,7 +574,8 @@ gst_v4lmjpegsrc_get (GstPad * pad) GST_BUFFER_DATA (buf) = gst_v4lmjpegsrc_get_buffer (v4lmjpegsrc, num); GST_BUFFER_SIZE (buf) = v4lmjpegsrc->last_size; GST_BUFFER_MAXSIZE (buf) = v4lmjpegsrc->breq.size; - GST_BUFFER_FLAG_SET (buf, GST_BUFFER_READONLY | GST_BUFFER_DONTFREE); + GST_BUFFER_FLAG_SET (buf, GST_BUFFER_READONLY); + GST_BUFFER_FLAG_SET (buf, GST_BUFFER_DONTFREE); if (v4lmjpegsrc->use_fixed_fps) GST_BUFFER_TIMESTAMP (buf) = v4lmjpegsrc->handled * GST_SECOND / fps; else /* calculate time based on our own clock */ diff --git a/sys/v4l/gstv4lsrc.c b/sys/v4l/gstv4lsrc.c index 3c3b45c8b..6057e86c9 100644 --- a/sys/v4l/gstv4lsrc.c +++ b/sys/v4l/gstv4lsrc.c @@ -52,13 +52,16 @@ enum LAST_SIGNAL }; +#define DEFAULT_SYNC_MODE GST_V4LSRC_SYNC_MODE_CLOCK +#define DEFAULT_COPY_MODE FALSE /* arguments */ enum { ARG_0, ARG_NUMBUFS, ARG_BUFSIZE, - ARG_SYNC_MODE + ARG_SYNC_MODE, + ARG_COPY_MODE }; GST_FORMATS_FUNCTION (GstPad *, gst_v4lsrc_get_formats, @@ -66,8 +69,6 @@ GST_FORMATS_FUNCTION (GstPad *, gst_v4lsrc_get_formats, GST_QUERY_TYPE_FUNCTION (GstPad *, gst_v4lsrc_get_query_types, GST_QUERY_POSITION); -#define DEFAULT_SYNC_MODE GST_V4LSRC_SYNC_MODE_CLOCK - #define GST_TYPE_V4LSRC_SYNC_MODE (gst_v4lsrc_sync_mode_get_type()) static GType gst_v4lsrc_sync_mode_get_type (void) @@ -201,6 +202,10 @@ gst_v4lsrc_class_init (GstV4lSrcClass * klass) g_param_spec_enum ("sync_mode", "Sync mode", "Method to use for timestamping captured frames", GST_TYPE_V4LSRC_SYNC_MODE, DEFAULT_SYNC_MODE, G_PARAM_READWRITE)); + g_object_class_install_property (G_OBJECT_CLASS (klass), ARG_COPY_MODE, + g_param_spec_boolean ("copy_mode", "Copy mode", + "Don't send out HW buffers, send copy instead", DEFAULT_COPY_MODE, + G_PARAM_READWRITE)); /* signals */ gst_v4lsrc_signals[SIGNAL_FRAME_CAPTURE] = @@ -258,8 +263,8 @@ gst_v4lsrc_init (GstV4lSrc * v4lsrc) /* no colourspaces */ v4lsrc->colourspaces = NULL; - /* fps */ v4lsrc->syncmode = DEFAULT_SYNC_MODE; + v4lsrc->copy_mode = DEFAULT_COPY_MODE; v4lsrc->is_capturing = FALSE; } @@ -875,11 +880,19 @@ gst_v4lsrc_get (GstPad * pad) v4lsrc_private->num = num; GST_BUFFER_PRIVATE (buf) = v4lsrc_private; - GST_BUFFER_FLAG_SET (buf, GST_BUFFER_READONLY | GST_BUFFER_DONTFREE); + /* don't | the flags, they are integers, not bits!! */ + GST_BUFFER_FLAG_SET (buf, GST_BUFFER_READONLY); + GST_BUFFER_FLAG_SET (buf, GST_BUFFER_DONTFREE); GST_BUFFER_DATA (buf) = gst_v4lsrc_get_buffer (v4lsrc, num); GST_BUFFER_MAXSIZE (buf) = v4lsrc->mbuf.size / v4lsrc->mbuf.frames; GST_BUFFER_SIZE (buf) = v4lsrc->buffer_size; + if (v4lsrc->copy_mode) { + GstBuffer *copy = gst_buffer_copy (buf); + + gst_buffer_unref (buf); + buf = copy; + } switch (v4lsrc->syncmode) { case GST_V4LSRC_SYNC_MODE_FIXED_FPS: @@ -973,6 +986,10 @@ gst_v4lsrc_set_property (GObject * object, } break; + case ARG_COPY_MODE: + v4lsrc->copy_mode = g_value_get_boolean (value); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -1006,6 +1023,10 @@ gst_v4lsrc_get_property (GObject * object, g_value_set_enum (value, v4lsrc->syncmode); break; + case ARG_COPY_MODE: + g_value_set_boolean (value, v4lsrc->copy_mode); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; diff --git a/sys/v4l/gstv4lsrc.h b/sys/v4l/gstv4lsrc.h index 6f8cd4220..0a6b4d882 100644 --- a/sys/v4l/gstv4lsrc.h +++ b/sys/v4l/gstv4lsrc.h @@ -101,6 +101,8 @@ struct _GstV4lSrc /* how are we going to timestamp buffers? */ GstV4lSrcSyncMode syncmode; + + gboolean copy_mode; }; struct _GstV4lSrcClass |