Gstreamer调度模式的分析

Gstreamer 的调度模式是 gstreamer 内核中比较重要,但是又较为复杂的部分(呵呵,好象是废话,但是又不得不说的)。简单地说, Gstreamer 的调度模式就是:一种确定一个 element 何时被调用 为它的同伴 element 处理和准备数据的方法。是不是觉得上面的话太简单又太复杂了啊?继续看。

 一. Gstreamer 的三种调度模式

[1] Push/Push mode 数据由上游的 element 推过来,由当前的 element 接收处理后,再推给下游的 element 。我们可以看出,这种模式中,当前的 element 必须等待上游的 element 把数据推过来,才可以做下一步的操作。因此,当前的 element 不是数据调度的发起者,它对数据的处理,仅仅能够影响下游的 element 。并且在这个模式中,当前的 element 不能控制上游的 element 的任何行为(当然,你可以从当前的 element 发 event 给上游的 element ,如果上游的 element 有相应的处理操作的话,会激发一个动作发生)。

 

 

 [2] Pull/Push mode 如下图:数据由当前element从上游 的element处拉过来,加工处理后,推给下游的element。在这个模式中,当前的element是调用的发起者,而它的上游的element处于 被动调用的位置。同时有一点可想到的是:上游的element必须提供相应的接口函数给当前的element调用。所以,如果使用这个模式,当前的 element拥有调用发起的主动权。

 

 

 [3] Pull/Pull mode 如 下图:数据由当前的element从上游的element处拉过来,加工处理后,被下游的element拉走。在这个模式里面,当前的element也必 须提供相应的接口函数给下游的element调用;当前的element不是调用的发起者,它只是调用的一个传递者;当然,当前的element可以调用 上游的element提供的相应接口。

 二.调度模式的API实现 调度模式 实现的接口 API 序号 Sink pad Src pad Sink pad Src pad 1 push push _chain() 2 Pull push _loop() 3 Pull Be pulled _loop() _get_range()

 

 参考:

 [1] http://gstreamer.freedesktop.org/data/doc/gstreamer/head/pwg/html/chapter-scheduling.html

[2] http://gstreamer.freedesktop.org/data/doc/gstreamer/head/pwg/html/chapter-building-chainfn.html

[3] http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#gst-pad-activate-pull

[4] http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstPad.html#desc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值