这里着重介绍transformfilter的编写。
1, 写dll和com的接口,随便找个程序照猫画虎一下就行了,这里不赘叙了。
2, 写filter的接口,继承自CtransformFilter.下面介绍一下CtransformFilter.
CtransformFilter是一个基类,有两个重要的数据成员CtransformInputPinm_pInput;
CtransformOutputPin m_pOutput. 从这两个数据成员可以得到当前输入输出的
currentMediaType.
写filter就是实现CtransformFilter的一些虚函数。
3, 实现CheckInputType(const CMediaType *mtIn),该函数检查输入视频流的类型,通过(VIDEOINFO *) mtIn->Format()可以得到输入图像的高度,宽度。
4, 实现GetMediaType(int iPosition, CMediaType *pMediaType),该函数初始化输出视频流的类型,
5, 实现CheckTransform(const CMediaType*mtIn,const CMediaType *mtOut),该函数检查输入输出视频流是否兼容。
6, 实现DecideBufferSize(IMemAllocator*pAlloc,ALLOCATOR_PROPERTIES *pProperties),该函数在为输出端口分配buffer时,决定buffer的大小。
7, 实现Transform(IMediaSample *pIn, IMediaSample *pOut),该函数是最核心的函数,pIn是输入数据端口,pOut是输出数据端口,实现数据转换(编码或解码)