步骤 1。 选择基类
[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayer、 IMFMediaEngine 和 音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
这是 编写转换筛选器教程的步骤 1。
假设你决定编写筛选器而不是 DMO,则第一步是选择要使用的基类。 以下类适用于转换筛选器:
CTransformFilter 专为使用单独的输入和输出缓冲区的转换筛选器而设计。 这种筛选器有时称为复制转换筛选器。 当复制转换筛选器收到输入示例时,它会将新数据写入输出示例,并将输出示例传送到下一个筛选器。
CTransInPlaceFilter 设计用于修改原始缓冲区中的数据的筛选器,也称为转入筛选器。 当转位筛选器收到样本时,它会更改该样本中的数据,并在下游传递相同的样本。 筛选器的输入引脚和输出引脚始终与匹配的媒体类型连接。
CVideoTransformFilter 主要用于视频解码器。 它派生自 CTransformFilter,但包括当下游呈现器落后时删除帧的功能。
CBaseFilter 是泛型筛选器类。 此列表中的其他类都派生自 CBaseFilter。 如果它们都不适合,则可以回退此类。 但是,此类也需要你完成最多的工作。
![重要提示]
就地视频转换可能会对呈现性能产生严重影响。 就地转换需要对缓冲区执行读-修改-写操作。 如果内存驻留在图形卡上,读取操作会明显变慢。 此外,如果不仔细实现复制转换,也可能导致意外的读取操作。 因此,如果编写视频转换,应始终执行性能测试。
对于示例 RLE 编码器,最佳选择是 CTransformFilter 或 CVideoTransformFilter。 事实上,它们之间的差异在很大程度上是内部的,因此很容易从一个转换为另一个。 由于两个引脚上的媒体类型必须不同, 因此 CTransInPlaceFilter 类不适合此筛选器。 此示例将使用 CTransformFilter。
相关主题