CBaseOutputPin.Deliver 方法
[与此页面关联的功能 DirectShow 是一项旧功能。 它已被 MediaPlayer、 IMFMediaEngine 和 媒体基金会中的音频/视频捕获取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer、 IMFMediaEngine 和 Media Foundation 中的音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]
方法 Deliver
将媒体样本传送到连接的输入引脚。
语法
virtual HRESULT Deliver(
IMediaSample *pSample
);
参数
-
pSample
-
指向示例 IMediaSample 接口的指针。
返回值
返回 HRESULT 值。 可能的值包括下表中列出的值。
返回代码 | 说明 |
---|---|
|
成功。 |
|
Pin 未连接。 |
备注
此方法调用输入引脚上的 IMemInputPin::Receive 方法。 如果 IMemInputPin::ReceiveCanBlock 方法返回S_OK,则接收可能会阻止。
调用此方法后释放示例。 输入引脚可能会保留样本的引用计数,因此不要重复使用该示例。 始终调用 CBaseOutputPin::GetDeliveryBuffer 方法以获取新示例。
在调用此方法之前,请保留筛选器的关键部分。 否则,在方法调用期间,引脚可能会断开连接。 如果筛选器使用工作线程传递示例,请在筛选器准备好传递示例时保留关键部分。 否则,可以在筛选器的 IMemInputPin::Receive 方法中保存关键部分,筛选器在其中处理示例。
工作线程可能会造成潜在的死锁。 当线程持有关键部分时,它可能会等待筛选器中的状态更改。 同时,状态更改可能正在等待线程完成。 为防止这种情况,状态更改代码应发出终止线程的事件的信号,然后等待线程发出完成信号。
要求
要求 | 值 |
---|---|
标头 |
|
库 |
|