Gstreamer 调度模式

翻译自part-scheduling.txt


调度

------------------------

    在Gstreamer中,调度模式是基于pad是主动积极地推送(产生)数据还是从其他的pad拉数据。


推模式(PUSH)

-------------------------

    一个Pad能够产生数据,并且推送给下一个Pad,按这种模式工作的Pad有一个loop函数,loop函数被重复调用直到返回false。Loop函数无论什么时候需要数据时,可以阻塞。当Pad被取消激活时,loop函数应该取消阻塞。 

    按Push模式工作的Pad仅仅能够对有chain函数的Pad推送数据,Chain函数被Push pad调用,参数是Push pad产生的buffer。

    Push模式产生数据的方式也被称为流模式,因为数据生产者产生一个稳定的,基本上是恒定速率流数据。


拉模式(PULL)

---------------------------

    按Pull模式工作的Pad仅仅能够从实现了pull_range的pad拉取数据。当从对等Pad拉取了数据后,loop函数将调用push将数据推送给对等pad。


决定调度模式

---------------------------

    当Pad被激活时, _activate() 函数被调用。Pad根据上游Pad的能力选择用push还是pull模式激活自己。Gstreamer默认用push模式激活pad,如果没有激活函数。


Chain函数

---------------------------

    当上游元素调用 _push()函数,下游Pad的Chain函数被调用,上游的元素可能是chain中一个节点或者是一个Push源。


getrange函数

---------------------------

    .......待续

你可能感兴趣的:(Gstreamer 调度模式)