ISampleGrabber::GetCurrentBuffer 方法

[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayerIMFMediaEngine音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

注意

[已弃用。 此 API 可能会从 Windows 的未来版本中删除。]

 

GetCurrentBuffer 方法检索与最新示例关联的缓冲区的副本。

语法

HRESULT GetCurrentBuffer(
  [in, out] long *pBufferSize,
  [out]     long *pBuffer
);

参数

pBufferSize [in, out]

指向缓冲区大小的指针。 如果 pBufferNULL,则此参数接收所需的缓冲区大小(以字节为单位)。 如果 pBuffer 不为 NULL,请将此参数设置为等于缓冲区的大小(以字节为单位)。 在输出时, 参数接收复制到缓冲区中的字节数。 此值可能小于缓冲区的大小。

pBuffer [out]

指向大小 为 pBufferSizeNULL 的字节数组的指针。 如果此参数不为 NULL,则当前缓冲区将复制到数组中。 如果此参数为 NULL则 pBufferSize 参数接收所需的缓冲区大小。

返回值

返回以下值之一。

返回代码 说明
E_INVALIDARG
未缓冲样本。 调用 ISampleGrabber::SetBufferSamples
E_OUTOFMEMORY
指定的缓冲区不够大。
E_POINTER
NULL 指针参数。
S_OK
成功。
VFW_E_NOT_CONNECTED
筛选器未连接。
VFW_E_WRONG_STATE
筛选器尚未收到任何样本。 若要提供示例,请运行或暂停图形。

 

备注

若要激活缓冲,请调用值为 TRUEISampleGrabber::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中不可用。

 

要求

要求
标头
Qedit.h

Strmiids.lib

另请参阅

使用示例抓取器

ISampleGrabber 接口