DirectShow 数据拉取(PULL)模式
2021-02-26
177
0
在IMemInputPin接口中,上游过滤器确定要发送的数据,并将数据推送到下游过滤器。对于某些过滤器,拉动模型更合适。这里,下游过滤器从上游过滤器请求数据。sample仍然从输出管脚到输入管脚向下游移动,但是由下游过滤器启动数据流。这种类型的连接使用IAsyncReader接口。
拉取模式的典型用途是在文件播放中。例如,在AVI回放图中,异步文件源过滤器执行通用文件读取操作,并以字节流的形式传递数据,而不包含格式信息。AVI拆分器过滤器读取AVI头并将流解析为视频和音频样本。AVI拆分器可以比异步文件源筛选器更好地确定它需要哪些数据,因此它使用IAsyncReader而不是IMemInputPin。
要从输出引脚请求数据,输入引脚将调用以下方法之一:
- IAsyncReader::Request
- IAsyncReader::SyncRead
- IAsyncReader::SyncReadAligned.
第一种方法是异步的,支持多个重叠读取。其他的是同步的。
理论上,任何过滤器都可以支持IAsyncReader,但实际上它是为连接到解析器过滤器的源过滤器设计的。解析器的作用非常类似于推送模型中的源过滤器。当它暂停时,它会创建一个流线程,从IAsyncreder连接中提取数据并将其推送到下游。输出管脚使用IMemInputPin,其余的图形使用标准的push模型。
HID人机交互QQ群:564808376
UAC音频QQ群:218581009
UVC相机QQ群:331552032
BOT&UASP大容量存储QQ群:258159197
STC-USB单片机QQ群:315457461
USB技术交流QQ群2:580684376
USB技术交流QQ群:952873936