(DirectX系列07)DirectShow MFC下Filter编码分析

本文介绍了MFC环境下Filter的编写方法,与Win32下的编写方式进行了对比,并提供了具体的代码示例,包括如何实现数据转换及输入类型检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    MFC下Filter的编写和Win32下Filter的编写极其相似,但又存在很多不同点,在Win32中需要去实现CreateInstance函数,而在MFC直接用NEW 动态产生,不过这并不代表不需要去维护Filter对象计数,因此在MFC 下Filter中依然需要调用AddRef函数来维护这个平衡;其它还不需要实现注册表注册等功能,如下代码;

////////////////////////////////////////////////////////////////////////////////
CAppTransform::CAppTransform(LPUNKNOWN pUnkOuter, HRESULT *phr) :
CTransInPlaceFilter(NAME("App Transform"), pUnkOuter, GUID_NULL, phr)
{
}

HRESULT CAppTransform::Transform(IMediaSample *pSample)
{
 // Override to do something inside the application
 // Such as grabbing a poster frame...
 // ...

    return S_OK;
}

// Check if we can support this specific proposed type and format
HRESULT CAppTransform::CheckInputType(const CMediaType *pmt)
{
 // We accept a series of raw media types
 if (pmt->majortype == MEDIATYPE_Video &&
  (pmt->subtype == MEDIASUBTYPE_RGB32 ||
  pmt->subtype == MEDIASUBTYPE_RGB24 ||
  pmt->subtype == MEDIASUBTYPE_RGB565 ||
  pmt->subtype == MEDIASUBTYPE_RGB555 ||
  pmt->subtype == MEDIASUBTYPE_UYVY ||
  pmt->subtype == MEDIASUBTYPE_YUY2))
 {
  return NOERROR;
 }
 return E_FAIL;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值