开发Filter


   一、开发Filter 
   1. 生成GUID
      // {C26EA242-43E4-4326-9304-1CB6ECD29B25} 
        DEFINE_GUID(CLSID_GrayFilter,  
        0xc26ea242, 0x43e4, 0x4326, 0x93, 0x4, 0x1c, 0xb6, 0xec, 0xd2, 0x9b, 0x25); 
       
   2. 继承自Transform Filter 
   3. 按格式改写构造函数 
        CVideoGray(TCHAR *tszName, LPUNKNOWN pUnk, HRESULT *phr) : 
       CTransformFilter(NAME("Video to Gray"), pUnk, CLSID_GrayFilter) 
        {  } 
   4. 改写CTransformFilter几个重要函数 
        HRESULT CheckInputType(const CMediaType *mtIn); 
        HRESULT CheckTransform(const CMediaType *mtIn, const CMediaType *mtOut); 
        HRESULT DecideBufferSize(IMemAllocator *pAlloc,  
                    ALLOCATOR_PROPERTIES *pProp); 
        HRESULT GetMediaType(int iPosition, CMediaType *pMediaType); 
        HRESULT Transform(IMediaSample *pIn, IMediaSample *pOut); 
CheckInputType是由tranformfiltr的输入pin调用的用来检查本Filter的输入媒体是否合法;
CheckTransform是由tranformfiltr的输出pin调用的用来检查本filter的输出是否和合法;
GetMediaType是有由tranformfiltr的输出pin调用的用来获取该输出端口支持的媒体格式供下游filter的枚举
DecideBufferSize是由tranformfiltr的输出pin调用的来确定buffer的数量和大小
上游filter通过调用filter上输入pin上的IMemInputPin::Receive方法,将sample传递到filter,filter调用CTransformFilter::Transform方法来处理数据


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ww506772362

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值