从媒体源读取下一个示例。
Syntax
HRESULT ReadSample(
[in] DWORD dwStreamIndex,
[in] DWORD dwControlFlags,
[out] DWORD *pdwActualStreamIndex,
[out] DWORD *pdwStreamFlags,
[out] LONGLONG *pllTimestamp,
[out] IMFSample **ppSample
);
参数
[in] dwStreamIndex
要从中提取数据的流。 该值可以是以下任一值。
[in] dwControlFlags
MF_SOURCE_READER_CONTROL_FLAG枚举中的零个或多个标志的按位 OR。
[out] pdwActualStreamIndex
接收流的从零开始的索引。
[out] pdwStreamFlags
从MF_SOURCE_READER_FLAG枚举接收零个或多个标志的按位 OR。
[out] pllTimestamp
接收示例的时间戳,或 pdwStreamFlags 中指示的流事件的时间。 时间以 100 纳秒为单位提供。
[out] ppSample
接收指向 IMFSample 接口或值 NULL 的指针(请参阅备注)。 如果此参数收到非 NULL 指针,则调用方必须释放接口。
返回值
该方法返回 HRESULT。 可能的值包括但不限于下表中的值。
| 返回代码 | Description |
|---|---|
|
方法成功。 |
|
请求无效。 |
|
dwStreamIndex 参数无效。 |
|
刷新作挂起。 请参阅 IMFSourceReader::Flush。 |
|
参数无效。 请参阅注解。 |
注解
如果未选择请求的流,则返回代码 MF_E_INVALIDREQUEST。 请参阅 IMFSourceReader::SetStreamSelection。
此方法可以同步或异步完成。 如果在创建源读取器时提供回调指针,则该方法是异步的。 否则,该方法是同步的。 有关设置回调指针的详细信息,请参阅 MF_SOURCE_READER_ASYNC_CALLBACK。
异步模式
在异步模式下:-
[out]所有参数都必须为 NULL。 否则,该方法将返回 E_INVALIDARG。 - 该方法会立即返回。
- 作完成后,将调用应用程序的 IMFSourceReaderCallback::OnReadSample 方法。
- 如果发生错误,该方法可以同步或异步失败。 检查 ReadSample 的返回值,并检查 IMFSourceReaderCallback::OnReadSample 的 hrStatus 参数。
同步模式
在同步模式下:- pdwStreamFlags 和 ppSample 参数不能为 NULL。 否则,该方法将返回 E_POINTER。
- pdwActualStreamIndex 和 pllTimestamp 参数可以为 NULL。
- 该方法会阻止下一个示例可用。
此方法可以在 pdwStreamFlags 参数中返回标志,而无需在 ppSample 中返回媒体示例。 因此,即使方法成功, ppSample 参数也可以接收 NULL 指针。 例如,当源读取器到达流的末尾时,它会返回 pdwStreamFlags 中的MF_SOURCE_READERF_ENDOFSTREAM标志,并将 ppSample 设置为 NULL。
如果流中存在间隙,pdwStreamFlags 将接收MF_SOURCE_READERF_STREAMTICK标志,ppSample 为 NULL,pllTimestamp 指示间隔发生的时间。
如果安装了 Windows Vista 平台更新补充,则 Windows Vista 上提供了此接口。
要求
| Requirement | 价值 |
|---|---|
| 最低支持的客户端 | 适用于 Windows Vista 的 Windows 7、Windows Vista 和平台更新补充 [桌面应用 |UWP 应用] |
| 支持的最低服务器 | Windows Server 2008 R2 [桌面应用 |UWP 应用] |
| 目标平台 | Windows操作系统 |
| Header | mfreadwrite.h |