当前位置:首页 » 软件开发
开发技术指南» 文章正文
    引言: 数据流在Filter GraphZE: 14pt; FONT-F
 

 

    摘要:  看到论坛上有人提出,需要一个通用的滑动控件,考虑了一下,从cwnd继承了一个cslidetab类,实现一些演示功能。使用方法:  1. #include "slidetab.h" //在需要使用的窗口类的头文件中包含  2. cslidetab m_slidetab; //声明一个cslidetab的成员变量  3. m_slidetab.createtab(crect(-......
    摘要:●好久没看书了,这回看了一会儿,记得是看到sdi这一章,这一章显然也没有什么新意,只是教我们创建一个简单的画图程序,而且只能画线,不过主要还是熟悉一下文档界面的应用程序设计。题设:我们用app wizard新建一个sdi ,第4步和最后一步显然比较重要,比如:第4步我们点高级进入设置默认打开文件,填入*.txt ,最后一步选择cedit, 就创建了一个类似记事本的应用程序了,几乎不用添加任何代码。......


数据流在Filter Graph里的流动
数据流在filter graph里的流动

智慧的鱼(aoosang) 【程序编程相关:ListControl的使用

【推荐阅读:怎样在VC++中访问、修改注册表

1 directshow数据流动概述

【扩展信息:VC++学习笔记(四)

摘要:

数据总是存在内存块中的字节集合,每个buffer都被封装在一个叫做media sample的com组件,它引出了imediasample接口.这个sample一般都有一个叫做内存分配器(alloctor)的com对象来创建,这个对象具有imemallocator接口.每一个pin之间的连接都要指定一个allocator,有时也有几个连接同用一个allocator.

   每一个allocator都要创建一个media sample池,并且给每一个sample分配一个内存buffer.每当一个filter需要一个buffer来填充数据,它就通过allocator的函数imemallocator::getbuffer.来获得一个sample.如果分配器allocator正好有空闲的sample,getbuffer立即返回一个指向该sample的指针.如果没有空闲的sample,该方法就阻塞,直到有一个sample可用为止.当该函数返回一个sample时,filter就将数据填充到buffer里,设置好标识,然后就将sample传递给下一个filter.

当一个renderfilter接收到一个sample时,它就检查该sample的时间戳,直到fliter graph的参考时钟表明该数据可用播放,filter就开始播放该数据.当数据播放完毕,filter释放sample,直到所有的filter都释放对该sample的引用,该sample的引用计数为0时,这个sample才返回到sample池.

  有时也许数据流的上游对buffer的填充比播放要快,即使这样,render filter也要按照时间戳播放数据,这样sample池中的sample数量就少,从而填充的速度减慢.

上面描述了在流中只有一个allocator的情景,实际上,在每条数据流中总是有好几个allocator,当一个sample被释放的时候,也许此时有好几个allocator都在等着该sample,这就有新的问题了,也许有的alloctor永远都不能被分配sample,陷入互锁状态.下面的图就演示了这种情形,decoder有数据需要压缩,因此它在等待renderer释放sample,但是,parser也在请求sample,它在等待decoder释放sample.

具体参加help

2 传输(transports)

为了在过滤器图表中传送媒体数据,directshow过滤器需要支持一些协议,称之为传输协议(transport).相连的过滤器必须支持同样的传输协议,否则不能交换媒体数据.


...   下一页
    摘要:工具栏一般使用在sdi或是mdi里。如果我们在一个dialog里新建了一个工具栏,它的提示信息可能就没有办法出来了。主要的原因是由于我们没有为这个工具栏写提示信息的消息映射函数。如果要增加的话。就可以这样。1.增加一个这样的函数处理函数afx_msg bool ontooltiptext( uint id, nmhdr * pnmhdr, lresult * presult );bool mydi......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE