谈谈视频压缩管理器1(VCM)-Video Compress Manager – Visual C++

  • Post author:
  • Post category:其他


视频压缩管理器提供了一个访问接口,通过该接口可以使用系统已经安装了的压缩器去压缩处理实时视频数据。应用程序可以使用安装的压缩器去执行下面的任务:

一般,处理视频图形的压缩器被存放在AVI文件中。通过VCM来访问安装了的压缩器,这些内容涉及到下面的主题:

在你阅读这些内容前,最好对Microsoft Win32 图形处理了解一下。因为很多内容,比如位图结构 BITMAPINFO和BITMAPINFOHEADER会大量地被VCM使用。

注意:音频压缩管理器(ACM)提供系统级的音频压缩、解压支持,关于音频压缩服务,可以去看

音频压缩管理器。

界于应用程序和压缩解压缩驱动程序之间。压缩解压缩驱动程序对数据帧进行压缩和解压缩处理。

当应用程序去调用VCM的时候,VCM把这个调用动作封装到一个消息中。然后通过使用

ICSendMessage

函数,把这个消息发送到适合的压缩器或解压器。VCM接收到压缩器或解压器的返回值后,就把控制返回给应用程序。

如果为一个消息定义一个宏,这个宏可以对ICSendMessage函数调用进行扩冲,因为它可以为这个消息提供更适合的参数。假如为一个消息定义一个宏,那么你的程序将使用宏而不愿意使用消息。在后面的介绍中,这些宏将放在消息后的园括号中。

系统使用注册表中的“相”来定位VCM的驱动程序。       这些“相”用两个四字符码(two four-character codes)的形式来表示,中间使用一个点来分割(比如VIDC.DIVX)。第一个4字符码(four-character code)由系统定义,它的内容是下列中之一:

第二个四字符码由驱动程序定义。比较典型的是,第二个四字符码用于描述这个驱动程序可以处理的数据类型。

当打开一个VCM驱动程序的时候,应用程序就指定了这个驱动程序和驱动程序可以处理的数据类型。一般来说,这个信息来源于数据流的头部。系统将尝试去打开指定的数据,如果打开失败了,系统就在注册表中查找可以处理该数据的其他驱动程序。

当在查找驱动程序的时候,系统会尝试用与这四字符码匹配的其他驱动程序“项”来处理这个数据类型。例如,一个应用程序指定了一个MSSQ的压缩器,系统在注册表寻找VIDC.MSSQ这个项。如果没有找到,它就打开每个驱动程序去看是否可以处理该数据。在这个例子中,系统在注册表中如果不能找到VIDC.MSSQ“项”,它将打开所有带“VIDC”“相”指定的驱动程序去处理这些数据。

DrawDib库的函数和宏可以完成完成这些任务,同时它可以提供更方便的方法去使用VCM。关于DrawDib库更多的信息可以,去查看MSDN中

DrawDib

的内容。

你可以使用

ICLocate



ICOpen

函数来打开和定位一个压缩器。你可以是使用

ICLocate

来定位一个指定类型的压缩器,并通过使用其他VCM函数来获得这个压缩器句柄。要打开一个压缩器,你可以使用

ICOpen

函数。你的应用程序使用该函数返回的句柄来标示一个打开的压缩器。该压缩器的句柄,在其他VCM函数中会用到。

应用程序使用

ICDecompressOpen



ICDrwaOpen

宏来打开和定位一个解压器,这些宏都使用

ICLocate

操作。

当你的应用程序使用完压缩器和解压器后,必须关闭你打开的解压器和压缩器,同时还要释放到所有用于压缩和解压的资源。你的程序可以使用

ICClose

函数去关闭压缩器和解压器。

同样,你的程序通过使用

ICInfo

函数来列举系统中所有的压缩器和解码器。


注意

:在AVI文件的流的头部包含了关于流类型和流指定的处理器的信息。在流的头部内,

fccType



fccHandler

数据成员指定流的类型和流指定的处理器信息。

当要压缩数据的时候,你的应用程序可以使用

ICCompressorChoose

函数去创建一个对话框,让用户在对话框中去选择压缩器。你可以给这个函数指定一个标志,来允许用户指定关键帧频率(Key-frame frequency)和运动数据速度(movie-data rate),或者去显示一个预览的窗体。



ICCompressorChoose

函数中,用户选择的压缩器将被自动开,并且压缩器的句柄将保存在

COMPVARS

数据结构体的

hic

数据成员中。

如果你使用了

ICCompressorChoose

函数,那么使用

ICCompressorFree

函数去关闭压缩器和释放

COMPVARS

对象关联的所有资源。

应用程序可以使用系统中已经安装的压缩器后解压器来运行在Microsoft的操作系统上。应用程序同样可以为一般用户或者特殊用户安装压缩器和解压器。大多数的应用程序不需要去安装或者移除压缩起或者解压器,因为它们通常是通过一个安装程序来安装。有的时候,有的函数可以被当作压缩器或者解压器。

应用程序通过使用

ICInstall

函数来安装解压器或者压缩器(或者被当作压缩器或者解压器的函数)。这个函数将在注册表中建立一个“项”去确定压缩器或者解压器。你的应用程序或者其他应用程序可以在查找注册表来确定是否有适合自己使用的解码器和压缩器。使用ICInstall安装压缩器和解压器的所有驱动程序

应用程序可以使用

ICLocate



ICOpen

函数来定位和打开系统中安装的解压器和压缩器。当应用程序使用完成后,使用ICClose函数来关闭它们。

应用程序使用

ICRemove

函数,可以在注册表中移除一个已经安装了的压缩器或者解压器的“项”。