GstBuffer中data实际的存储地址

GstBuffer中data实际的存储地址

前段时间刚开始学Gstreamer,还没学多少就要干活了,最近想用gdb查看GstBuffer的data地址是总很麻烦,要先用gst_buffer_map先获得data,所以就深入的了解了一下GstBuffer中data所存放的地方。下面就和大家分享一下吧!

通常我们需要获取GstBuffer的data数据是通过接口gst_buffer_map得到的,进入gst_buffer_map接口的具体实现,我们可以发现,Gstreamer通过_get_merged_memory函数得到GstBuffer所对应的GstMemory,再深入后,我们可以发现GstBuffer只是暴露给我们用户的信息(通过GstBuffer是找不到我们想要的data的),真正的信息是存储在GstBufferImpl这个结构体中的,此结构体第一个成员即GstBuffer,而后会包含一个GstMemory指针数组(大小为16),我们想要的data就存储在这里面(通常我们只用到了mem[0])。

_get_merged_memory函数是根据你传的flag(即GST_MAP_READ或GST_MAP_WIRTE)来判断是否要拷贝一份数据。如果你去GstMemory中查找我们想要的data,还是找不到,先别急。Gstreamer会用gst_memory_map来得到对应的data,而进入此函数,我们会发现Gstreamer会用到GstMemory中的allocator成员的mem_map函数来获得data。如果你不深入到Gstreamer框架是比较难找到这个mem_map函数指针的定义的。

不过,没事,你有我,这部分工作我帮你做吧!在Gstreamer中,我们发现其实GstMemory和GstBuffer一样,只暴露了一部分的信息,具体的信息是存储在GstMemorySystem这个结构体里。而GstMemory所对应的GstAllocator中的函数指针是在gst_allocator_sysmem_init函数中实现的(当然这

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值