IMFTransform 配置

IMFTransform Configuration

我想编写一个 IMFTransform 来混合 2 个音频流。但理想情况下,我想以特定于流的方式应用它。例如,我只想混合特定持续时间的流。重申一下,确切的时间和持续时间在每种情况下都会有所不同。

问题是我在 IMFTransform 界面中没有看到任何允许我传递此信息的功能。我错过了什么吗?我应该用一些自定义方法或函数扩展 IMFTransform 接口吗?可接受的前进方向是什么?

您不需要扩展 IMFTransform 接口,这不是应该做的事情。您通常在同一个转换 class 上实现另一个私有接口,并使用常规 COM IUnknown::QueryInterface(或在某种意义上类似于 IMFGetService)使其可用。应用程序将创建一个 transofrm 实例,查询此附加接口并传递必要的配置。

我对这个项目使用了类似的方法:MFSkVideoRenderer

  • VideoShaderEffect.idl : 声明 COM 对象 (interface/method/library)
  • SinkVideoRenderer.h : 添加 public IMFVideoShaderEffect,并声明方法 (STDMETHOD(FunctionName)();)
  • SinkVideoRenderer.cpp : 实现方法 HRESULT CSinkVideoRenderer::FunctionName(){ return S_OK: }(如果代码简单,也可以内联在 SinkVideoRenderer.h 中)
  • include : #include "VideoShaderEffect_h.h"(将从 .idl 生成)
  • 在另一个程序中使用:#include "VideoShaderEffect_i.c"(也将从 .idl 生成)示例参见 MFNodePlayer

您将需要了解一些 MIDL