CBaseInputPin.Receive 方法

Receive方法接收流中的下一个媒体示例。 此方法实现 IMemInputPin::Receive 方法。

语法

HRESULT Receive(
   IMediaSample *pSample
);

参数

pSample

指向示例的 IMediaSample 接口的 指针。

返回值

返回 HRESULT 值。 可能的值包括下表中列出的值。

返回代码 说明
S _ OK
成功。
S _ FALSE
引脚当前正在刷新;示例被拒绝。
E _ 指针
NULL 指针参数。
VFW _ E _ INVALIDMEDIATYPE
媒体类型无效。
VFW _ E _ 运行时 _ 错误
发生运行时错误。
VFW _ E _ 错误 _ 状态
引脚已停止。

备注

上游输出引脚调用此方法将示例传送给输入引脚。 输入引脚必须执行以下操作之一:

  • 在返回之前处理示例。
  • 返回并处理工作线程中的示例。
  • 拒绝示例。

如果引脚使用工作线程处理示例,则向此方法中的示例添加引用计数。 方法返回后,上游引脚释放示例。 当样本的引用计数达到零时,该示例将返回到分配器以重新使用。

此方法是同步的,可以阻止。 如果方法可能阻止,则固定的 CBaseInputPin::ReceiveCanBlock 方法应返回 S _ OK。

在基类中,此方法执行以下步骤:

  1. 调用 CBaseInputPin::CheckStreaming 方法,验证引脚现在可以处理样本。 例如,如果无法执行,则如果固定停止,则方法将失败。
  2. 检索示例属性,并检查格式是否已更改 (请参阅下面的) 。
  3. 如果格式已更改,则 方法将调用 CBasePin::CheckMediaType 方法,以确定新格式是否可接受。
  4. 如果新格式不可接受,该方法将调用 CBasePin::EndOfStream 方法,发布 EC _ ERRORABORT 事件,并返回错误代码。
  5. 假设没有错误,该方法将返回 S _ OK。

测试格式更改,如下所示:

在基类中,此方法不处理示例。 派生类必须重写此方法才能执行处理。 (此要求完全取决于 filter.) 派生类应调用基类方法,以检查前面所述的错误。

要求

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

Strmbase.lib (零售) ;
Str (sd.lib)

请参阅

CBaseInputPin 类