![]() |
![]() |
![]() |
GStreamer 0.11 Core Reference Manual | ![]() |
---|---|---|---|---|
Top | Description |
#include <gst/gst.h> struct GstBuffer; enum GstBufferFlags; enum GstBufferCopyFlags; #define GST_BUFFER_FLAGS (buf) #define GST_BUFFER_FLAG_IS_SET (buf, flag) #define GST_BUFFER_FLAG_SET (buf, flag) #define GST_BUFFER_FLAG_UNSET (buf, flag) #define GST_META_TIMING_INFO struct GstMetaTiming; #define GST_BUFFER_TIMESTAMP (buf) #define GST_BUFFER_DURATION (buf) #define GST_BUFFER_OFFSET (buf) #define GST_BUFFER_OFFSET_END (buf) #define GST_BUFFER_OFFSET_NONE #define GST_BUFFER_DURATION_IS_VALID (buffer) #define GST_BUFFER_TIMESTAMP_IS_VALID (buffer) #define GST_BUFFER_OFFSET_IS_VALID (buffer) #define GST_BUFFER_OFFSET_END_IS_VALID (buffer) #define GST_BUFFER_IS_DISCONT (buffer) #define GST_BUFFER_TRACE_NAME GstBuffer * gst_buffer_new (void
); #define gst_buffer_new_and_alloc (s) GstBuffer * gst_buffer_new_allocate (const GstAllocator *allocator
,gsize size
,gsize align
); GstBuffer * gst_buffer_new_wrapped (gpointer data
,gsize size
); GstBuffer * gst_buffer_new_wrapped_full (gpointer data
,GFreeFunc free_func
,gsize offset
,gsize size
); GstBuffer * gst_buffer_ref (GstBuffer *buf
); void gst_buffer_unref (GstBuffer *buf
); gsize gst_buffer_get_sizes (GstBuffer *buffer
,gsize *offset
,gsize *maxsize
); #define gst_buffer_get_size (b) void gst_buffer_resize (GstBuffer *buffer
,gssize offset
,gsize size
); #define gst_buffer_set_size (b, s) guint gst_buffer_n_memory (GstBuffer *buffer
); void gst_buffer_take_memory (GstBuffer *buffer
,gint idx
,GstMemory *mem
); GstMemory * gst_buffer_peek_memory (GstBuffer *buffer
,guint idx
,GstMapFlags flags
); #define gst_buffer_remove_memory (b, i) void gst_buffer_remove_memory_range (GstBuffer *buffer
,guint idx
,guint length
); GstBuffer * gst_buffer_join (GstBuffer *buf1
,GstBuffer *buf2
); GstBuffer * gst_buffer_merge (GstBuffer *buf1
,GstBuffer *buf2
); gpointer gst_buffer_map (GstBuffer *buffer
,gsize *size
,gsize *maxsize
,GstMapFlags flags
); gboolean gst_buffer_unmap (GstBuffer *buffer
,gpointer data
,gsize size
); gint gst_buffer_memcmp (GstBuffer *buffer
,gsize offset
,gconstpointer mem
,gsize size
); gsize gst_buffer_extract (GstBuffer *buffer
,gsize offset
,gpointer dest
,gsize size
); gsize gst_buffer_fill (GstBuffer *buffer
,gsize offset
,gconstpointer src
,gsize size
); gsize gst_buffer_memset (GstBuffer *buffer
,gsize offset
,guint8 val
,gsize size
); #define GST_BUFFER_COPY_METADATA #define GST_BUFFER_COPY_ALL GstBuffer * gst_buffer_copy (const GstBuffer *buf
); void gst_buffer_copy_into (GstBuffer *dest
,GstBuffer *src
,GstBufferCopyFlags flags
,gsize offset
,gsize size
); GstBuffer * gst_buffer_copy_region (GstBuffer *parent
,GstBufferCopyFlags flags
,gsize offset
,gsize size
); #define gst_buffer_is_writable (buf) #define gst_buffer_make_writable (buf) #define gst_buffer_replace (obuf, nbuf) gboolean gst_buffer_is_span_fast (GstBuffer *buf1
,GstBuffer *buf2
); GstBuffer * gst_buffer_span (GstBuffer *buf1
,gsize offset
,GstBuffer *buf2
,gsize size
); GstMeta * gst_buffer_get_meta (GstBuffer *buffer
,const GstMetaInfo *info
); GstMeta * gst_buffer_add_meta (GstBuffer *buffer
,const GstMetaInfo *info
,gpointer params
); gboolean gst_buffer_remove_meta (GstBuffer *buffer
,GstMeta *meta
); GstMeta * gst_buffer_iterate_meta (GstBuffer *buffer
,gpointer *state
); #define gst_buffer_add_meta_timing (b) #define gst_buffer_get_meta_timing (b) const GstMetaInfo * gst_meta_timing_get_info (void
);
Buffers are the basic unit of data transfer in GStreamer. The GstBuffer type provides all the state necessary to define the regions of memory as part of a stream. Region copies are also supported, allowing a smaller region of a buffer to become its own buffer, with mechanisms in place to ensure that neither memory space goes away prematurely.
Buffers are usually created with gst_buffer_new()
. After a buffer has been
created one will typically allocate memory for it and set the size of the
buffer data. The following example creates a buffer that can hold a given
video frame with a given width, height and bits per plane.
Example 3. Creating a buffer for a video frame
GstBuffer *buffer; gint size, width, height, bpp; ... size = width * height * bpp; buffer = gst_buffer_new (); GST_BUFFER_SIZE (buffer) = size; GST_BUFFER_MALLOCDATA (buffer) = g_malloc (size); GST_BUFFER_DATA (buffer) = GST_BUFFER_MALLOCDATA (buffer); ...
Alternatively, use gst_buffer_new_and_alloc()
to create a buffer with preallocated data of a given size.
The data pointed to by the buffer can be retrieved with the GST_BUFFER_DATA()
macro. The size of the data can be found with GST_BUFFER_SIZE()
. For buffers
of size 0, the data pointer is undefined (usually NULL) and should never be used.
If an element knows what pad you will push the buffer out on, it should use
gst_pad_alloc_buffer()
instead to create a buffer. This allows downstream
elements to provide special buffers to write in, like hardware buffers.
A buffer has a pointer to a GstCaps describing the media type of the data
in the buffer. Attach caps to the buffer with gst_buffer_set_caps()
; this
is typically done before pushing out a buffer using gst_pad_push()
so that
the downstream element knows the type of the buffer.
A buffer will usually have a timestamp, and a duration, but neither of these are guaranteed (they may be set to GST_CLOCK_TIME_NONE). Whenever a meaningful value can be given for these, they should be set. The timestamp and duration are measured in nanoseconds (they are GstClockTime values).
A buffer can also have one or both of a start and an end offset. These are media-type specific. For video buffers, the start offset will generally be the frame number. For audio buffers, it will be the number of samples produced so far. For compressed data, it could be the byte offset in a source or destination file. Likewise, the end offset will be the offset of the end of the buffer. These can only be meaningfully interpreted if you know the media type of the buffer (the GstCaps set on it). Either or both can be set to GST_BUFFER_OFFSET_NONE.
gst_buffer_ref()
is used to increase the refcount of a buffer. This must be
done when you want to keep a handle to the buffer after pushing it to the
next element.
To efficiently create a smaller buffer out of an existing one, you can
use gst_buffer_copy_region()
.
If a plug-in wants to modify the buffer data or metadata in-place, it should
first obtain a buffer that is safe to modify by using
gst_buffer_make_writable()
. This function is optimized so that a copy will
only be made when it is necessary.
Several flags of the buffer can be set and unset with the
GST_BUFFER_FLAG_SET()
and GST_BUFFER_FLAG_UNSET()
macros. Use
GST_BUFFER_FLAG_IS_SET()
to test if a certain GstBufferFlag is set.
Buffers can be efficiently merged into a larger buffer with
gst_buffer_span()
, which avoids memory copies when the gst_buffer_is_span_fast()
function returns TRUE.
An element should either unref the buffer or push it out on a src pad
using gst_pad_push()
(see GstPad).
Buffers are usually freed by unreffing them with gst_buffer_unref()
. When
the refcount drops to 0, any data pointed to by the buffer is unreffed as
well.
Last reviewed on March 30, 2011 (0.11.0)
struct GstBuffer { GstMiniObject mini_object; GstBufferPool *pool; /* timestamp */ GstClockTime timestamp; GstClockTime duration; /* media specific offset */ guint64 offset; guint64 offset_end; };
The structure of a GstBuffer. Use the associated macros to access the public variables.
GstMiniObject |
the parent structure |
GstBufferPool * |
pointer to the pool owner of the buffer |
GstClockTime |
timestamp of the buffer, can be GST_CLOCK_TIME_NONE when the timestamp is not known or relevant. |
GstClockTime |
duration in time of the buffer data, can be GST_CLOCK_TIME_NONE when the duration is not known or relevant. |
guint64 |
a media specific offset for the buffer data. For video frames, this is the frame number of this buffer. For audio samples, this is the offset of the first sample in this buffer. For file data or compressed data this is the byte offset of the first byte in this buffer. |
guint64 |
the last offset contained in this buffer. It has the same
format as offset . |
typedef enum { GST_BUFFER_FLAG_LIVE = (GST_MINI_OBJECT_FLAG_LAST << 0), GST_BUFFER_FLAG_DECODE_ONLY = (GST_MINI_OBJECT_FLAG_LAST << 1), GST_BUFFER_FLAG_DISCONT = (GST_MINI_OBJECT_FLAG_LAST << 2), GST_BUFFER_FLAG_RESYNC = (GST_MINI_OBJECT_FLAG_LAST << 3), GST_BUFFER_FLAG_CORRUPTED = (GST_MINI_OBJECT_FLAG_LAST << 4), GST_BUFFER_FLAG_MARKER = (GST_MINI_OBJECT_FLAG_LAST << 5), GST_BUFFER_FLAG_HEADER = (GST_MINI_OBJECT_FLAG_LAST << 6), GST_BUFFER_FLAG_GAP = (GST_MINI_OBJECT_FLAG_LAST << 7), GST_BUFFER_FLAG_DROPPABLE = (GST_MINI_OBJECT_FLAG_LAST << 8), GST_BUFFER_FLAG_DELTA_UNIT = (GST_MINI_OBJECT_FLAG_LAST << 9), GST_BUFFER_FLAG_IN_CAPS = (GST_MINI_OBJECT_FLAG_LAST << 10), GST_BUFFER_FLAG_LAST = (GST_MINI_OBJECT_FLAG_LAST << 20) } GstBufferFlags;
A set of buffer flags used to describe properties of a GstBuffer.
the buffer is live data and should be discarded in the PAUSED state. | |
the buffer contains data that should be dropped because it will be clipped against the segment boundaries or because it does not contain data that should be shown to the user. | |
the buffer marks a data discontinuity in the stream. This typically occurs after a seek or a dropped buffer from a live or network source. | |
the buffer timestamp might have a discontinuity and this buffer is a good point to resynchronize. | |
the buffer data is corrupted. | |
the buffer contains a media specific marker. for video this is typically the end of a frame boundary, for audio this is usually the end of a talkspurt. | |
the buffer contains header information that is needed to decode the following data | |
the buffer has been created to fill a gap in the stream and contains media neutral data (elements can switch to optimized code path that ignores the buffer content). | |
the buffer can be dropped without breaking the stream, for example to reduce bandwidth. | |
this unit cannot be decoded independently. | |
the buffer has been added as a field in a GstCaps. | |
additional media specific flags can be added starting from this flag. |
typedef enum { GST_BUFFER_COPY_NONE = 0, GST_BUFFER_COPY_FLAGS = (1 << 0), GST_BUFFER_COPY_TIMESTAMPS = (1 << 1), GST_BUFFER_COPY_MEMORY = (1 << 2), GST_BUFFER_COPY_MERGE = (1 << 3) } GstBufferCopyFlags;
A set of flags that can be provided to the gst_buffer_copy_into()
function to specify which items should be copied.
copy nothing | |
flag indicating that buffer flags should be copied | |
flag indicating that buffer timestamp, duration, offset and offset_end should be copied | |
flag indicating that buffer memory should be copied and appended to already existing memory | |
flag indicating that buffer memory should be merged |
#define GST_BUFFER_FLAGS(buf) GST_MINI_OBJECT_FLAGS(buf)
A flags word containing GstBufferFlag flags set on this buffer.
|
a GstBuffer. |
#define GST_BUFFER_FLAG_IS_SET(buf,flag) GST_MINI_OBJECT_FLAG_IS_SET (buf, flag)
Gives the status of a specific flag on a buffer.
|
a GstBuffer. |
|
the GstBufferFlag to check. |
#define GST_BUFFER_FLAG_SET(buf,flag) GST_MINI_OBJECT_FLAG_SET (buf, flag)
Sets a buffer flag on a buffer.
|
a GstBuffer. |
|
the GstBufferFlag to set. |
#define GST_BUFFER_FLAG_UNSET(buf,flag) GST_MINI_OBJECT_FLAG_UNSET (buf, flag)
Clears a buffer flag.
|
a GstBuffer. |
|
the GstBufferFlag to clear. |
struct GstMetaTiming { GstMeta meta; /* common meta header */ GstClockTime dts; /* decoding timestamp */ GstClockTime pts; /* presentation timestamp */ GstClockTime duration; /* duration of the data */ GstClockTime clock_rate; /* clock rate for the above values */ };
Extra timing metadata
GstMeta |
parent metadata |
GstClockTime |
the decoding timestamp |
GstClockTime |
the presentation timestamp |
GstClockTime |
the duration |
GstClockTime |
the clock rate of the dts, pts and duration values |
#define GST_BUFFER_TIMESTAMP(buf) (GST_BUFFER_CAST(buf)->timestamp)
The timestamp in nanoseconds (as a GstClockTime) of the data in the buffer.
Value will be GST_CLOCK_TIME_NONE
if the timestamp is unknown.
|
a GstBuffer.: |
#define GST_BUFFER_DURATION(buf) (GST_BUFFER_CAST(buf)->duration)
The duration in nanoseconds (as a GstClockTime) of the data in the buffer.
Value will be GST_CLOCK_TIME_NONE
if the duration is unknown.
|
a GstBuffer. |
#define GST_BUFFER_OFFSET(buf) (GST_BUFFER_CAST(buf)->offset)
The offset in the source file of the beginning of this buffer.
|
a GstBuffer. |
#define GST_BUFFER_OFFSET_END(buf) (GST_BUFFER_CAST(buf)->offset_end)
The offset in the source file of the end of this buffer.
|
a GstBuffer. |
#define GST_BUFFER_OFFSET_NONE ((guint64)-1)
Constant for no-offset return results.
#define GST_BUFFER_DURATION_IS_VALID(buffer) (GST_CLOCK_TIME_IS_VALID (GST_BUFFER_DURATION (buffer)))
Tests if the duration is known.
|
a GstBuffer |
#define GST_BUFFER_TIMESTAMP_IS_VALID(buffer) (GST_CLOCK_TIME_IS_VALID (GST_BUFFER_TIMESTAMP (buffer)))
Tests if the timestamp is known.
|
a GstBuffer |
#define GST_BUFFER_OFFSET_IS_VALID(buffer) (GST_BUFFER_OFFSET (buffer) != GST_BUFFER_OFFSET_NONE)
Tests if the start offset is known.
|
a GstBuffer |
#define GST_BUFFER_OFFSET_END_IS_VALID(buffer) (GST_BUFFER_OFFSET_END (buffer) != GST_BUFFER_OFFSET_NONE)
Tests if the end offset is known.
|
a GstBuffer |
#define GST_BUFFER_IS_DISCONT(buffer) (GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_DISCONT))
Tests if the buffer marks a discontinuity in the stream.
|
a GstBuffer |
Since 0.10.9
#define GST_BUFFER_TRACE_NAME "GstBuffer"
The name used for tracing memory allocations.
GstBuffer * gst_buffer_new (void
);
Creates a newly allocated buffer without any data.
MT safe.
Returns : |
the new GstBuffer. [transfer full] |
GstBuffer * gst_buffer_new_allocate (const GstAllocator *allocator
,gsize size
,gsize align
);
Tries to create a newly allocated buffer with data of the given size and
alignment from allocator
. If the requested amount of memory can't be
allocated, NULL will be returned. The allocated buffer memory is not cleared.
When allocator
is NULL, the default memory allocator will be used.
Allocator buffer memory will be aligned to multiples of (align
+ 1) bytes.
Note that when size
== 0, the buffer will not have memory associated with it.
MT safe.
|
the GstAllocator to use |
|
the size in bytes of the new buffer's data. |
|
the alignment of the buffer memory |
Returns : |
a new GstBuffer, or NULL if the memory couldn't be allocated. [transfer full] |
GstBuffer * gst_buffer_new_wrapped (gpointer data
,gsize size
);
Creates a new buffer that wraps the given data
.
MT safe.
|
data to wrap |
|
allocated size of data
|
Returns : |
a new GstBuffer. [transfer full] |
GstBuffer * gst_buffer_new_wrapped_full (gpointer data
,GFreeFunc free_func
,gsize offset
,gsize size
);
Creates a new buffer that wraps the given data
. Valid data is set
to start at offset
and up to size
. If no free_func
is provided,
buffer memory is marked READONLY.
MT safe.
|
data to wrap |
|
function to free data
|
|
offset in data of valid data |
|
size of valid data in data starting at offset
|
Returns : |
a new GstBuffer. [transfer full] |
GstBuffer * gst_buffer_ref (GstBuffer *buf
);
Increases the refcount of the given buffer by one.
Note that the refcount affects the writeability
of buf
and its metadata, see gst_buffer_is_writable()
and
gst_buffer_is_metadata_writable()
. It is
important to note that keeping additional references to
GstBuffer instances can potentially increase the number
of memcpy operations in a pipeline.
|
a GstBuffer. |
Returns : |
buf . [transfer full]
|
void gst_buffer_unref (GstBuffer *buf
);
Decreases the refcount of the buffer. If the refcount reaches 0, the buffer
will be freed. If GST_BUFFER_MALLOCDATA()
is non-NULL, this pointer will
also be freed at this time.
|
a GstBuffer. [transfer full] |
gsize gst_buffer_get_sizes (GstBuffer *buffer
,gsize *offset
,gsize *maxsize
);
Get the total size of all memory blocks in buffer
.
When not NULL
, offset
will contain the offset of the data in the first
memory block in buffer
and maxsize
will contain the sum of the size
and offset
and the amount of extra padding on the last memory block.
offset
and maxsize
can be used to resize the buffer with
gst_buffer_resize()
.
|
a GstBuffer. |
|
a pointer to the offset |
|
a pointer to the maxsize |
Returns : |
the total size of the memory in buffer . |
#define gst_buffer_get_size(b) gst_buffer_get_sizes ((b), NULL, NULL)
Get the size of b
.
|
a GstBuffer. |
void gst_buffer_resize (GstBuffer *buffer
,gssize offset
,gsize size
);
Set the total size of the buffer
|
a GstBuffer. |
|
the offset adjustement |
|
the new size |
#define gst_buffer_set_size(b,s) gst_buffer_resize ((b), 0, (s))
Set the size of b
to s
. This will remove or trim the memory blocks
in the buffer.
|
a GstBuffer. |
|
a new size |
guint gst_buffer_n_memory (GstBuffer *buffer
);
Get the amount of memory blocks that this buffer has.
|
a GstBuffer. |
Returns : |
the amount of memory block in this buffer. [transfer full] |
void gst_buffer_take_memory (GstBuffer *buffer
,gint idx
,GstMemory *mem
);
Add the memory block mem
to buffer
at idx
. This function takes ownership
of mem
and thus doesn't increase its refcount.
GstMemory * gst_buffer_peek_memory (GstBuffer *buffer
,guint idx
,GstMapFlags flags
);
Get the memory block in buffer
at idx
for memory access in flags
.
This function does not return a refcount to the memory block. The memory
block stays valid for as long as the caller has a valid reference to buffer
.
buffer
should be writable when flags
contains GST_MAP_WRITE. If the memory
at idx
is not writable, a new writable copy will be installed in buffer
and
returned.
|
a GstBuffer. |
|
an index |
|
GstMapFlags |
Returns : |
a GstMemory at idx . |
#define gst_buffer_remove_memory(b,i) gst_buffer_remove_memory_range ((b), (i), 1)
Remove the memory block in b
at i
.
|
a GstBuffer. |
|
an index |
void gst_buffer_remove_memory_range (GstBuffer *buffer
,guint idx
,guint length
);
Remove len
memory blocks in buffer
starting from idx
.
length
can be -1, in which case all memory starting from idx
is removed.
|
a GstBuffer. |
|
an index |
|
a length |
GstBuffer * gst_buffer_join (GstBuffer *buf1
,GstBuffer *buf2
);
Create a new buffer that is the concatenation of the two source buffers, and unrefs the original source buffers.
If the buffers point to contiguous areas of memory, the buffer is created without copying the data.
This is a convenience function for C programmers. See also
gst_buffer_merge()
, which does the same thing without
unreffing the input parameters. Language bindings without
explicit reference counting should not wrap this function.
GstBuffer * gst_buffer_merge (GstBuffer *buf1
,GstBuffer *buf2
);
Create a new buffer that is the concatenation of the two source buffers. The original source buffers will not be modified or unref'd. Make sure you unref the source buffers if they are not used anymore afterwards.
If the buffers point to contiguous areas of memory, the buffer is created without copying the data.
Free-function: gst_buffer_unref
gpointer gst_buffer_map (GstBuffer *buffer
,gsize *size
,gsize *maxsize
,GstMapFlags flags
);
This function return a pointer to the memory in buffer
. flags
describe the
desired access of the memory. When flags
is GST_MAP_WRITE, buffer
should
be writable (as returned from gst_buffer_is_writable()
).
size
and maxsize
will contain the current valid number of bytes in the
returned memory area and the total maximum mount of bytes available in the
returned memory area respectively.
When buffer
is writable but the memory isn't, a writable copy will
automatically be created and returned. The readonly copy of the buffer memory
will then also be replaced with this writable copy.
When the buffer contains multiple memory blocks, the returned pointer will be a concatenation of the memory blocks.
|
a GstBuffer. |
|
a location for the size |
|
a location for the max size |
|
flags for the mapping |
Returns : |
a pointer to the memory for the buffer. |
gboolean gst_buffer_unmap (GstBuffer *buffer
,gpointer data
,gsize size
);
Release the memory previously mapped with gst_buffer_map()
.
gint gst_buffer_memcmp (GstBuffer *buffer
,gsize offset
,gconstpointer mem
,gsize size
);
Compare size
bytes starting from offset
in buffer
with the memory in mem
.
|
a GstBuffer. |
|
the offset in buffer
|
|
the memory to compare |
|
the size to compare |
Returns : |
0 if the memory is equal. |
gsize gst_buffer_extract (GstBuffer *buffer
,gsize offset
,gpointer dest
,gsize size
);
Copy size
bytes starting from offset
in buffer
to dest
.
|
a GstBuffer. |
|
the offset to extract |
|
the destination address |
|
the size to extract |
Returns : |
The amount of bytes extracted. This value can be lower than size
when buffer did not contain enough data. |
gsize gst_buffer_fill (GstBuffer *buffer
,gsize offset
,gconstpointer src
,gsize size
);
Copy size
bytes from src
to buffer
at offset
.
|
a GstBuffer. |
|
the offset to fill |
|
the source address |
|
the size to fill |
Returns : |
The amount of bytes copied. This value can be lower than size
when buffer did not contain enough data. |
gsize gst_buffer_memset (GstBuffer *buffer
,gsize offset
,guint8 val
,gsize size
);
Fill buf
with size
bytes with val
starting from offset
.
|
a GstBuffer. |
|
the offset in buffer
|
|
the value to set |
|
the size to set |
Returns : |
The amount of bytes filled. This value can be lower than size
when buffer did not contain enough data. |
#define GST_BUFFER_COPY_METADATA (GST_BUFFER_COPY_FLAGS | GST_BUFFER_COPY_TIMESTAMPS)
Combination of all possible metadata fields that can be copied with
gst_buffer_copy_into()
.
#define GST_BUFFER_COPY_ALL ((GstBufferCopyFlags)(GST_BUFFER_COPY_METADATA | GST_BUFFER_COPY_MEMORY))
Combination of all possible fields that can be copied with
gst_buffer_copy_into()
.
GstBuffer * gst_buffer_copy (const GstBuffer *buf
);
Create a copy of the given buffer. This will also make a newly allocated copy of the data the source buffer contains.
|
a GstBuffer. |
Returns : |
a new copy of buf . [transfer full]
|
void gst_buffer_copy_into (GstBuffer *dest
,GstBuffer *src
,GstBufferCopyFlags flags
,gsize offset
,gsize size
);
Copies the information from src
into dest
.
flags
indicate which fields will be copied.
GstBuffer * gst_buffer_copy_region (GstBuffer *parent
,GstBufferCopyFlags flags
,gsize offset
,gsize size
);
Creates a sub-buffer from parent
at offset
and size
.
This sub-buffer uses the actual memory space of the parent buffer.
This function will copy the offset and timestamp fields when the
offset is 0. If not, they will be set to GST_CLOCK_TIME_NONE and
GST_BUFFER_OFFSET_NONE.
If offset
equals 0 and size
equals the total size of buffer
, the
duration and offset end fields are also copied. If not they will be set
to GST_CLOCK_TIME_NONE and GST_BUFFER_OFFSET_NONE.
MT safe.
|
a GstBuffer. |
|
the GstBufferCopyFlags |
|
the offset into parent GstBuffer at which the new sub-buffer begins. |
|
the size of the new GstBuffer sub-buffer, in bytes. |
Returns : |
the new GstBuffer or NULL if the arguments were invalid. [transfer full] |
#define gst_buffer_is_writable(buf) gst_mini_object_is_writable (GST_MINI_OBJECT_CAST (buf))
Tests if you can safely write data into a buffer's data array or validly modify the caps and timestamp metadata. Metadata in a GstBuffer is always writable, but it is only safe to change it when there is only one owner of the buffer - ie, the refcount is 1.
|
a GstBuffer |
#define gst_buffer_make_writable(buf) GST_BUFFER_CAST (gst_mini_object_make_writable (GST_MINI_OBJECT_CAST (buf)))
Makes a writable buffer from the given buffer. If the source buffer is
already writable, this will simply return the same buffer. A copy will
otherwise be made using gst_buffer_copy()
.
|
a GstBuffer. [transfer full] |
Returns : |
a writable buffer which may or may not be the
same as buf . [transfer full]
|
#define gst_buffer_replace(obuf,nbuf)
Modifies a pointer to a GstBuffer to point to a different GstBuffer. The modification is done atomically (so this is useful for ensuring thread safety in some cases), and the reference counts are updated appropriately (the old buffer is unreffed, the new is reffed).
Either nbuf
or the GstBuffer pointed to by obuf
may be NULL.
gboolean gst_buffer_is_span_fast (GstBuffer *buf1
,GstBuffer *buf2
);
Determines whether a gst_buffer_span()
can be done without copying
the contents, that is, whether the data areas are contiguous sub-buffers of
the same buffer.
MT safe.
GstBuffer * gst_buffer_span (GstBuffer *buf1
,gsize offset
,GstBuffer *buf2
,gsize size
);
Creates a new buffer that consists of part of buf1 and buf2. Logically, buf1 and buf2 are concatenated into a single larger buffer, and a new buffer is created at the given offset inside this space, with a given length.
If the two source buffers are children of the same larger buffer,
and are contiguous, the new buffer will be a child of the shared
parent, and thus no copying is necessary. you can use
gst_buffer_is_span_fast()
to determine if a memcpy will be needed.
MT safe.
|
the first source GstBuffer to merge. |
|
the offset in the first buffer from where the new buffer should start. |
|
the second source GstBuffer to merge. |
|
the total size of the new buffer. |
Returns : |
the new GstBuffer that spans the two source buffers, or NULL if the arguments are invalid. [transfer full] |
GstMeta * gst_buffer_get_meta (GstBuffer *buffer
,const GstMetaInfo *info
);
Get the metadata for the api in info
on buffer. When there is no such
metadata, NULL is returned.
Note that the result metadata might not be of the implementation info
.
|
a GstBuffer |
|
a GstMetaInfo |
Returns : |
the metadata for the api in info on buffer . |
GstMeta * gst_buffer_add_meta (GstBuffer *buffer
,const GstMetaInfo *info
,gpointer params
);
Add metadata for info
to buffer
using the parameters in params
.
|
a GstBuffer |
|
a GstMetaInfo |
|
params for info
|
Returns : |
the metadata for the api in info on buffer . |
gboolean gst_buffer_remove_meta (GstBuffer *buffer
,GstMeta *meta
);
Remove the metadata for meta
on buffer
.
GstMeta * gst_buffer_iterate_meta (GstBuffer *buffer
,gpointer *state
);
Retrieve the next GstMeta after current
. If state
points
to NULL
, the first metadata is returned.
state
will be updated with an opage state pointer
#define gst_buffer_add_meta_timing(b) ((GstMetaTiming*)gst_buffer_add_meta((b),GST_META_TIMING_INFO,NULL))
#define gst_buffer_get_meta_timing(b) ((GstMetaTiming*)gst_buffer_get_meta((b),GST_META_TIMING_INFO))