buffer: add memset function
authorWim Taymans <wim.taymans@collabora.co.uk>
Wed, 6 Jul 2011 14:08:56 +0000 (16:08 +0200)
committerWim Taymans <wim.taymans@collabora.co.uk>
Thu, 7 Jul 2011 09:02:09 +0000 (11:02 +0200)
gst/gstbuffer.c
gst/gstbuffer.h

index dbfc27e..4380f7a 100644 (file)
@@ -1055,6 +1055,47 @@ gst_buffer_memcmp (GstBuffer * buffer, gsize offset, gconstpointer mem,
 }
 
 /**
+ * gst_buffer_memset:
+ * @buffer: a #GstBuffer.
+ * @offset: the offset in @buffer
+ * @val: the value to set
+ * @size: the size to set
+ *
+ * Fill @buf with @size bytes with @val starting from @offset.
+ */
+void
+gst_buffer_memset (GstBuffer * buffer, gsize offset, guint8 val, gsize size)
+{
+  gsize i, len;
+
+  g_return_if_fail (GST_IS_BUFFER (buffer));
+  g_return_if_fail (gst_buffer_is_writable (buffer));
+
+  len = GST_BUFFER_MEM_LEN (buffer);
+
+  for (i = 0; i < len && size > 0; i++) {
+    guint8 *data;
+    gsize ssize, toset;
+    GstMemory *mem;
+
+    mem = GST_BUFFER_MEM_PTR (buffer, i);
+
+    data = gst_memory_map (mem, &ssize, NULL, GST_MAP_WRITE);
+    if (ssize > offset) {
+      /* we have enough */
+      toset = MIN (ssize - offset, size);
+      memset (data + offset, val, toset);
+      size -= toset;
+      offset = 0;
+    } else {
+      /* offset past buffer, skip */
+      offset -= ssize;
+    }
+    gst_memory_unmap (mem, data, ssize);
+  }
+}
+
+/**
  * gst_buffer_copy_region:
  * @parent: a #GstBuffer.
  * @flags: the #GstBufferCopyFlags
index 1872603..cead4c7 100644 (file)
@@ -249,6 +249,8 @@ void        gst_buffer_extract             (GstBuffer *buffer, gsize offset,
                                             gpointer dest, gsize size);
 gint        gst_buffer_memcmp              (GstBuffer *buffer, gsize offset,
                                             gconstpointer mem, gsize size);
+void        gst_buffer_memset              (GstBuffer *buffer, gsize offset,
+                                            guint8 val, gsize size);
 
 gsize       gst_buffer_get_size            (GstBuffer *buffer);
 void        gst_buffer_resize              (GstBuffer *buffer, gsize offset, gsize size);