Tag Archives: DirectShow

什么是硬件加速

简而言之,硬件加速就是利用硬件模块来替代软件算法以充分利用硬件所固有的快速特性。计算机显示使用硬件加速会快些,但会在投影仪或截图时发现显示区是黑的,这时就要关闭硬件加速(硬件加速反方向操作)

简介

  硬件解码生效的时候,系统是怎么运转的呢?现在我们有三个处理器,CPU、GPU和APU(不是加速处理器是声音处理器)。他们通过PCI/AGP/PCIE总线交换数据。
  1.CPU从文件系统里读出原始数据(Dire… 更多... “什么是硬件加速”

directshow的push和pull mode

directshow中filter分为source filter,transform filter,render filter。

push和pull mode是相对于source filter来说的。

source filter在directshow扮演的角色是制造或者生产数据,这些数据在graph中被传送修改到最后被渲染。

那么这里有个问题,这些数据时怎么传给下面的filter?

是下面不管要不要,都直接传送下去呢… 更多... “directshow的push和pull mode”

建立directshow的filter工程的过程

建立directshow的filter工程有2中方法:

1. 直接从DXSDK提供的samples中拷贝一个最接近你想要的filter的filter工程

比如你想要sourcefilter那么你可以直接拷贝ball这个工程作为你的工程,然后在此工程的基础上开发。

2. 从一个空的工程开始

a. 假设你使用visiualstudio,那么建立一个win32 dynamic dll工程,空工程就可以。

b. 添加一个def更多... “建立directshow的filter工程的过程”

查看directshow的filter的连接

在graphedit中我们可以看到filter,还有filter的pin,以及他们是怎么连接的。

我们在程序中添加filter,连接它们,我们没法可视化查看它们,但是我们可以通过graphedit中远程连接到我们程序中连接的filter,怎么做到呢?

directshow提供了一个

IRunningObjectTable::Register

方法,可以让我们把想要的查看的graphbuilder的注册,然… 更多... “查看directshow的filter的连接”

DirectShow中显示的图像是颠倒的

这些天在写source filter,读入一系列的视频序列帧从磁盘,然后把它们在

CSourceStream::FillBuffer()

中把读入的位图数据部分填入sample buffer中。

通过GraphEdit加载此sourcefilter并运行的时候发现图像时倒过来的。

后来查看media type发现其中关于位图高度的值为负值,原来是这个原因。

知道原因就知道怎么解决了。

CSourceStream:… 更多... “DirectShow中显示的图像是颠倒的”

调试directshow的filter

调试filter有2种方法

filter中使用outputdebugstring输出使用Dbgview查看,另外一种是巧妙是MesageBox,然后attach进程来调试。

下面详细说一下。

1. OutputDebugString + DbView

在filter的关键地方,使用OutputDebugString输出信息,然后利用其它程序,如GraphEdit,加载运行filter,打开Dbgview工具来查… 更多... “调试directshow的filter”