十二、GstBufferList
1 GstBufferList基本概念
-
缓冲列表(Buffer lists)是包含一系列缓冲(buffers)的对象。
-
缓冲列表可以通过 gst_buffer_list_new 创建,并使用 gst_buffer_list_insert 填充数据。
-
当需要一次性推送多个缓冲时,可以使用 gst_pad_push_list 将缓冲列表推送到源端口(srcpad)。这在需要推送多个缓冲时非常有用,因为它可以减少逐个推送每个缓冲时的开销。
-
GstBufferList中的buffer需要用户自己申请内存空间,然后使用 gst_buffer_list_insert 插入到列表中
2 GstBufferList类型结构
2.1 GstBufferList类型注册宏定义
/* filename: gstbufferlist.h */
GST_API GType _gst_buffer_list_type;
#define GST_TYPE_BUFFER_LIST (_gst_buffer_list_type)
/* filename: gstbufferlist.c */
GType _gst_buffer_list_type = 0;
GST_DEFINE_MINI_OBJECT_TYPE (GstBufferList, gst_buffer_list);
2.2 GstBufferList结构体
/* filename: gstbufferlist.c */
struct _GstBufferList
{
GstMiniObject mini_object;
GstBuffer **buffers;
guint n_buffers; /* 目前列表存储有多少个buffer */
guint n_allocated; /* 列表可以存储多少个buffer(分配了多少个buffer指针存储) */
gsize slice_size; /* sizeof(GstBufferList) + ( n_allocated - 1 ) * sizeof(void *) */
/* 虽然这里的GstBuffer指针数组只能存储一个,但是初始化函数分配了sizeof(GstBufferList)+ 存储指针的连续空间
* 意味着 arr[2] arr[3] .... arr[n_allocated] 都有效
* @note: sizeof(GstBufferList) = 96,这个结构体的最后一个成员 arr是占用 88字节,所以不会出现结构体内存对齐问题
*/
GstBuffer *arr[1];
};