IMFSourceReader::ReadSample 方法 (mfreadwrite.h)
从媒体源读取下一个示例。
语法
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。 可能的值包括(但并不限于)下表中的项。
返回代码 | 说明 |
---|---|
|
方法成功。 |
|
请求无效。 |
|
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 上可用。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 适用于 Windows Vista 的 Windows 7、Windows Vista 和平台更新补充 [桌面应用 |UWP 应用] |
最低受支持的服务器 | Windows Server 2008 R2 [桌面应用 |UWP 应用] |
目标平台 | Windows |
标头 | mfreadwrite.h |