DirectShow
代丹
资深研发主管,曾就职于中兴通讯、索贝数码,现创业中。精通C++及音视频技术体系,精通Python及量化分析技术体系。持证高级项目经理,量化金融分析师。持有成都金熊猫人才卡,受政府补贴。
展开
-
DirectShow 04 - 时间和时钟
Time and Clocks in DS1 参考时钟任何一个引出IReferenceClock 接口的对象都可以作为参考时钟IReferenceClock::GetTime 可以获取时钟的当前时间优先级:应用程序>filter>系统事件设置参考时钟:IMediaFilter::SetSyncsource恢复默认:IFilterGraph::SetDefaultSync原创 2014-04-28 17:59:10 · 1036 阅读 · 0 评论 -
DirectShow 11 -类工厂的实现
如何实现Filter 的类厂对象 所有的com 组件为了实现二进制的封装,所以连创建的接口都封装了,因此每个com 对象都有个类对象(也叫类厂对象,本身也是com 对象,用来创建com 组件)来创建com 组件。下面温习一下com 组件的创建过程,其中涉及到几个函数1 当客户端要创建一个com 组件时,它通过底层的COM API 函数 CoGetClassObject()使用SCM 的原创 2014-04-28 17:59:26 · 799 阅读 · 0 评论 -
DirectShow 06 - 渲染
Renderer 只支持窗口模式 VMR7 缺省为窗口模式,也支持无窗口模式VMR9 缺省为窗口模式,也支持无窗口模式无窗口模式:1 创建VMR,加入到视图2 设置视频位置 3 处理窗口消息 由于视频本身没有窗口,所以所有处理都是对话框消息。原创 2014-04-28 17:59:15 · 803 阅读 · 0 评论 -
DirectShow概述和环境
略原创 2014-04-28 17:59:01 · 798 阅读 · 0 评论 -
DirectShow - 14 DirectShow的线程和临界区
1 The Stream And Application Threads (1)一个DirectShow的应用程序至少包括一个 应用程序线程,一个或多个Streaming线程。 (2)Streaming的主线程一般由Source filter或Paser Filter创建,其他filter可以创建用来传递Sample的工作线程。所以的这些线程都称为Streaming Threads。2 问题的原创 2014-04-28 18:00:37 · 969 阅读 · 0 评论 -
DirectShow 07 -系统设备和过滤器
获取系统设备和过滤器:1 系统设备枚举器 >创建枚举器组件 CLSID_SystemDeviceEnum >过ICreateDevEnum::CreateClassEnumerator 获取某一种类的枚举器,这个函数返回一个IEnumMoniker 接口指针 >IEnumMoniker::Next 枚举每一个moniker >IMoniker::BindToStorage可以知原创 2014-04-28 17:59:17 · 749 阅读 · 0 评论 -
DirectShow 03 - 事件
事件:窗口通知事件信号原创 2014-04-28 17:59:08 · 809 阅读 · 0 评论 -
DirectShow 02 - 数据流
Data Flow1 只有一个Allocator的情况(1)每个Buffer封装在一个Sample中,引出IMediaSample接口(2)Alocator建立Sample池(3)IMediaAllocator::GetBuffer获取空闲sample,阻塞的。返回指针(4)Render Filter收到sample后根据Sample的的参考时钟判断是否播放该数据(5)播放原创 2014-04-28 17:59:06 · 811 阅读 · 0 评论 -
DirectShow 12 - 过滤器连接和模式
Filter的连接:通过视图管理器连接相应的Pin。Pin连接中的内存分配:Pin之间的内存交互机制:局部内存交换机制。 在局部存储器传输中,负责分配内存的对象称为allocator。每个allocator 都支持一个IMemAllocator 接口,所有的pin 都共享一个allocator。每个pin 都提供一个allocator,但是输出pin 选择使用哪个alloc原创 2014-04-28 17:59:29 · 971 阅读 · 0 评论 -
DirectShow 09 - 音视频捕捉
音频捕捉: Audio Capture Filter如果驱动支持WaveInXX函数族,则使用SDK WaveInXX每个声卡都可以用filter来访问每个输入设备可以作为一个Pin 声卡的输出功能,可以有两个Filter 供选择:DirectSound Renderer Filter 和Audio Renderer (WaveOut) Filter。注意,这两个原创 2014-04-28 17:59:22 · 834 阅读 · 0 评论 -
DirectShow 05 - 动态创建
Dynamic Graph Building原创 2014-04-28 17:59:13 · 732 阅读 · 0 评论 -
DirectShow 01
1 Filter source,transform,render,splitter,mux2 Filter Graph Manage状态,参考时钟,连接,事件 3 Media TypeAM_MEDIA_TYPE类型,子类型,sample是大小否固定,sample大小,是否压缩,内存块格式,大小,指针4 Sample指向未发送内存的指针,时间戳,一些标志,媒体类型(一原创 2014-04-28 17:59:03 · 826 阅读 · 0 评论 -
DirectDraw系统集成
----------------------------------------------------------------------- Win32 Application | v----------------------------原创 2014-04-28 18:00:30 · 898 阅读 · 0 评论 -
DirectDraw
DirectDraw特性:1)DirectDraw硬件抽象层提供了一个统一的接口,通过它,开发者可以直接的操作显示存储器和视频存储器,从系统硬件中获取最大的表现能力. 2)DirectDraw 可以充分评估视频硬件的能力,只要可能,它就会对其某一特性加以利用3)DirectDraw 将视频和系统存储器视为整块的空间,而不是碎片的集合.不使用区段偏移寻址,而是一种近似于"平面"的内存模型原创 2014-04-28 18:00:27 · 938 阅读 · 0 评论 -
DirectX发展历程
DirectX并不是一个单纯的图形API,它是由微软公司开发的用途广泛的API,它包含有Direct Graphics(Direct 3D+Direct Draw)、Direct Input、Direct Play、Direct Sound、Direct Show、Direct Setup、Direct Media Objects等多个组件,它提供了一整套的多媒体接口方案。只是其在3D图形方面的优原创 2014-04-28 18:00:20 · 1032 阅读 · 0 评论 -
DirectShow 10 - 过滤器开发流程
过滤器的开发:1 添加头文件和库2 创建工程(一般使用Win32 Dynamic-Link-Library,生成一个Simple DLL)3 需要实现入口函数 DllMain DllGetClassObject DllCanUnloadNow DllRegisterServer DllUnregisterServer4 导出的方法: >在定义函数时使用导出关键字原创 2014-04-28 17:59:24 · 812 阅读 · 0 评论 -
DirectShow 08 - VCR控制
1 IMediaSeeking IMediaSeeking::GetCapabilities 查看流支持的Seek能力 IMediaSeeking::GetPositions IMediaSeeking::SetPositions IMediaSeeking::SetRat 参考时间:100ns 设置时间格式 IMediaSeeking::IsFormatSup原创 2014-04-28 17:59:19 · 937 阅读 · 0 评论 -
DirectShow-13 Seeking
IMediaSeeking 这是一个很重要的接口,它能支持实现大多数的VCR操作。主要实现的功能:1) 定位到数据流中的一个绝对位置2) 返回数据流的持续时间3) 返回数据流中的当前播放位置4) 回放。 Seeking能力描述:typedef enum AM_SEEKING_SeekingCapabilities { AM_SEEKING_CanSeekAbsolute =原创 2014-04-28 18:00:32 · 818 阅读 · 0 评论