IMFSourceReaderEx::AddTransformForStream 方法 (mfreadwrite.h)

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

Syntax

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

参数

[in] dwStreamIndex

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

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

[in] pTransformOrActivate

指向以下项之一的指针:

返回值

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

返回代码 Description
S_OK
成功。
MF_E_INVALIDMEDIATYPE
转换不支持当前流格式,并且无法进行转换。 有关详细信息,请参阅“注解”。
MF_E_INVALIDREQUEST
请求无效。
MF_E_INVALIDSTREAMNUMBER
dwStreamIndex 参数无效。

注解

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

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

  1. 调用 IMFSourceReader::SetCurrentMediaType 以设置要用于流的输出类型。 在此步骤中,可以指定仅包含主要类型和子类型 GUID 的媒体类型。 例如,若要获取 32 位 RGB 输出,请设置 主要类型的MFMediaType_VideoMFVideoFormat_RGB32子类型。 (有关详细信息,请参阅 媒体类型 GUID。)
  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

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

要求

Requirement 价值
最低支持的客户端 Windows 8 [桌面应用 |UWP 应用]
支持的最低服务器 Windows Server 2012 [桌面应用 |UWP 应用]
目标平台 Windows操作系统
Header mfreadwrite.h

另请参阅

IMFSourceReaderEx

源读取器