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”

linux+eclipse调试ffmpeg

虽然可以用GDB调试ffmpeg,但是对于习惯在IDE下面调试的人来说,还是很不习惯。

那么怎样才能在IDE下面调试,又有什么IDE适合ffmpeg的调试呢。

那就是eclipse.

前提

1. 已经下载了ffmpeg源码并且已经编译通过。例如使用下面的选项编译:

./configure –enable-memalign-hack –enable-static

如果编译有什么问题,可以参考… 更多... “linux+eclipse调试ffmpeg”

windows+cygwin+ffmpeg+x264

其实标题已经说的很清楚了,这里所说的是在windws上利用cygwin来编译ffmpeg+libx264。关键就是+libx264。因为我们以前编译ffmpeg没有使用–enable-libx264。关于这部分参看我的文章:

http://blog.csdn.net/huangxiansheng1980/article/details/5712003

这里要说的是怎么让我们的ffmpeg支… 更多... “windows+cygwin+ffmpeg+x264”

录制屏幕-ffmpeg

ffmpeg可以录制屏幕到视频文件: 

ffmpeg -f x11grab -y -r 12 -s 800x600 -i :0.0+480,200 -vcodec ffv1 -sameq ./out.avi

800x600一定和你分辨率匹配,否则会出错。

采集摄像头

ffmpeg -f oss -f video4linux2 -s 320×240 -i /dev/video0 out.mpg

 

只不过只支持linux。

版权所有,禁止转载. 如需更多... “录制屏幕-ffmpeg”