deepstream学习笔记1.数据结构篇

注意,了解gobject是deepstream的学习前提。了解就好,可以看看这位作者的博客.

deepstream依托于gstreamer框架,可以认为deepstream其实就是设计了几个插件,只不过这几个插件比较复杂,可以定制许多参数,用于控制视频流的推理逻辑和推理算法的选择。
其核心插件是 nvinfer插件,且已经部分开源。从代码实现的角度插件由两部分构成,第一部分为媒体流控制相关操作,代码位于 gst-nvinfer目录内,另外一部分为推理引擎部分的代码,该部分则是调用tensorrt的api实现。

打算在这里首先梳理一下,媒体流控制部分的代码。

在gstreamer框架中,gstBuffer是在不同插件流动的基础数据结构。
这里是gstBuffer的官方文档,阅读第一段你可以对gstBuffer的设计有个大致的理解。当然刚接触时,你可能因为对于概念的不熟悉,而感到困惑,实际上
下面是 gstreamer-1.14.5中gstBuffer的数据结构:

struct _GstBuffer {
   
  GstMiniObject          mini_object;

  /*< public >*/ /* with COW */
  GstBufferPool         *pool;

  /* timestamp */
  GstClockTime           pts;
  GstClockTime           dts;
  GstClockTime           duration;

  /* media specific offset */
  guint64                offset;
  guint64                offset_end;
};

上面可以认为是gstBuffer的public属性,其内部的私有属性包含在一个名为GstBufferImpl的数据结构之中,(其首字节必定为GstBuffer,很关键,这是gobect继承体系的核心其实)

typedef struct
{
   
  GstBuffer buffer;

  gsize slice_size;

  /* the memory blocks */
  guint len;
  GstMemory *mem[GST_BUFFER_MEM_MAX];

  /* memory of the buffer when allocated from 1 chunk */
  GstMemory *bufmem
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值