翻译自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函数
---------------------------
.......待续