CBaseOutputPin.Deliver 方法

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

方法 Deliver 将媒体样本传送到连接的输入引脚。

语法

virtual HRESULT Deliver(
   IMediaSample *pSample
);

参数

pSample

指向示例 IMediaSample 接口的指针。

返回值

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

返回代码 说明
S_OK
成功。
VFW_E_NOT_CONNECTED
Pin 未连接。

备注

此方法调用输入引脚上的 IMemInputPin::Receive 方法。 如果 IMemInputPin::ReceiveCanBlock 方法返回S_OK,则接收可能会阻止

调用此方法后释放示例。 输入引脚可能会保留样本的引用计数,因此不要重复使用该示例。 始终调用 CBaseOutputPin::GetDeliveryBuffer 方法以获取新示例。

在调用此方法之前,请保留筛选器的关键部分。 否则,在方法调用期间,引脚可能会断开连接。 如果筛选器使用工作线程传递示例,请在筛选器准备好传递示例时保留关键部分。 否则,可以在筛选器的 IMemInputPin::Receive 方法中保存关键部分,筛选器在其中处理示例。

工作线程可能会造成潜在的死锁。 当线程持有关键部分时,它可能会等待筛选器中的状态更改。 同时,状态更改可能正在等待线程完成。 为防止这种情况,状态更改代码应发出终止线程的事件的信号,然后等待线程发出完成信号。

要求

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

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

另请参阅

CBaseOutputPin 类