ISampleGrabber::GetCurrentBuffer 方法
[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayer、 IMFMediaEngine 和 音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
注意
[已弃用。 此 API 可能会从 Windows 的未来版本中删除。]
GetCurrentBuffer 方法检索与最新示例关联的缓冲区的副本。
语法
HRESULT GetCurrentBuffer(
[in, out] long *pBufferSize,
[out] long *pBuffer
);
参数
-
pBufferSize [in, out]
-
指向缓冲区大小的指针。 如果 pBuffer 为 NULL,则此参数接收所需的缓冲区大小(以字节为单位)。 如果 pBuffer 不为 NULL,请将此参数设置为等于缓冲区的大小(以字节为单位)。 在输出时, 参数接收复制到缓冲区中的字节数。 此值可能小于缓冲区的大小。
-
pBuffer [out]
-
指向大小 为 pBufferSize 或 NULL 的字节数组的指针。 如果此参数不为 NULL,则当前缓冲区将复制到数组中。 如果此参数为 NULL, 则 pBufferSize 参数接收所需的缓冲区大小。
返回值
返回以下值之一。
返回代码 | 说明 |
---|---|
|
未缓冲样本。 调用 ISampleGrabber::SetBufferSamples。 |
|
指定的缓冲区不够大。 |
|
NULL 指针参数。 |
|
成功。 |
|
筛选器未连接。 |
|
筛选器尚未收到任何样本。 若要提供示例,请运行或暂停图形。 |
备注
若要激活缓冲,请调用值为 TRUE 的 ISampleGrabber::SetBufferSamples。
调用此方法两次。 在第一次调用时,将 pBuffer 设置为 NULL。 缓冲区的大小以 pBufferSize 形式返回。 然后分配数组并再次调用 方法。 第二次调用时,在 pBufferSize 中传递数组的大小,并在 pBuffer 中传递数组的地址。 如果数组不够大,该方法将返回E_OUTOFMEMORY。
pBuffer 参数类型化为长指针,但缓冲区的内容取决于数据的格式。 调用 ISampleGrabber::GetConnectedMediaType 以获取格式的媒体类型。
在筛选器图运行时,请勿调用此方法。 筛选器图运行时,每当收到新样本时,样本抓取器筛选器将覆盖缓冲区的内容。 使用此方法的最佳方法是使用“一次性模式”,这会在收到第一个样本后停止图形。 若要设置单次模式,请调用 ISampleGrabber::SetOneShot。
筛选器不缓冲预生成样本,也不缓冲AM_SAMPLE2_PROPERTIES结构的 dwStreamId 成员为AM_STREAM_MEDIA以外的任何样本。
注意
头文件 Qedit.h 与版本 7 之后的 Direct3D 标头不兼容。
注意
若要获取 Qedit.h,请下载适用于 Windows Vista 和 .NET Framework 3.0 的Microsoft Windows SDK更新。 Qedit.h 在 Windows 7 和 .NET Framework 3.5 Service Pack 1 的Microsoft Windows SDK中不可用。
要求
要求 | 值 |
---|---|
标头 |
|
库 |
|
另请参阅