Directshow里面的Transform filter的问题
DS的Transform filter的问题:
Transform(IMediaSample *pIn, IMediaSample *pOut)中
long lSourceSize = pIn->GetActualDataLength();
long lDestSize = pOut->GetSize();
lDestSiz大小总是320X240,而lSourceSize=720X576,因为一开始设置的视频大小是720X576。从而导致视频大小不能超过320X240,一旦超过此尺寸,导致了后面的CopyMemory( (PVOID) pDestBuffer,(PVOID) pSourceBuffer,lSourceSize)内存错误。怪就怪在如果是USB摄像头到是可以,如果是PCI采集卡连接的CCD摄像机,就出现了上述问题。 这个视频处理的filter,如果一开始设定的视频大小不超过320x240是可以正常运行的,如果在开始的时候设定视频的大小为640x480,程序就运行不起来。就出现了刚开始我给您发送的那样错误了。
我在这个函数CheckTransfrom(const CMediaType *mtIn, const CMediaType *mtOut)里跟踪调试如下语句:
VIDEOINFO *pInput = (VIDEOINFO *) mtIn->Format();
VIDEOINFO *pOutput = (VIDEOINFO *) mtOut->Format();
long mInputWidth = pInput->bmiHeader.biWidth;
long mInputHeight = pInput->bmiHeader.biHeight;
long mOutputWidth = pOutput->bmiHeader.biWidth;
long mOutputHeight = pOutput->bmiHeader.biHeight;
看到的视频大小都是720x576
我在CheckTransform(const CMediaType *mtIn, const CMediaType *mtOut)中发现in的大小为720x576,out的大小也为720x576,为什么到Transform(IMediaSample *pSource, IMediaSample *pDest)中发现in的大小还是720x576,而out的大小变为了320x240了呢。
有位高人说是媒体类型改变,在Tranform()函数里重新分配out的内存大小,我是新手尝试很多次都是失败,被这个问题困扰了有两个星期了!哪位高人可以贴出动态媒体类型改变,重新设置out的媒体媒体类,并重新分配out内存大小的代码。或者发给兄弟一个类似的transform filter的源码,我的邮箱是:809279480@qq.com 。很愁啊,兄弟们帮帮忙。