diff options
-rw-r--r-- | docs/gst/gstreamer-sections.txt | 1 | ||||
-rw-r--r-- | gst/gstbuffer.c | 31 | ||||
-rw-r--r-- | gst/gstbuffer.h | 4 | ||||
-rw-r--r-- | win32/common/libgstreamer.def | 2 |
4 files changed, 23 insertions, 15 deletions
diff --git a/docs/gst/gstreamer-sections.txt b/docs/gst/gstreamer-sections.txt index 41213ce41..81a0a4d9f 100644 --- a/docs/gst/gstreamer-sections.txt +++ b/docs/gst/gstreamer-sections.txt @@ -236,6 +236,7 @@ gst_buffer_make_writable gst_buffer_replace gst_buffer_append +gst_buffer_append_region gst_buffer_get_meta gst_buffer_add_meta diff --git a/gst/gstbuffer.c b/gst/gstbuffer.c index 756c26c4d..be5f0fca4 100644 --- a/gst/gstbuffer.c +++ b/gst/gstbuffer.c @@ -1614,8 +1614,23 @@ gst_buffer_copy_region (GstBuffer * buffer, GstBufferCopyFlags flags, * Returns: (transfer full): the new #GstBuffer that contains the memory * of the two source buffers. */ +/** + * gst_buffer_append_region: + * @buf1: (transfer full): the first source #GstBuffer to append. + * @buf2: (transfer full): the second source #GstBuffer to append. + * @offset: the offset in @buf2 + * @size: the size or -1 of @buf2 + * + * Append @size bytes at @offset from @buf2 to @buf1. The result buffer will + * contain a concatenation of the memory of @buf1 and the requested region of + * @buf2. + * + * Returns: (transfer full): the new #GstBuffer that contains the memory + * of the two source buffers. + */ GstBuffer * -gst_buffer_append (GstBuffer * buf1, GstBuffer * buf2) +gst_buffer_append_region (GstBuffer * buf1, GstBuffer * buf2, gssize offset, + gssize size) { gsize i, len; @@ -1625,6 +1640,8 @@ gst_buffer_append (GstBuffer * buf1, GstBuffer * buf2) buf1 = gst_buffer_make_writable (buf1); buf2 = gst_buffer_make_writable (buf2); + gst_buffer_resize (buf2, offset, size); + len = GST_BUFFER_MEM_LEN (buf2); for (i = 0; i < len; i++) { GstMemory *mem; @@ -1634,18 +1651,6 @@ gst_buffer_append (GstBuffer * buf1, GstBuffer * buf2) _memory_add (buf1, -1, mem); } - /* we can calculate the duration too. Also make sure we're not messing - * with invalid DURATIONS */ - if (GST_BUFFER_DURATION_IS_VALID (buf1) && - GST_BUFFER_DURATION_IS_VALID (buf2)) { - /* add duration */ - GST_BUFFER_DURATION (buf1) += GST_BUFFER_DURATION (buf2); - } - if (GST_BUFFER_OFFSET_END_IS_VALID (buf2)) { - /* set offset_end */ - GST_BUFFER_OFFSET_END (buf1) = GST_BUFFER_OFFSET_END (buf2); - } - GST_BUFFER_MEM_LEN (buf2) = 0; gst_buffer_unref (buf2); diff --git a/gst/gstbuffer.h b/gst/gstbuffer.h index df4647faf..ef5b1da6d 100644 --- a/gst/gstbuffer.h +++ b/gst/gstbuffer.h @@ -476,7 +476,9 @@ GstBuffer* gst_buffer_copy_region (GstBuffer *parent, GstBufferCop gsize offset, gsize size); /* append two buffers */ -GstBuffer* gst_buffer_append (GstBuffer *buf1, GstBuffer *buf2); +GstBuffer* gst_buffer_append_region (GstBuffer *buf1, GstBuffer *buf2, + gssize offset, gssize size); +#define gst_buffer_append(b1,b2) gst_buffer_append_region ((b1), (b2), 0, -1) /* metadata */ #include <gst/gstmeta.h> diff --git a/win32/common/libgstreamer.def b/win32/common/libgstreamer.def index 825846d42..b8489b09c 100644 --- a/win32/common/libgstreamer.def +++ b/win32/common/libgstreamer.def @@ -89,7 +89,7 @@ EXPORTS gst_bin_remove_many gst_bitmask_get_type gst_buffer_add_meta - gst_buffer_append + gst_buffer_append_region gst_buffer_copy_flags_get_type gst_buffer_copy_into gst_buffer_copy_region |