zoukankan      html  css  js  c++  java
  • 学习写DSHOW框架下的FILTER 之二

    时间:8:30 2011-1-5

    8:30 --- 9:00
    总结与计划

    视频的FILTER其所涉及的知识

    1. 首先要建立FILTER的知识.
        DSHOW的FILTER GRAPH MANAGER控制FILTER
        FILTER其之间的接口通信
    2. 在具体的FILTER现实过程当中,其涉及到与硬件有关

    3. COM的相关知识

    这将是一个很大的机遇, 应该首先分析一下,分成各个模块,然后再各个模块的击破
    时间: 11:02 -- 11:55

    模块的分析大局思路
    1. 系统分析师
        1. 用户其所想要的功能:
            1. 预览,
            2. 保存 ( 可以设置保存格式与保存路径)
            3. 保存其是否保存声音,
    2. 系统结构师
        1. APP其采用MVC
        2. 业务逻辑的核心其采用DSHOW

        3. 业务逻辑的 FILTER GRAPH 图的设计

    3.软件设计师
        1. APP的基本框架的建立
        2. DSHOW其与APP之间的建立
        3. FILTER GRAPH 所需要的FILTER的设计.
        4. 确定编写FILTER的框架

    4. 程序员
        1. 编写FILTER

    现在已经有的资料
        1. APP其已经实现了预览的功能,
    所以在;
    1. 其只有保存的功能添加

    2. 保存加预览的FILTER GRAPH图的设计
        可以借用WINCE5.0上的DEMO与PC机的DEMO, 可以通过GraphEdit.exe来建立FilterGraph,然后结合WINCE上的FILTER来进行

    使用. 具体需要哪些 FILTER, 哪些FILTER其需要编写

    [ 确定FILTER GRAPH 图]
        时间:11:34 --- 11:50
    1. 在PC机上的FILTER GRAPH
        其是有Smart Tee 的FILTER 其能够将视频分成: 预览与保存
        其在保存方面
            1. 其有一个编码FILTER,将数据编码成保存文件的格式 : 编码FILTER
            2. 保存文件的FILTER,其是将文件写到外存上: 写文件的FILTER
        这些FILTER其均是存在的.

    对照一下WINCE上的情况:
        WINCE 标准情况:
        其有smart tee 因为其只是将数据进行分开,没有硬件,或数据格式有关系,
        WM ASF Writer Filter  ,此FILTER其只是能够将数据写成特定格式以保存.格式不同,其的FILTER也不同.但只是具体的逻辑不同,形式

    还是相同,所以,MS其只是提供了WM ASF WRITER FILTER, 且也提供了render filter 性质的部分类

        自定义的情况:
        1. 我们SOURCE FILTER ,RENDER FILTER,
    其中间的TRANSFROM FILTER其是否包括了:SMART TEE FILTER的功能,能够将数据分成两路.
        2. 我们有WINCE 5.0版本的DEMO,我们要吧仍然按着其的思路来开发,
           我们可以利用到的东西有:
            1. FILTER GRAPH  的建立
            2. 各个FILTER的接口
          现在我们所需要去建立的东西有:
            3. ENCODE FILTER,
            4. WRITE FILTER ,
        其就涉及到怎么样来编写FILTER.

    上面的那些DEMO是告诉我们怎么样来使用FILTER,
    现在的关键是怎么样来编写FILTER.

    [ 疑问]
        我在MSDN上看到WINCE6.0支持SMART TEE,但在自己的开发板子上没有找到,其是否是自己在定制系统的时候没有定制进去呢.

    [ 问题]
        splitter , mux, smart tee 之间的区别,splitter 其是将视频,音频数据分开, mux其是将视频与音频数据混合在一起,smart tee其是将

    视频数据分两路,

    参考资料:
    [1] wince smart tee ( 但有没在开发板子找到)
    http://msdn.microsoft.com/en-us/library/aa931154.aspx

    [2]
    http://www.eggheadcafe.com/software/aspnet/30433026/directshow-under-windows-ce-60.aspx

    [3]如何将由 capture 而来的视频数据 分成两份分别用于 预览 和网络上的传送??
    http://topic.csdn.net/t/20040927/11/3412128.html

    [4]用DirectShow实现视频采集
    http://blog.csdn.net/dansin/archive/2005/03/27/331854.aspx

    [ 确定编写FILTER的业务流程]
        我们一定要以流程化的角度来看待此问题.

    让我们来按照[ FILTER 的初始业务流程] 来看DUMP filter ( 其是属于 RENDER FILTER 性质)

    [ 从设计模式的角度来看待DSHOW 与FILTER]
        1.
            DSHOW其对于APP用户而言,其是使用了门面模式
            APP用户其只要使用DSHOW的FILTER GRAPH BUILDER来就可以来操作FILTER GRAPH
            所以不管需求怎么样变换, FILTER GRAPH 其是怎么样变换,
            APP 用户其只要使用FILTER GRAPH BUILDER的就可以.

        2.
            DSHOW其对于FILTER GRAPH 用户而言,DSHOW其是使用 策略模式来管理FILTER.
            FILTER GRAPH用户(FILTER 建立用户)其写的FILTER要想被DSHOW框架所接受,其就必须满足DSHOW当中的FILTER的   

        特点.
            所以FITLER  GRAPH用户其的FILTER要实现一些DSHOW FILTER的接口.且实现这些接口.
            DSHOW为了方便用户开发FILTER其提供了一些基类,自定义的FILTER其只要继承相应的基类就可以了.

        3.     FILTER其的本身设计上,其是使用了组合模式.
            其一般包括三种性质的类:
                1. FILTER
                2. PIN
                3. COM类,其是组合FILTER.PIN,
            其三者是关系是什么呢.其各自负责什么,各自之间又是怎么样相互处理的.

            FILTER GRAPH 其是一张数据流动的网.所以FILTER其是处理数据的.PIN其是接受,发送数据.COM类其是一个

    FILTER,PIN的载体,其方便用户操作.
            我们之前在APP当中所用到的FILTER接口,其是由FILTER来实现的.这好像是错误的,因为COM类其继承了CUnknown.
    因为自定义FILTER的用户操作接口其是会继承IUnknow接口. 但其没有实现,而此处的COM类其继承CUnkown接口,应该是出于COM类实现用

    户自定义操作接口.       
            PIN其接收到数据其是怎么样发给FILTER来处理的呢.--> 为了使用FILTER 与PIN之间的关系松散,FILTER其是通过COM

    类来得到PIN对象的引用.

            COM类其是没有构造方法的,其而是通过静态的CreateInstance来完成的创建.

            用户得到FILTER其是通过COM类,
            用户得到PIN其是通过FILTER.
            用户要操作FILTER其只能是通过接口. 且是通过FILTER的QueryInterface来查找的来查找的.

            COM类对于用户而言是可以忽视的,用户只要知道COM类其是一个FILTER ,PIN的载体就可以.
            FILTER, PIN其也不是由用户来操作的.其是由DSHOW框架来控制的.
            用户其只是使用用户自定义接口就可以了.
            自定义的FILTER,PIN其要继承DSHOW的相关类, 且要重载相关方法,
            重载的目标是什么,里面写一些什么的东西.
            其里面:
                    CAutoLock cObjectLock(m_pLock);        // 准备,初始化
                       m_pDump->CloseFile();            // 自身的业务逻辑
                                return CBaseFilter::Stop();            // DSHOW的常规逻辑

            COM 类其才是真正业务逻辑之所以.但这些业务逻辑是由FILTER ,PIN来调用的.而FILTER, PIN其的调用是由DSHOW框

    架来管理的.       

    ==>
            FILTER 其是控制流程
            PIN 其是接收数据,发送给COM类
            COM类其是真正的逻辑处理.

            FILTER ,PIN其是属于DSHOW框架的部分.其是DSHOW框架来管理的.其只是继承一些基类,然后重载一些方法.
            COM类其的作用:
            COM类,其是属于COM框架的,所以COM类要求继承一些COM框架的一些类,与重载一些方法
            1. 业务逻辑的具体实现
            2. 与COM 对象关联( 
                如:继承一些CUnknown,
                重载一些方法,
                        // Overriden to say what interfaces we support where
                        STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void ** ppv);
                        static CUnknown * WINAPI CreateInstance(LPUNKNOWN punk, HRESULT *phr);
                    此方法其是由COM框架来调用的,具体的时COM框架当中Factory来调用调用的

    ==>
        DUMP FILTER其的特点:
    1. 其的FILTER ,PIN均是直接地使用了DSHOW的FILTER ,PIN.
    总结:
        框架与业务逻辑的结合.

        我们还可以更加简化,其直接地继承 SOURCE ,TRANSLATE ,RENDER 此类FILTER.
    其的优点在哪里呢.
        1. 因为SOURCE 之类其已经完成FILTER,PIN的封装,我们只要重载SOURCE之类的一些方法就可以了.

    [ 确定COM的基本知识]

    参考资料:
    [1]Problem when Using driectshow CBaseRenderer Filter( 其是讲怎么样保存文件,创建FILTER与查找接口的两种方式)

    http://social.msdn.microsoft.com/Forums/zh-SG/vssmartdevicesnative/thread/a278d59c-530f-4ceb-9b6c-54e7bd5620d3

    [2]使用 Windows Mobile 5.0 中的图片、视频和照相机
    http://msdn.microsoft.com/zh-cn/library/aa454909.aspx

    [3]CE 6 Camera 应用程序,其包含了:录像用到的编码、写文件等FILTER
    http://topic.csdn.net/u/20091205/13/f7adf327-9fd1-4b11-8875-ce9a58ae84c9.html

    [4]WINCE60下基于DirectShow技术怎么写Camera相机的应用程序
    http://topic.csdn.net/u/20081011/15/4373e22e-8ba4-45a9-92c5-09e8aa2ce4bf.html

    [5] WINCE camera 应用程序,其主要是直接与驱动而不是包装成FILTER
    http://topic.csdn.net/u/20091124/11/098411da-e3c1-43c1-946f-f249c5f0e156.html

    [6] DSHOW编码FILTER疑问
    http://topic.csdn.net/u/20100706/19/652c1794-7b01-4642-b289-0ba27a4010dc.html?61396

    [ 现在开发板子上已经有的FILTER]
    MP3 Decoder Filter
    CL Video Decoder Filter
    WMAudio Decoder DMO
    MPEG-1 Layer-3 Decoder
    MES VideoRenderer Filter
    MES Audio Decoder Filter
    WMVideo & MPEG4 Decoder DMO
    CL AVI Parser Filter
    Video Renderer
    Audio Renderer
    Internal Script Command Renderer
    MPEG Video Codec
    MPEG Audio Codec
    WMSpeech Decoder DMO
    AVI Splitter
    AVI Decompressor
    ACM Wrapper
    NSC file Parser
    ASF embedded stuff Handler
    ASF URL Handler
    ASF ICM Handler
    ASF ACM Handler
    MPEG-I Stream Splitter
    Windows Media source filter
    Wave Parser
    File-Rendering 'Transform'
    Multi-File Reader
    M3U/ASXv1 Playlist
    ASXv3 Playlist
    ASXv2 Playlist
    File Source (URL)
    CL OGG Vorbis Splitter Filter
    File Source (Async.)
    MES VPPTransform Filter
    MES VIPSource Filter

    [ 经验]
        在WINCE 当中,当出现Exception 'Data Abort' ,其是访问内存地址异常,其是访问了非法的地址,如在做预览处理的(如:从640*480到

    800*600)其内存空间分配不足,其就要可能出现这样的错误

  • 相关阅读:
    STM32F103ZET6 PWM输出
    STM32F103ZET6串口通信
    STM32F103ZET6系统定时器SysTick
    STM32F103ZET6的基本定时器
    npm 安装vue cli脚手架报错 npm err code EEXIST 或者 npm err cb<> never called 解决方案
    Java调用第三方http接口的方式
    机器学习算法原理解析
    Spark MLlib 机器学习
    Spark SQL基本概念与基本用法
    HBase基本概念与基本使用
  • 原文地址:https://www.cnblogs.com/pengxinglove/p/1926743.html
Copyright © 2011-2022 走看看