CBaseAllocator.Alloc 方法

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

方法 Alloc 为缓冲区分配内存。

语法

virtual HRESULT Alloc();

参数

此方法没有任何参数。

返回值

返回以下 HRESULT 值之一。

返回代码 说明
S_FALSE
缓冲区要求未更改。
S_OK
缓冲区要求已更改。
VFW_E_SIZENOTSET
未设置缓冲区要求。

备注

此方法由 CBaseAllocator::Commit 方法调用。

在基类中,此方法不分配任何内存。 如果未设置缓冲区要求,则返回错误;如果要求未更改,则S_FALSE;如果要求已更改,则返回S_OK。

派生类应重写此方法以执行实际内存分配。 通常,派生类将执行以下步骤:

  1. 调用基类实现,以确定内存是否确实需要分配。
  2. 分配内存。
  3. 创建包含步骤 2 中内存块的 CMediaSample 对象。
  4. (CBaseAllocator::m_lFree) ,将每个 CMediaSample 对象添加到免费示例列表中。

有关示例,请参阅 CMemAllocator::Alloc

要求

要求
标头
Amfilter.h (包括 Streams.h)

Strmbase.lib (零售版本) ;
Strmbasd.lib (调试生成)

另请参阅

CBaseAllocator 类