CBaseAllocator.GetBuffer 方法
[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayer、 IMFMediaEngine 和 媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
方法 GetBuffer
检索包含缓冲区的媒体示例。 此方法实现 IMemAllocator::GetBuffer 方法。
语法
HRESULT GetBuffer(
IMediaSample **ppBuffer,
REFERENCE_TIME *pStartTime,
REFERENCE_TIME *pEndTime,
DWORD dwFlags
);
参数
-
ppBuffer
-
接收指向缓冲区的 IMediaSample 接口的指针。 调用方必须释放接口。
-
pStartTime
-
指向示例开始时间的指针。
-
pEndTime
-
指向示例结束时间的指针。
-
dwFlags
-
零个或多个标志的按位组合。 基类支持以下标志。
值 含义 - AM_GBF_NOWAIT
不要等待缓冲区变为可用。
返回值
返回以下 HRESULT 值之一。
返回代码 | 说明 |
---|---|
|
成功。 |
|
未提交分配器。 |
|
已超时。 |
备注
除非调用方在 dwFlags 中指定AM_GBF_NOWAIT标志,否则此方法将阻止,直到下一个示例可用。
检索到的媒体示例具有指向已分配缓冲区的有效指针。 调用方负责设置示例上的任何其他属性,例如时间戳、媒体时间或同步点属性。 有关详细信息,请参阅 IMediaSample。
在基类中,将忽略 pStartTime 和 pEndTime 参数。 派生类可以使用这些值。 例如, 视频呈现器 筛选器的分配器使用这些值来同步 DirectDraw 图面之间的切换。
如果方法需要等待样本,它会 (CBaseAllocator::m_lCount) 递增等待对象的计数,并在) (m_hSem信号灯上调用 WaitForSingleObject 函数。 当样本可用时,它会在分配器上调用 CBaseAllocator::ReleaseBuffer 方法,该方法通过 m_lCount (增加信号灯计数,从而释放等待的线程) 并将 m_lCount 重新设置为零。
要求
要求 | 值 |
---|---|
标头 |
|
库 |
|