《DirectShow开发指南》学习笔记_3

2024-01-11 03:48

本文主要是介绍《DirectShow开发指南》学习笔记_3,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Filter原理

Filter概述

      Filter是DirectShow中最近本的概念。DirectShow使用Filter Graph来管理Filter(管理者叫做Filter Graph Manager)。Filter Graph是Filter的“容器”,而Filter是Filter Graph中的最小功能模块。

        Filter一般由一个或多个Pin组成,Filter之间通过Pin相互连接,构成一条顺序的链路。Filter根据实现功能的不同大致可分为3类:Source Filters、Transform Filters和Rendering Filters。另一种使用的判别方法是根据Filter包含的输入Pin或者输出Pin的数量来判断:仅含有输出Pin,没有输入Pin的Filter为Source Filter;既有输入Pin又有输出Pin的Filter为Transform Filter;仅有输入Pin,没有输出Pin的Filter为Rendering Filter。

        Filter是一种COM组件。为了实现在Filter Graph中的统一操作,每个Filter上都至少实现了IBaseFilter接口。实现Filter的文件一般是一个DLL,扩展名可以使.dll,但更多是.ax。跟普通的COM组件一样,Filter的创建是通过API函数CoCreateInstance来完成的,代码如下:

STDAPI CoCreateInstance(REFCLSID rclsid, //class identifier (CLSID) of the objectLPUNKNOWN pUnkOuter, //Pointer to controlling IUnknownDWORD dwClsContext, //Context for running executable codeREFIID riid, //Reference to the identifier of the interfaceLPVOID * ppv //the interface pointer requested in riid
);

      其中,参数rclsid指定要创建的Filter的CLSID;因为绝大多数情况下创建的Filter不是被“聚合”(Aggregation)的,所以pUnkOuter指定为NULL;dwClsContext可以指定为CLSCTX_INPROC_SERVER,以创建进程内组件对象;riid在创建Filter成功后获得的接口的ID,一般为IID_IBaseFilter,也可以是其他特殊的接口;ppv用于获得接口对象的指针。

       Filter必须加入到Filter Graph且接入到工作链路中才能发挥作用。如果想绕过Filter Graph而直接使用Filter实现的模块功能,微软公司提供了另一种解决方案,就是将Filter功能移植成DirectX媒体对象(DMO)。

Filter的注册

       既然Filter是一种COM组件,使用前就必须先注册。Filter的注册程序为regsvr32.exe(唯一操作系统目录的system32子目录下)。假设现在有一个Filter文件,它的完整路径为C:\DSFilter\myFilter.ax,那么注册这个Filter的方法为:在命令行状态下,执行regsvr32 C:\DSFilter\myFilt

这篇关于《DirectShow开发指南》学习笔记_3的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/593068

相关文章

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

电脑密码怎么设置? 一文读懂电脑密码的详细指南

《电脑密码怎么设置?一文读懂电脑密码的详细指南》为了保护个人隐私和数据安全,设置电脑密码显得尤为重要,那么,如何在电脑上设置密码呢?详细请看下文介绍... 设置电脑密码是保护个人隐私、数据安全以及系统安全的重要措施,下面以Windows 11系统为例,跟大家分享一下设置电脑密码的具体办php法。Windo

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Python使用qrcode库实现生成二维码的操作指南

《Python使用qrcode库实现生成二维码的操作指南》二维码是一种广泛使用的二维条码,因其高效的数据存储能力和易于扫描的特点,广泛应用于支付、身份验证、营销推广等领域,Pythonqrcode库是... 目录一、安装 python qrcode 库二、基本使用方法1. 生成简单二维码2. 生成带 Log

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

macOS怎么轻松更换App图标? Mac电脑图标更换指南

《macOS怎么轻松更换App图标?Mac电脑图标更换指南》想要给你的Mac电脑按照自己的喜好来更换App图标?其实非常简单,只需要两步就能搞定,下面我来详细讲解一下... 虽然 MACOS 的个性化定制选项已经「缩水」,不如早期版本那么丰富,www.chinasem.cn但我们仍然可以按照自己的喜好来更换

Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南

《Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南》在日常数据处理工作中,我们经常需要将不同Excel文档中的数据整合到一个新的DataFrame中,以便进行进一步... 目录一、准备工作二、读取Excel文件三、数据叠加四、处理重复数据(可选)五、保存新DataFram

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

使用JavaScript将PDF页面中的标注扁平化的操作指南

《使用JavaScript将PDF页面中的标注扁平化的操作指南》扁平化(flatten)操作可以将标注作为矢量图形包含在PDF页面的内容中,使其不可编辑,DynamsoftDocumentViewer... 目录使用Dynamsoft Document Viewer打开一个PDF文件并启用标注添加功能扁平化