简单延迟DMO的设计与编码
简单延迟DMO的设计思路
简单延迟DMO(DirectX Media Object)的设计十分直观。输入样本进入DMO后,会被保留特定时长(在头文件中定义),然后与后续输入样本混合,最终传递到输出端。当DMO开始运行时,在输入样本有足够时间作为输出样本出现之前,会输出静音样本。这一过程会不断重复,直到没有更多输入样本。当所有剩余输出样本都发送给DMO的调用者后,DMO停止运行。
CDelay类的定义
DMO的定义和内部结构与DirectShow过滤器类似,有用于协商媒体类型、缓冲区大小和执行数据转换的方法。不同的是,DirectShow过滤器通常是 CBaseFilter 或 CTransformFilter 的派生类,而DMO是 IMediaObjectImpl 类模板的派生类。以下是简单延迟类 CDelay 的定义:
class ATL_NO_VTABLE CDelay :
public IMediaObjectImpl<CDelay, 1, 1>, // DMO Template 1 input, 1 output
public CComObjectRootEx<CComMultiThreadModel>,
public CComCoClass<CDelay, &CLSID_Delay>,
public IMediaObjectInPlace
{
public:
C
超级会员免费看
订阅专栏 解锁全文
40

被折叠的 条评论
为什么被折叠?



