• WINCE 和XP 在DIRECTSHOW之间的关联


    时间:13:47 2010-9-14

    编程环境:
        0S:WINCE R3
        开发工具:VS2008
    注意:编写程序与开发工具是没有什么关联的,只与你的SDK有关。

    page:

    http://msdn.microsoft.com/en-us/library/aa916429.aspx

    背景:
        由于最近要编写一个摄像头程序,其要求能够:录像,回放,拍照。
    此文主要介绍编程环境的建立开始之前的问题。

    问题:
        在XP上使用DIRECT SHOW开发软件,其需要另外下载DIRECT SHOW的SDK,那么在WINCE上使用

    DirectShow开发软件,其是否需要另外下载DIRECTSHOW的SDK呢。

    解法:
        在WINCE上不要另外下载DIRECTSHOW的SDK, WINCE 当中包括了,只要在定制SDK的时候注意将其加载进行就可以了,XP的SDK当中没有包括DIRECTSHOW,所以要去载。

    问题:
                  WINCE 上的DSHOW(DIRECT SHOW) 的SDK与XP上DSHOW 的SDK很不同呀,如XP上有CBaseClass且还要我们自己去编译成LIB文件,在WINCE 当中只有一个Strmiids.lib 文件,
    在XP上编写DV的程序其需要三个接口:
    IAMExtDevice, IAMExtTransport,IAMTimecodeReader其的定义包括在XPrtDefs.h。
    但在WINCE 的SDK当中但并没有查找到XPrtDefs.h。那怎么样办呢。
    我通过查找MSDN
    PAGE:
    http://msdn.microsoft.com/en-us/library/dd389318%28VS.85%29.aspx

    发现
    IAMExtDevice, IAMExtTransport,IAMTimecodeReader
    其声明在Strmif.h当中。
    实现包含在Strmiids.lib,更多细节建议你去查看MSDN.

    [感处]
        XP与WINCE其的DIRECTSHOW的编程模型与接口是一样的,只是一些头文件不同呢。在WINCE当中编程只要加一个Dshow.h 头文件就可以了。而在XP上编程其要添加其它头文件。
        我们还是可以将XP上DIRECTSHOW的经验应用于WINCE上,只要注意一些细节,如头文件,

    CSLID,IID

    思考:
    其为什么还是可以呀,因为DIRECTSHOW其只是框架与其硬件与语言是没有关联的。相当于
    #include<stdio.h>
    void main(){
        printf("hello world \n");
    }   

    在WINCE ,XP上均是可以运行的(注意要重新编译一次)

    有人可能会对于printf("hello world \n"); 感到不解:为什么不是printf(L"hello world \n");
    WINCE 其是一个UNICODE系统,像"hello world \n" 这样的字符串怎么可能编译通过呢。
    WINCE 的UNICODE : 其是说明:其只与WINCE 的API有关,像有一些API当中的参数需要接受字符串,
    此参数的类型只有UNICODE的类型(如:WCHAR ,CONST WCHAR *)没有ANSI版本的,但在XP上其就有两个版本。
    printf其与C RUNTIME库 其并不是WINCE 的API.

     

    问题:
        对于WINCE 能否完成支持标准的DIRECTSHOW感到不相信。

    解法:
        WINCE 其确实支持( 没有讲完全,因为自己还没有GOOGLE,不能下结论)DREICTSHOW, 但我们要注意到,DIRECTSHOW其能否真正有作用,还是要看硬件提供是否实现了DRIECTSHOW的接口。
        就像我们在程序当中动态的加载一个DLL文件,虽然不能够编译通过( 因为有.H. LIB),但其没有实现文件,运行的时候,就没有效果了。
       

    我们可以先熟悉XP上的DIRECTSHOW编程,以后当有机会在WINCE上写代码时候,或在XP上写代码时候,才不会紧张。不要因为WINCE不支持就不去学习,这样只会让自己很被动。

    问题:
        DIRECTSHOW其定义操作接口IAMExtDevice, IAMExtTransport,IAMTimecodeReader(举其是因为,我要编写一个DV录像,拍照,预览的程序,二是因为其使用的场合有限,如果生辟的东西的实现了,那应该也实现大多数了)
        但其是在哪里实现,由谁实现的呢。

    解法:
        我们可以通过远程查看注册表的工具(WINDOWS CE REMOTE REGISTRY EDITOR),来看目标机器上注册了哪些FILTER, 为什么要查FILTER呢。

     1_1

    3

    4


        因为DIRECTSHOW的功能的划分是以FILTER为单位的,其有哪些FILTER其就实现了DIRECTSHOW的哪些功能,我们使用这些FILTER才会有效果。没有这些FILTER的注册,就像加载DLL文件一样,虽然能够编译

    通过,但其运行没有效果。
    问题:
        FILTER 其与操作接口(IAMExtDevice)之间的关系。

    解法:
        FILTER 其是一个DLL文件,其内部是一个C++类,此类要通过继承这个接口,此实现这个接口,
    用户通过C++类的CLSID,来创建C++对象,然后就可以访问接口了。这和我们使用多态和工厂模式的原理是一样的


        MS定义标准,其就是定义这些接口,我们能不能使用成功,还要看硬件厂商是否实现了这些接口,硬

    件厂商其就是实现这些FILTER.表面是这样,我们初学者这样认为是不会有问题。其与真正做法的不同在于:  对

    于FILTER是一个类,对于一个类的组织也可以由MS来实现,这如果由硬件厂商来完全,一来工作量,二来重复

    ,MS其对于一些操作硬件的函数,定义成空函数,这些由硬件厂商来实现,

    注意:
        “定义成空函数,这些由硬件厂商来实现” 这是我的想法,我感觉这样理解对于我们初学者也可以,至于

    真正情形,我不是十分清楚,也希望哪位工程师补充一下。

     

    补充:

    XP 上的DIRECTSHOW的SDK当中基类,5

    8

    在WINCE 的SDK当中也有

    9

  • 相关阅读:
    hdoj-1005-Number Sequences
    FOJ-1058-粗心的物理学家
    程序设计第三次作业附加 代码规范
    简单数论
    FOJ-1001-Duplicate Pair
    链表初尝试-链表的构建与输出-指针
    函数递归简单题-hdoj-2044 2018-一只小蜜蜂 母牛的故事
    电路与电子学-第一章直流电路分析方法小概括
    DFS回溯-函数递归-xiaoz triangles
    进制转换 hdoj-2031
  • 原文地址:https://www.cnblogs.com/pengxinglove/p/1826278.html
Copyright © 2020-2023  润新知