IMemAllocator::GetBuffer 方法 (strmif.h)
[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayer、 IMFMediaEngine 和 媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
GetBuffer 方法检索包含空缓冲区的媒体示例。
语法
HRESULT GetBuffer(
[out] IMediaSample **ppBuffer,
[in] REFERENCE_TIME *pStartTime,
[in] REFERENCE_TIME *pEndTime,
[in] DWORD dwFlags
);
参数
[out] ppBuffer
接收指向缓冲区的 IMediaSample 接口的指针。 调用方必须释放接口。
[in] pStartTime
指向示例开始时间的指针,或 NULL。
[in] pEndTime
指向示例结束时间的指针,或 NULL。
[in] dwFlags
以下标志中零个或多个的按位组合:
标志 | 描述 |
---|---|
AM_GBF_NOTASYNCPOINT | 此示例不是同步点。 此示例不允许动态格式更改。 当在覆盖混音器或 VMR 上调用时,此标志表示返回的缓冲区将包含与上次传递的映像相同的映像。 |
AM_GBF_PREVFRAMESKIPPED | 此示例是中断后的第一个示例。 (只有视频呈现器使用此标志。) |
AM_GBF_NOWAIT | 不要等待缓冲区变为可用。 |
AM_GBF_NODDSURFACELOCK | 与 视频混合呈现器筛选器 7 一起使用,以请求未锁定的 DirectDraw 图面。 有关详细信息,请参阅 使用 Direct3D 呈现目标。 |
返回值
返回 HRESULT 值。 可能的值包括下表中显示的值。
返回代码 | 说明 |
---|---|
|
成功。 |
|
分配器已解除提交。 |
|
已超时。 |
备注
默认情况下,此方法会阻止,直到可用示例可用或分配器已取消提交。 如果调用方指定了AM_GBF_NOWAIT标志,并且没有可用的示例,则分配器可以立即返回返回值VFW_E_TIMEOUT。 但是,分配器不需要支持此标志。
ppBuffer 中返回的示例具有有效的缓冲区指针。 调用方负责设置示例上的任何其他属性,例如时间戳、媒体时间或同步点属性。 (有关详细信息,请参阅 IMediaSample.)
pStartTime 和 pEndTime 参数不应用于示例。 分配器可能使用这些值来确定它检索的缓冲区。 例如, 视频呈现器 筛选器使用这些值来同步 DirectDraw 图面之间的切换。 若要在示例上设置时间戳,请调用 IMediaSample::SetTime 方法。
在调用此方法之前,必须调用 IMemAllocator::Commit 方法。 调用 IMemAllocator::D ecommit 方法后,此方法失败。
要求
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | strmif.h (包括 Dshow.h) |
Library | Strmiids.lib |