IMFSourceReaderEx::AddTransformForStream 方法 (mfreadwrite.h)

将转换(如音频或视频效果)添加到流中。

语法

HRESULT AddTransformForStream(
  [in] DWORD    dwStreamIndex,
  [in] IUnknown *pTransformOrActivate
);

参数

[in] dwStreamIndex

要配置的流。 该值可以是以下任一值。

含义
0–0xFFFFFFFB
流的从零开始的索引。
MF_SOURCE_READER_FIRST_VIDEO_STREAM
0xFFFFFFFC
第一个视频流。
MF_SOURCE_READER_FIRST_AUDIO_STREAM
0xFFFFFFFD
第一个音频流。

[in] pTransformOrActivate

指向以下项之一的指针:

返回值

此方法可以返回其中一个值。

返回代码 说明
S_OK
成功。
MF_E_INVALIDMEDIATYPE
转换不支持当前流格式,并且无法进行转换。 有关更多信息,请参见备注。
MF_E_INVALIDREQUEST
请求无效。
MF_E_INVALIDSTREAMNUMBER
dwStreamIndex 参数无效。

注解

此方法尝试在当前处理链的末尾添加转换。

若要使用此方法,请进行以下调用序列:

  1. 调用 IMFSourceReader::SetCurrentMediaType 以设置所需的流输出类型。 在此步骤中,可以指定仅包含主要类型和子类型 GUID 的媒体类型。 例如,若要获取 32 位 RGB 输出,请设置 MFMediaType_Video 的主要类型和 MFVideoFormat_RGB32的子类型。 (有关详细信息,请参阅 媒体类型 GUIDs.)
  2. 调用 AddTransformForStream。 如果源读取器成功连接转换,则会在转换上设置输出类型。
  3. 调用 IMFSourceReader::GetCurrentMediaType 从转换获取输出类型。 此方法返回具有完整格式说明的媒体类型。
  4. (可选)如果要修改输出类型,请再次调用 IMFSourceReader::SetCurrentMediaType ,以在转换上设置完整的媒体类型。
AddTransformForStream 方法不会在处理链中插入解码器。 如果本机流格式已编码,并且转换需要未压缩格式,则调用 SetCurrentMediaType 以设置上一个列表) (步骤 1 的未压缩格式。 但是,如果需要,方法将插入视频处理器以在 RGB 和 YUV 格式之间转换。

如果使用 MF_READWRITE_DISABLE_CONVERTERSMF_SOURCE_READER_ENABLE_VIDEO_PROCESSING 属性配置了源读取器,则方法将失败。

在异步模式下,如果示例请求挂起,方法也会失败。 在这种情况下,请等待 OnReadSample 回调被调用,然后再调用 方法。 有关在异步模式下使用源读取器的详细信息,请参阅 IMFSourceReader::ReadSample

可以在流式处理期间随时添加转换。 但是,方法在插入转换之前不会刷新或排出管道。 因此,如果数据已在管道中,则不保证下一个示例应用转换。

要求

要求
最低受支持的客户端 Windows 8 [桌面应用 |UWP 应用]
最低受支持的服务器 Windows Server 2012 [桌面应用 |UWP 应用]
目标平台 Windows
标头 mfreadwrite.h

另请参阅

IMFSourceReaderEx

源读取器