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

《DirectShow开发指南》学习笔记_2 COM编程基础        DirectX采用了COM标准。而DirectShow是一套完全基于COM的应用系统。要想深入学习DirectShow,掌握一些COM编程的基础知识是必不可少的。DirectShow应用程序实际上是一种COM组件的客户程序,只是COM组件的“使用”问题。这些问题包括如何创建COM组件、如何得到组件对象上的接口以及调用接口方法、如何管理组件对象(即需要熟悉COM的引用... 阅读详情

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 object
    LPUNKNOWN pUnkOuter, //Pointer to controlling IUnknown
    DWORD dwClsContext, //Context for running executable code
    REFIID riid, //Reference to the identifier of the interface
    LPVOID * 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\myFilter.ax。随后会弹出一个对话框,告诉Filter注册是否成功。

       注销Filter也是使用regsvr32.exe程序,方法为加命令行参数/u,即执行regsvr32 /u C:\DSFilter\myFilter.ax。另外一个命令行参数“/s”可以禁止执行regsvr32.exe后弹出提示对话框。

问:给出一个Filter的CLSID,如何判断这个Filter是否已经注册?

答:最简单的办法就是使用CoCreateInstance函数创建这个Filter,然后根据函数的返回值去判断。代码如下:

BOOL IsFilterRegistered(CLSID inFilte
《DirectShow开发指南》学习笔记_6 动态重建技术 由于下列任何一个原因,我们都需要对已有的Filter Graph进行修改。 应用程序在播放一段视频的过程中想要插入一个视频效果Filter; Source Filter在运行过程中改变了数据流的媒体类型,需要接入新的解码Filter; 应用程序想要在Filter Graph中加入另外一条视频流。        通常的做法是,现将Filter Graph停止,进行修改之后,再重... 阅读详情

相关推荐

基于Delphi的DirectShow开发概述

第一部分:背景知识DirectShow是微软公司提供的一套在Windows平台上进行流媒体处理的开发包,与DirectX开发包一起发布。它经过DirectX 6.0中的DirectX Media发展而来,集成了DirectX家族中的其他成员(DirectDraw、DirectSound等),可以说是一位“集大成者”。             DirectShow能做些什么? Dire

刘一飞 6321

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

智能连接 Filter通过Pin这样的连接,就能“串联”起来,从而构建一个完整的Filter Graph。 Filter Graph的构建方法大概有以下几种: IFilterGraph::AddFilter:该参数提供一个Filter对象,将其加入到Filter Graph中; IFilterGraph::ConnectDirect:该参数提供输出Pin、输入Pin以及媒体类型,进行直接的...

Small_SaltedFish的博客 669

虚拟摄像头之DirectShow虚拟摄像头开发

by fanxiushu 2018-04-06 转载或引用请注明原始作者。之前优快云上的博客,较多的文章阐述了虚拟摄像头的开发,而且是两种类别的。1,比如使用老的内核流框架开发WDM虚拟摄像头驱动,博客链接:https://blog.youkuaiyun.com/fanxiushu/article/d...

fanxiushu的专栏 1万+

全面DirectShow开发教程:构建多媒体应用程序

本文还有配套的精品资源,点击获取 简介:DirectShow是微软提供的一个多功能的多媒体框架,用于视频和音频流的处理,特别擅长实时播放和捕获。本指南深入介绍了DirectShow的开发过程,涵盖核心概念、关键API接口和应用实例,旨在指导开发者如何使用这一技术构建媒体处理管道和应用。 1. DirectShow框架概述和构成 DirectShow 是 Wi...

weixin_28681379的博客 1264

DirectShow开发指南:从基础到高级实践

DirectShow 架构基于 Filter Graph Manager,它是一个高级的图管理器,负责创建和控制过滤器图。过滤器图是由各种过滤器(Filter)以一定的方式连接起来的数据处理管道。Filter(滤镜):执行具体任务的组件,如文件读取、解码和显示等。每个Filter完成媒体处理流程中的一个步骤。Pin(引脚):滤镜之间的连接点,用于数据流的输入和输出。Pin定义了滤镜间的通讯协议。Graph(图)

weixin_32921023的博客 1098

DirectShow开发指南及源码.part1(共四卷)

《DirectShow开发指南》 作 者: 陆其明(著) 金邦飞(审校) 内容提要:本书以DirectX SDK 9.0版为蓝本,涉及的内容几乎涵盖 了在Windows平台上使用DirectShow进行C++编码的方方面面。 共压缩为四卷

《DirectShow开发指南》完整版.rar

本书以DirectX SDK 9.0版为蓝本,内容几乎涵盖了在Windows平台上使用DirectShow进行C 编程的方方面面。全书共分4个部分。第1部分详细介绍了DirectShow的基础知识。第2部分重点讨论了Filter的开发,以及DirectShow应用程序的开发,包括目前非常流行的音视频采集、数码摄像机的支持、非线性编辑等应用。第3部分深入分析了DirectShow SDK提供的部分典型源代码。第4部分结合作者个人的一些开发实践,通过案例和开放源代码分析,进一步介绍DirectShow的实务应用。

《DirectShow开发指南及源码》 陆其明 part2

《DirectShow开发指南及源码》 陆其明,书和源代码,非常好的参考资料 共2部分

EndNote全文检索实战:如何快速配置学校图书馆资源并精准查找文献

本文详细介绍了EndNote全文检索功能的实战配置方法,核心在于通过正确设置OpenURL链接解析器,无缝对接学校图书馆资源,实现一键精准获取文献全文。文章提供了从理解机制、四步配置法到进阶技巧的完整指南,帮助科研人员高效管理海量PDF,构建个人知识体系,大幅提升文献调研与写作效率。

weixin_29228781的博客 280

K-means算法代码实现(python)

K-means算法代码实现以及解决质心选择问题 计算距离 距离通常使用欧几里得距离来衡量 def euclDistance(vector1, vector2): return np.sqrt(sum((vector2 - vector1) ** 2)) 初始化质心 def initCentroids(data, k): numSamples, dim = data.shape ...

江南小帅瓜的博客 1万+

Cadence 17.2 OrCAD原理图库实战:从零创建电阻/电容/LED元件(附封装技巧)

本文以Cadence 17.2 OrCAD为核心,详细讲解了如何从零开始工程化地创建电阻、电容、LED等原理图库元件。内容涵盖库架构设计、符号绘制、引脚属性管理、封装关联技巧以及设计规则检查,旨在帮助硬件工程师构建规范、可复用且易于维护的元件库,为高效PCB设计奠定坚实基础。

weixin_29195615的博客 400

测站坐标系、地心非惯性系、经纬高互转

目录 一、经纬高转直角坐标系互转 1.1 python代码 二、wgs84转cgcs2000的转换矩阵如下 虽然cgcs2000与wgs84差别很小,但是我比较较真,还是做了两个坐标系的转换。 一、经纬高转直角坐标系互转 此处可参考链接(百度文库用手机浏览器可以打开看全部的): (1)第四章地球椭球及其数学详解 (2)第四章椭球数学变换16节 (3)大地测量学基础[1](7)(控制) 转换公式如下: LBH转XYZ: a为半长轴,e为偏心率 XYZ转LBH: a为半长轴

${王小贱}的博客 2万+

进阶篇第8节:寄存器压力——寄存器溢出对性能的影响及优化

**摘要:GPU寄存器是最快的存储单元(1周期访问),但数量有限。过高的寄存器使用会导致溢出(变量存入慢速本地内存)或降低占用率(减少并发线程数),严重影响性能。优化方法包括复用变量、使用共享内存替代寄存器数组、限制寄存器数量(--maxrregcount)等。实际测试显示,将寄存器使用从48个降至24个可使性能提升37%。分析工具如Nsight Compute可帮助检测寄存器压力。面试常见问题涉及寄存器溢出的检测与优化策略。

PeterPan的博客 95

RK3568 Android14 移远GNSS卫星导航模组LC760Z GPS北斗定位模块调试

Rockchip RK3568 作为一款高性能、低功耗的国产SoC,被广泛应用于工业网关、车载中控和智能手持终端等领域。在这些应用场景中,位置服务(Location Service) 往往是不可或缺的功能。本文将详细记录如何集成GPS模组到 RK3568 开发板上,通过 UART(串口)接口集成通用的 GPS 模块(如 移远LC760Z 或 EC20 4G 模块自带的 GPS 功能也差不多),并实现数据的解析与上层应用对接。

qq_33427070的博客 1413

FGC_grasp复现

FGC_GraspNet复现

qq_39568387的博客 385

TensorRT - 使用自定义层扩展 TensorRT

TensorRT 支持通过自定义插件扩展功能。开发者可以基于 IPluginV3 接口实现插件类,并通过 IPluginCreatorV3One 创建器类注册到 TensorRT 插件注册表。插件实现需要包含核心、构建和运行时三种能力,并通过静态或动态方式注册。最后可使用 addPluginV3() 将插件实例添加到 TensorRT 网络中。这种方法允许在标准层不满足需求时,使用自定义层扩展模型功能。

1148

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: 《DirectShow开发指南》学习笔记_2
下一篇: 《DirectShow开发指南》学习笔记_4
LemonnnLee
博客等级 码龄9年 8粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值