本文准备总结一些 Direct Show 常用的API接口函数,方便以后查询回忆。如果这里没有你想了解的函数,你可以自行搜索MSDN + 函数名去 MSDN 查找你想要了解的函数,也可以查看百度百科相关。 (持续更新中)

CoInitialize

在当前线程上初始化 COM 库。

Syntax

HRESULT CoInitialize(LPVOID pvReserved);

Parameters

pvReserved:此参数是保留参数,必须为 NULL。

返回值

返回一个 HRESULT 值。可能的值包括:

  • S_OK:COM 库在此线程上成功初始化。
  • S_FALSE:COM 库已经在此线程上初始化过了。

备注

新应用程序应调用 CoInitializeEx 而不是 CoInitialize。CoInitializeEx 提供相同功能的同时还提供了参数明确指定线程的并发模型。CoInitialize 调用 CoInitializeEx 并将并发模型指定为单线程单元。

参考自:MSDN CoInitialize function

CoUninitialize

关闭当前线程上的 COM 库,卸载该线程加载的所有 DLL,释放该线程维护的所有其他资源,并强制关闭该线程上的所有 RPC 连接。

Syntax

void CoUninitialize();

Parameters

此函数没有参数。

返回值

此函数不返回值。

备注

线程每次成功调用 CoInitialize 或 CoInitializeEx 函数后,都必须调用相对应的 CoUninitialize 函数将 COM 库再关闭。

参考:MSDN CoUninitialize function

CoCreateInstance

用指定的类标识符创建一个未初始化的 COM 对象。

Syntax

HRESULT CoCreateInstance(
REFCLSID rclsid,
LPUNKNOWN pUnkOuter,
DWORD dwClsContext,
REFIID riid,
LPVOID *ppv
);

Parameters

  • rclsid:创建的 COM 对象的类标识符(CLSID)。
  • pUnkOuter:指向接口 IUnknown 的指针,大多数情况下都设置为 NULL。
  • dwClsContext:运行新创建对象的代码的上下文。该值取自枚举 CLSCTX
  • riid:创建的 COM 对象的接口标识符(IID)。
  • ppv:用来接收指向 COM 对象接口地址的指针变量。

返回值

返回一个 HRESULT 值。具体的值可去 MSDN 对应页面查看。

备注

如果要在本地系统上仅创建一个对象,请调用 CoCreateInstance。要在远程系统上创建单个对象,请调用 CoCreateInstanceEx 函数。要基于单个 CLSID 创建多个对象,请调用 CoGetClassObject 函数。

参考:MSDN CoCreateInstance百度百科 CoCreateInstance

IUnknown::QueryInterface

通过此方法来查询 COM 对象是否支持某个特定的接口。

Syntax

HRESULT QueryInterface(REFIID riid, void** ppvObject);

Parameters

  • riid:指明需要查询的接口的标识符(IID)。
  • ppvObject:指向 COM 对象中 riid 参数标识的接口指针的地址。

返回值

如果支持该接口,则此方法返回 S_OK,否则返回 E_NOINTERFACE。

备注

因为 IGraphBuilder 是从 IFilterGraph 这个类继承过来的,拥有 IFilterGraph 提供的所有方法。而 IFilterGraph 接口从 IUnknown 这个接口继承过来的,所以 IGraphBuilder 可以执行IGraphBuilder::QueryInterface

参考:MSDN IUnknown::QueryInterface method

IGraphBuilder::RenderFile

构建一个渲染特定文件的 filter graph。

Syntax

HRESULT RenderFile(LPCWSTR lpcwstrFile, LPCWSTR lpcwstrPlayList);

Parameters

  • lpcwstrFile:指定包含媒体文件名的宽字符字符串。
  • lpcwstrPlayList:保留参数,必须为 NULL。

返回值

返回一个 HRESULT 值。具体的值可去 MSDN 对应页面查看。

备注

如果 lpwstrFile 参数指定了媒体文件,则该方法将会构建一个 filter graph 来播放。

参考:MSDN IGraphBuilder::RenderFile

IMediaControl::Run

运行 filter graph 中的所有 filter。当 graph 运行时,数据在 graph 中移动并被渲染。

Syntax

HRESULT Run();

Parameters

此函数没有参数。

返回值

返回一个 HRESULT 值。具体的值可去 MSDN 对应页面查看。

备注

如果 filter graph 已停止,则此方法将在运行之前暂停该 graph。如果该 graph 已经在运行,则该方法返回 S_OK,但无效。

成功调用,一般 graph 将一直运行,直到应用程序调用 IMediaControl :: PauseIMediaControl :: Stop 方法为止。当回放到达 stream 的末尾时,graph 将继续运行,但是 filter 不再流化任何数据。此时,应用程序可以暂停或停止 graph。

参考:MSDN IMediaControl::Run

IMediaEvent::WaitForCompletion

等待 filter graph 渲染所有可用数据。filter graph 必须正在运行,否则该方法将失败。

Syntax

HRESULT WaitForCompletion(long msTimeout, long *pEvCode);

Parameters

msTimeout:超时时间,以毫秒为单位。传递 0 立即返回。传递值 INFINITE 无限期阻塞。

pEvCode:指向接收事件代码的变量的指针。

返回值

返回一个 HRESULT 值。可能的值包括:

  • S_OK:成功。
  • E_ABORT:超时时间已到。
  • VFW_E_WRONG_STATE:filter graph 未运行。

备注

该方法将一直阻塞,直到超时到期或发生以下事件之一:

参考:MSDN IMediaEvent::WaitForCompletion

ICaptureGraphBuilder2::SetFiltergraph

为 capture graph builder 指定要使用的 filter graph。

Syntax

HRESULT SetFiltergraph(IGraphBuilder* pfg);

Parameters

返回值

返回一个 HRESULT 值。具体的值可去 MSDN 对应页面查看。

备注

如果不调用此方法,则 capture graph builder 会在需要时自动创建一个 filter graph。如果 capture graph builder 已经具有 filter graph,则此方法返回 E_UNEXPECTED。

参考:MSDN ICaptureGraphBuilder2::SetFiltergraph

ICreateDevEnum::CreateClassEnumerator

创建指定 device category 的 enumerator(枚举)。

Syntax

HRESULT CreateClassEnumerator(
REFCLSID clsidDeviceClass ,
IEnumMoniker ppEnumMoniker ,
DWORD dwFlags
);

Parameters

  • clsidDeviceClass:[in]指定 device category 的类标识符(CLSID)。
  • ppEnumMoniker:[out]接收 IEnumMoniker 接口指针的地址。
  • dwFlags:[in]0 个或多个标志的按位组合。如果为 0,则该方法枚举类别中的每个 filter。更多标志请查看:ICreateDevEnum::CreateClassEnumerator

返回值

返回一个 HRESULT 值。具体的值可去 MSDN 对应页面查看。

备注

参考:MSDN ICreateDevEnum::CreateClassEnumerator

IMoniker::BindToObject

绑定到指定对象。绑定过程包括查找对象,必要时将其置于运行状态,并为调用者提供指向所标识对象上指定接口的指针。

Syntax

HRESULT BindToObject(
IBindCtx *pbc,
IMoniker *pmkToLeft,
REFIID riidResult,
void ppvResult
);

Parameters

  • pbc:指向绑定上下文对象上的 IBindCtx 接口的指针,此绑定操作中使用该指针。
  • pmkToLeft:此参数主要由 moniker 实现者使用,以启用复合名称的各个组件之间的协作。Moniker 客户端应使用 NULL。
  • riidResult:用于与 moniker 标识的对象进行通信的接口 IID。
  • ppvResult:接收 riid中 请求的接口指针的地址。成功返回后,ppvResult 包含指向 moniker 标识的对象的请求接口指针。

返回值

返回一个 HRESULT 值。具体的值可去 MSDN 对应页面查看。

备注

BindToObject 实现了别名的主要功能,该功能是查找由别名标识的对象,并返回指向其接口之一的指针。

参考:MSDN IMoniker::BindToObject method

IFilterGraph::AddFilter

此方法将 filter 添加到 filter graph 并使用 pName 参数对其进行命名。

Syntax

HRESULT AddFilter(IBaseFilter* pFilter, LPCWSTR pName);

Parameters

  • pFilte:[in]要加入到 filter graph 中的 filter。
  • pName:[in] 加入 filter 的名称。

返回值

返回一个 HRESULT 值。具体的值可去 MSDN 对应页面查看。

备注

BindToObject 实现了别名的主要功能,该功能是查找由别名标识的对象,并返回指向其接口之一的指针。

参考:MSDN IMoniker::BindToObject method

IUnknown::AddRef

增加指向 COM 对象的接口指针的引用计数。复制接口指针时,应调用此方法。

Syntax

ULONG AddRef();

Parameters

此函数没有参数。

返回值

该方法返回新的引用计数。此值仅用于测试目的。

备注

COM 对象使用每个接口的引用计数机制来确保该对象不会超出对其的引用。您可以使用AddRef 来稳定接口指针的副本。当克隆指针的寿命必须超过原始指针的寿命时,也可以调用它。必须通过调用 IUnknown::Release 释放克隆的指针。

参考:MSDN IUnknown::AddRef

ICaptureGraphBuilder2::RenderStream

此方法可以将 source filter 上的 output pin 连接到 sink filter,也可以通过中间 filter 连接。

Syntax

HRESULT RenderStream(
const GUID* pCategory,
const GUID* pType,
IUnknown* pSource,
IBaseFilter* pIntermediate,
IBaseFilter* pSink
);

Parameters

  • pCategory:[in]指向 AMPROPERTY_PIN_CATEGORY 属性集中的 pin 类别的指针(请参见 Pin属性集)。使用 NULL 可以匹配任何类别。以下列表显示了典型类别。

    • PIN_CATEGORY_CAPTURE
    • PIN_CATEGORY_PREVIEW
    • PIN_CATEGORY_CC
  • pType:[in]指向主要类型 GUID 的指针,该 GUID 指定输出 pin 的媒体类型;或 NULL 以使用任何 pin,而与媒体类型无关。有关可能值的列表,请参考 Media Types and Sub Types

  • pSource:[in]指定一个指向连接的起始 filter 或输出 pin 的指针。

  • pIntermediate:[in]指向中间 filter (例如压缩 filter)的 IBaseFilter 接口的指针。可以为 NULL。

  • pSink:[in]指向 sink filter(例如 renderer 或 mux filter)的 IBaseFilter 接口的指针。如果值为 NULL,则该方法使用默认的 renderer(渲染器)。

返回值

返回一个 HRESULT 值。具体的值可去 MSDN 对应页面查看。

备注

该方法通过将两个或多个 filter 连接在一起形成一个流:

  • PSource 参数指定链的开始,或者一个 filter 或输出 pin。
  • pIntermediate 参数指定的中间 filter,典型地是压缩 filter。此参数可以为 NULL。
  • pSink 参数指定链的端部的 filter。通常,此 filter 是用于预览的 renderer,或者是用于文件捕获的多路复用器。

参考:MSDN ICaptureGraphBuilder2::RenderStream

[扩展] 常用 CLSID

CLSID_FilterGraph:在共享工作线程上创建 Filter Graph Manager。

CLSID_CaptureGraphBuilder2:用于创建 capture graph builder。

DirectShow 常用函数总结的更多相关文章

  1. oracle常用函数及示例

    学习oracle也有一段时间了,发现oracle中的函数好多,对于做后台的程序猿来说,大把大把的时间还要学习很多其他的新东西,再把这些函数也都记住是不太现实的,所以总结了一下oracle中的一些常用函 ...

  2. 总结js常用函数和常用技巧(持续更新)

    学习和工作的过程中总结的干货,包括常用函数.常用js技巧.常用正则表达式.git笔记等.为刚接触前端的童鞋们提供一个简单的查询的途径,也以此来缅怀我的前端学习之路. PS:此文档,我会持续更新. Aj ...

  3. [转]SQL 常用函数及示例

    原文地址:http://www.cnblogs.com/canyangfeixue/archive/2013/07/21/3203588.html --SQL 基础-->常用函数 --===== ...

  4. PHP常用函数、数组方法

    常用函数:rand(); 生成随机数rand(0,50); 范围随机数时间:time(); 取当前时间戳date("Y-m-d H:i:s"); Y:年 m:月份 d:天 H:当前 ...

  5. Oracle常用函数

    前一段时间学习Oracle 时做的学习笔记,整理了一下,下面是分享的Oracle常用函数的部分笔记,以后还会分享其他部分的笔记,请大家批评指正. 1.Oracle 数据库中的to_date()函数的使 ...

  6. Thinkcmf:页面常用函数

    Thinkcmf:页面常用函数 全站seo: 文章列表: {$site_seo_title}        <!--SEO标题--> {$site_seo_keywords}   < ...

  7. matlab进阶:常用功能的实现,常用函数的说明

    常用功能的实现 获取当前脚本所在目录 current_script_dir = fileparts(mfilename('fullpath')); % 结尾不带'/' 常用函数的说明 bsxfun m ...

  8. iOS导航控制器常用函数与navigationBar常用属性

    导航控制器常用函数触发时机 当视图控制器的View将要出现时触发 - (void)viewWillAppear:(BOOL)animated 当视图控制器的View已经出现时触发 - (void)vi ...

  9. 《zw版·Halcon-delphi系列原创教程》 zw版-Halcon常用函数Top100中文速查手册

    <zw版·Halcon-delphi系列原创教程> zw版-Halcon常用函数Top100中文速查手册 Halcon函数库非常庞大,v11版有1900多个算子(函数). 这个Top版,对 ...

随机推荐

  1. sql server数据库查询取出重复数据记录

    问题:博主在2011年6月,广东技术师范大学大四的时候,从学校计算机科学学院网站看到招聘信息并到广东中原地产IT部面试,很清楚记得当时的面试题目:怎么从数据库里面查询重复记录. 解决方案:在sql s ...

  2. 2019阿里天猫团队Java高级工程师面试题之第三面

    2019阿里天猫团队Java高级工程师面试题之第一面 2019阿里天猫团队Java高级工程师面试题之第二面 1.说说MySQL的锁并发?加锁的机制是什么? https://www.cnblogs.co ...

  3. 最强Linux shell工具Oh My Zsh 指南

    引言 笔者已经使用zsh一年多了,发现这个东东的功能太强大了.接下来,给大家推荐一下. 以下是oh-my-zsh部分功能 命令验证 在所有正在运行的shell中共享命令历史记录 拼写纠正 主题提示(A ...

  4. Java基础(七)

    左连接,右连接,内连接,全连接的区别 左连接:返回左表所有行,右表没有匹配行则返回null 右连接:返回右表所有行,左表没有匹配行则返回null 内连接:返回左右表共有行 全连接:返回左右表所有行,无 ...

  5. Python三级菜单作业实现

    数据结构: menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家':{}, ...

  6. QLineEdit限制数据类型——只能输入浮点型数

    前言 最近做了一个小的上位机,要通过串口来下发几个时间参数,为了防止误输入,产生不必要的麻烦,我把输入范围限制在0-680的浮点型数据,支持小数点后2位.学习了一下QLineEdit类是如何限制输入类 ...

  7. SpringBoot2 整合 ClickHouse数据库,实现高性能数据查询分析

    本文源码:GitHub·点这里 || GitEE·点这里 一.ClickHouse简介 1.基础简介 Yandex开源的数据分析的数据库,名字叫做ClickHouse,适合流式或批次入库的时序数据.C ...

  8. PAT 1007 Maximum Subsequence Sum 最大连续子序列和

    Given a sequence of K integers { N1, N2, …, NK }. A continuous subsequence is defined to be { Ni, Ni ...

  9. (四十六)c#Winform自定义控件-水波进度条-HZHControls

    官网 http://www.hzhcontrols.com 前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kww ...

  10. (转)颜色直方图, HSV直方图, histogram bins

    原文链接:https://www.xuebuyuan.com/3256564.html 一个histogram,通常可以用一个列向量表示(例子中的a,b),列向量里面的每一个值就是一个bin(a,b) ...