博客
关于我
DirectShow 常用函数总结
阅读量:439 次
发布时间:2019-03-06

本文共 2891 字,大约阅读时间需要 9 分钟。

Direct Show 常用 API 接口函数参考

本文旨在总结 Direct Show 中一些常用的 API 接口函数,供开发者在日常工作中查阅和回忆。如有未提及的函数,建议通过 MSDN 和相关搜索进行查找。


CoInitialize

概述

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

语法

HRESULT CoInitialize(LPVOID pvReserved);

参数

  • pvReserved:保留参数,必须为 NULL

返回值

  • 返回值为 S_OK 表示 COM 库在此线程上成功初始化。
  • 返回值为 S_FALSE 表示 COM 库已经在此线程上初始化过。

###备注新应用程序应调用 CoInitializeEx 而不是 CoInitialize,因为 CoInitializeEx 提供了更灵活的线程模型设置。


CoUninitialize

概述

关闭当前线程上的 COM 库,释放所有资源。

语法

void CoUninitialize();

返回值

此函数无返回值。

###备注线程初始化后必须调用相应的 CoUninitialize 来释放资源。


CoCreateInstance

概述

创建一个指定 CLSID 的 COM 对象。

语法

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

参数

  • rclsid:COM 对象的类标识符 (CLSID)。
  • pUnkOuter:指向 IUnknown 接口的指针,通常设为 NULL
  • dwClsContext:指定创建对象的上下文。
  • riid:指定要获取的接口标识符 (IID)。
  • ppv:接收创建成功后对象接口的指针。

返回值

返回值为 HRESULT,具体值请参考 MSDN。

###备注

  • 若仅需在本地创建单个对象,可直接调用 CoCreateInstance
  • 若需在远程系统创建单个对象,可调用 CoCreateInstanceEx
  • 若需基于单个 CLSID 创建多个对象,可调用 CoCreateInstanceEx

IUnknown::QueryInterface

概述

查询 COM 对象是否支持特定接口。

语法

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

参数

  • riid:指定要查询的接口标识符 (IID)。
  • ppvObject:接收支持该接口的指针。

返回值

  • 返回 S_OK 表示支持该接口。
  • 返回 E_NOINTERFACE 表示不支持。

###备注QueryInterfaceIUnknown 接口的重要方法,用于动态接口查找。


IGraphBuilder::RenderFile

概述

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

语法

HRESULT RenderFile(LPCWSTR lpcwstrFile, LPCWSTR lpcwstrPlayList);

参数

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

返回值

返回值为 HRESULT,具体值请参考 MSDN。

###备注该方法会构建一个 filter graph 用于播放指定文件。


IMediaControl::Run

概述

运行 filter graph,实现数据流动。

语法

HRESULT Run();

返回值

返回值为 HRESULT,具体值请参考 MSDN。

###备注在 filter graph 已停止的情况下,该方法会暂停并启动 graph。成功调用后,graph 会持续运行,直到数据流完或被手动停止。


IMediaEvent::WaitForCompletion

概述

等待 filter graph 完成渲染。

语法

HRESULT WaitForCompletion(long msTimeout, long *pEvCode);

参数

  • msTimeout:超时时间,单位为毫秒。传递 0 表示立即返回,传递 INFINITE 表示无限等待。
  • pEvCode:接收事件代码的变量指针。

返回值

返回值为 HRESULT,具体值包括:

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

###备注该方法会阻塞直到超时或 graph 完成渲染。


ICaptureGraphBuilder2::SetFiltergraph

概述

为 capture graph builder 设置要使用的 filter graph。

语法

HRESULT SetFiltergraph(IGraphBuilder *pfg);

参数

  • pfg:指向 IGraphBuilder 接口指针。

返回值

返回值为 HRESULT,具体值请参考 MSDN。

###备注如果不调用此方法,capture graph builder 会在需要时自动创建 filter graph。如果已有 filter graph,此方法返回 E_UNEXPECTED


ICaptureGraphBuilder2::RenderStream

概述

将 source filter 的 output pin 连接到 sink filter。

语法

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

参数

  • pCategory:指向 pin 类别的 GUID,传递 NULL 可匹配任何类别。
  • pType:指向 pin 的媒体类型 GUID,传递 NULL 可匹配任何类型。
  • pSource:指定起始 filter 或 output pin 的指针。
  • pIntermediate:指定中间 filter 的指针,可设为 NULL
  • pSink:指定终止 filter 的指针,可设为 NULL(此时使用默认 renderer)。

返回值

返回值为 HRESULT,具体值请参考 MSDN。

###备注该方法通过连接多个 filter 来形成一个流,常用于视频捕获和预览。


扩展:常用 CLSID

  • CLSID_FilterGraph:用于在共享工作线程上创建 Filter Graph Manager。
  • CLSID_CaptureGraphBuilder2:用于创建 capture graph builder。

以上内容涵盖了 Direct Show 中一些常用的 API 接口函数及其使用方法,希望对开发者有所帮助。

转载地址:http://jgsyz.baihongyu.com/

你可能感兴趣的文章
PowerDesigner 使用的一些技巧(转)
查看>>
QGIS在Windows上下载安装与建立空间数据库连接
查看>>
PowerDesigner165安装婆姐汉花教程
查看>>
PowerDesigner使用教程:设置注释、默认值属性
查看>>
PowerDesigner使用教程:不显示背景网格
查看>>
PowerDesigner使用教程:创建数据模型以及导出
查看>>
PowerDesigner使用教程:右侧工具栏显示/隐藏
查看>>
PowerDesigner使用教程:导出sql文件以及解决中文乱码问题
查看>>
PowerDesigner使用教程:时间字段设置
查看>>
PowerDesigner使用教程:给字段添加唯一约束
查看>>
QGIS中怎样设置图层样式并导出地图样式
查看>>
PowerDesigner使用笔记
查看>>
QGIS中怎样实现数据坐标系转换
查看>>
PowerDesigner学习--基本步骤
查看>>
PowerDesigner导出Report通用报表
查看>>
PowerDesigner教程系列(二)概念数据模型
查看>>
Powerdesigner显示表的comment和列的comment的方法
查看>>
PowerDesigner最基础的使用方法入门学习
查看>>
PowerDesigner版本控制器设置权限
查看>>
PowerDesigner生成数据模型并导出报告
查看>>