世界杯与视频压缩(3)

由于XVID采用VFW是可安装型驱动程序,因此它是核心态工作的动态连接库。每个可安装型驱动程序需要输出DriverProc函数。这个函数接收来自操作系统的各种设备驱动消息,根据设备驱动消息不同,对设备执行不同的操作或向应用程序提供需要的信息。系统发送给DriverProc函数的主要消息如下:

DRV_CLOSE       当驱动程序实例被关闭时,发送此消息。

DRV_OPEN        打开VFW驱动程序。

 

下面就是跟压缩和解压有关的消息:

ICM_ABOUT

ICM_COMPRESS

ICM_COMPRESS_BEGIN

ICM_COMPRESS_END

ICM_COMPRESS_FRAMES_INFO

ICM_COMPRESS_GET_FORMAT

ICM_COMPRESS_GET_SIZE

ICM_COMPRESS_QUERY

ICM_CONFIGURE

ICM_DECOMPRESS

ICM_DECOMPRESS_BEGIN

ICM_DECOMPRESS_END

ICM_DECOMPRESS_GET_FORMAT

ICM_DECOMPRESS_GET_PALETTE

ICM_DECOMPRESS_QUERY

ICM_DECOMPRESS_SET_PALETTE

ICM_DECOMPRESSEX

ICM_DECOMPRESSEX_BEGIN

ICM_DECOMPRESSEX_END

ICM_DECOMPRESSEX_QUERY

 

ICM_GET

ICM_GETBUFFERSWANTED

ICM_GETDEFAULTKEYFRAMERATE

ICM_GETDEFAULTQUALITY

ICM_GETINFO

ICM_GETQUALITY

ICM_GETSTATE

ICM_SET_STATUS_PROC

ICM_SETQUALITY

ICM_SETSTATE

 

VFW处理程序,就是实现这些消息的响应,然后调用XVID的接口。

VFW里的流程是这样的:

开始接收到DRV_OPEN消息,创建XVIDCODEC的对象,然后就接收到与输入要压缩数据的格式、大小等等消息,还有输出的格式、大小。

接着下来就会收到压缩开始消息ICM_COMPRESS_BEGIN,在这个消息里需要调用XVID压缩相关的函数,进行压缩初始化工作。

然后不断地接收到ICM_COMPRESS消息,每帧数据都发送这条消息过来,然后就调用XVID的压缩函数进行压缩每帧数据。

最后,没有数据压缩,就会发送ICM_COMPRESS_END消息,这时就需要删除所有创建对象,并调用XVID的函数来清除XVID使用的对象。

当用电视卡录下世界杯的AVI文件时,就可以通过调用VFW的驱动程序来压缩数据了。一般每秒钟都有25帧,每秒钟的视频就需要发送25ICM_COMPRESS消息。

VFW驱动程序里,还有一部份内容是读取和保存XVID的配置参数。可以根据用户设置参数保存起来,方便用户,不用每次都需要配置一次参数。

posted @ 2006-06-17 12:43  ajuanabc  阅读(119)  评论(0编辑  收藏  举报