中国科学技术大学电子工程与信息科学系多媒体通信实验室(Copyright1999) 基于VindowsAPI的视频捕捉卡操作 一、实验目的: 学习在Windows下利用WindowsAPI进行视频捕捉卡开发的基本原理和方法。 二、实验原理 1视频捕捉卡的编程 在DOS操作系统下,视频捕捉卡的编程是依赖于厂商提供的开发包(通常以*LB文 件形式出现)。在Windows操作系统下,既可以利用厂商提供开发包中的动态链接库进行程 序开发,又可以利用WindowsAPI进行开发。由于厂商提供的开发包使得程序不具有兼容性, 在本实验中,只介绍利用WindowsAPI进行开发的方法。有兴趣的同学可以在如下目录找到 FlyVideo视频系列的开发包(MMC\Student\实验讲义和示例(学生版)Fly VideoSDK.zip)。 在windows3..x中,是没有视频支持的,后来微软开发了一个名称为“Video For Windows” (VFW)的视频支持产品,提供想要显示视频剪辑的Windows应用程序所需要的基本视频 音频服务。目前Video For Windows已经被微软作为Windows操作系统的一个部分。可以利 用一些API函数来访问视频设备,此时需要在程序中连接头文件“h?并且将库vw32.b 连接到应用程序中。 2视频有关的结构体和API CAPTUREPARMS结构体 该结构体定义在捕捉过程中视频流的有关格式参数。 typedef struct DWORD dwRequestMicroSecPerFrame: BOOL fMakeUserHitOKToCapture; UINT wPercentDropForError; BOOL fYield: DWORD dwIndexSize; UINT wChunkGranularity, BOOL fUsingDOSMemory; UINT wNumVideoRequested; BOOL fCaptureAudio; UINT wNumAudioRequested; UINT vKeyAbort; BOOL fAbortLeftMouse; 如果您在阅读过程中发现疏漏和错误,请您尽快和编者取得联系network@ustc.cdu.cn cxh@ustc.edu.cn
中国科学技术大学电子工程与信息科学系 多媒体通信实验室(Copyright 1999) 基于 WindowsAPI 的视频捕捉卡操作 一、实验目的: 学习在 Windows 下利用 WindowsAPI 进行视频捕捉卡开发的基本原理和方法。 二、实验原理 1 视频捕捉卡的编程 在 DOS 操作系统下,视频捕捉卡的编程是依赖于厂商提供的开发包(通常以*.LIB 文 件形式出现)。在 Windows 操作系统下,既可以利用厂商提供开发包中的动态链接库进行程 序开发,又可以利用 WindowsAPI 进行开发。由于厂商提供的开发包使得程序不具有兼容性, 在本实验中,只介绍利用 WindowsAPI 进行开发的方法。有兴趣的同学可以在如下目录找到 FlyVideo 视频系列的开发包(\\MMC\Student\实验讲义和示例(学生版)\FlyVideoSDK.zip)。 在 windows3.x 中,是没有视频支持的,后来微软开发了一个名称为“Video For Windows” (VFW)的视频支持产品,提供想要显示视频剪辑的 Windows 应用程序所需要的基本视频 音频服务。目前 Video For Windows 已经被微软作为 Windows 操作系统的一个部分。可以利 用一些 API 函数来访问视频设备,此时需要在程序中连接头文件“vfw.h”,并且将库 vfw32.lib 连接到应用程序中。 2 视频有关的结构体和 API CAPTUREPARMS 结构体 该结构体定义在捕捉过程中视频流的有关格式参数。 typedef struct { DWORD dwRequestMicroSecPerFrame; BOOL fMakeUserHitOKToCapture; UINT wPercentDropForError; BOOL fYield; DWORD dwIndexSize; UINT wChunkGranularity; BOOL fUsingDOSMemory; UINT wNumVideoRequested; BOOL fCaptureAudio; UINT wNumAudioRequested; UINT vKeyAbort; BOOL fAbortLeftMouse; 如果您在阅读过程中发现疏漏和错误,请您尽快和编者取得联系 network@ustc.edu.cn cxh@ustc.edu.cn
中国科学技术大学电子工程与信息科学系多媒体通信实验室(Copyright1999) BOOL fAbortRightMouse; BOOL fLimitEnabled: UINT WTimeLimit; BOOL fMCIControl: BOOL fStepMCIDevice: DWORD dwMCIStartTime: DWORD dwMCIStopTime; BOOL fStepCaptureAt2x; UINT wStepCaptureAverageFrames, DWORD dwAudioBufferSize; BOOL fDisableWriteCache: UINT AVStreamMaster: CAPTUREPARMS: 函数capCreateCapture Window() 调用格式: HWND VFWAPI capCreateCaptureWindow(∥功能:创建一个捕获蓄口. LPCSTR IpszWindowName. ∥捕获筋口的名称 DWORD dwStyle, ∥捕获窗口的窗口风格 int x,int y, ∥捕获窗口的左上角坐标 int nWidth,int nHeight, ∥捕获窗口的的宽和高 HWND hWnd. ∥捕获窗口的的父窗口句柄 int nID ∥捕获窗口的的ID值 使用示例: HWND m hCapture; m_hCapture =capCreateCaptureWindow("Cap",WS_EX_CONTROLPARENT I WS CHILD WS VISIBLE,4,4,320,240,m hWnd,0); 函数capDriverConnect() 连接视频捕获装置到捕获窗口 capDriverConnect(m hCapture,0); 函数capCaptureGetSetup() 返回视频流的有关参数设置 CAPTUREPARMS m_CaptureParms; capCaptureGetSetup(m hCapture,&m CaptureParms,sizeof(m CaptureParms)); 函数capOverlay() 使得当前窗口为Overlay窗口,在窗口上显示摄入视频信息。 capOverlay(m_hCapture,TRUE); 函数capGrabFrame() 捕获当前的一贞画面到捕获窗口 如果您在阅读过程中发现疏漏和错误,请您尽快和编者取得联系network@ustc.cdu.cn cxh@ustc.edu.cn
中国科学技术大学电子工程与信息科学系 多媒体通信实验室(Copyright 1999) BOOL fAbortRightMouse; BOOL fLimitEnabled; UINT wTimeLimit; BOOL fMCIControl; BOOL fStepMCIDevice; DWORD dwMCIStartTime; DWORD dwMCIStopTime; BOOL fStepCaptureAt2x; UINT wStepCaptureAverageFrames; DWORD dwAudioBufferSize; BOOL fDisableWriteCache; UINT AVStreamMaster; } CAPTUREPARMS; 函数 capCreateCaptureWindow() 调用格式: HWND VFWAPI capCreateCaptureWindow( //功能:创建一个捕获窗口。 LPCSTR lpszWindowName, //捕获窗口的名称 DWORD dwStyle, //捕获窗口的窗口风格 int x, int y, //捕获窗口的左上角坐标 int nWidth, int nHeight, //捕获窗口的的宽和高 HWND hWnd, //捕获窗口的的父窗口句柄 int nID //捕获窗口的的 ID 值 ); 使用示例: HWND m_hCapture; m_hCapture = capCreateCaptureWindow ("Cap",WS_EX_CONTROLPARENT | WS_CHILD | WS_VISIBLE, 4, 4, 320, 240, m_hWnd, 0); 函数 capDriverConnect() 连接视频捕获装置到捕获窗口 capDriverConnect (m_hCapture, 0); 函数 capCaptureGetSetup() 返回视频流的有关参数设置 CAPTUREPARMS m_CaptureParms; capCaptureGetSetup (m_hCapture, &m_CaptureParms, sizeof (m_CaptureParms)); 函数 capOverlay() 使得当前窗口为 Overlay 窗口,在窗口上显示摄入视频信息。 capOverlay (m_hCapture, TRUE); 函数capGrabFrame() 捕获当前的一贞画面到捕获窗口 如果您在阅读过程中发现疏漏和错误,请您尽快和编者取得联系 network@ustc.edu.cn cxh@ustc.edu.cn
中国科学技术大学电子工程与信息科学系多媒体通信实验室(Copyright1999) capGrabFrame(m hCapture); 函数capFileSaveDIB() 将当前捕获到的一贞画面保存到文件 capFileSaveDIB(m_hCapture,"e:Muser\test.bmp"): 函数capFileSaveAs() 将当前捕获到的动画保存到文件 capFileSaveAs(m hCapture,"e:Muser\test.avi"); 函数capDlg VideoCompression() 显示系统的视频压缩格式对话框 capDlgVideoCompression(m hCapture): 函数capDlg VideoSource() 显示视频捕捉卡的驱动程序设置对话框 capDlgVideoSource(m hCapture); (注意:此处仅列出在样本程序中使用到的API函数,其他的API函数请参阅C的联机帮 助。) 三、实验要求: 1操作视频捕捉卡 在菜单中选择“LifeView Fly Video”中“Fly Video For NT”应用程序。缩小所显示窗口 的尺寸,即可以看到由摄像头输入的影像。在所显示窗口上点击鼠标右键,可以看到设置菜 单。请逐项进行操作,然后在实验报告中将能够进行的设置选项记录下来(例如:可以设置 亮度、可以设置对比度等等)。 H LE AV Settings... Capture Settings... Full Screen Always on Top Overlay Mode Preview Mode 如果您在阅 ustc.edu.cn
中国科学技术大学电子工程与信息科学系 多媒体通信实验室(Copyright 1999) capGrabFrame(m_hCapture); 函数capFileSaveDIB() 将当前捕获到的一贞画面保存到文件 capFileSaveDIB(m_hCapture,"e:\\user\\test.bmp"); 函数 capFileSaveAs() 将当前捕获到的动画保存到文件 capFileSaveAs( m_hCapture,"e:\\user\\test.avi"); 函数capDlgVideoCompression() 显示系统的视频压缩格式对话框 capDlgVideoCompression(m_hCapture); 函数capDlgVideoSource() 显示视频捕捉卡的驱动程序设置对话框 capDlgVideoSource(m_hCapture); (注意:此处仅列出在样本程序中使用到的 API 函数,其他的 API 函数请参阅 VC 的联机帮 助。) 三、实验要求: 1 操作视频捕捉卡 在菜单中选择“LifeView FlyVideo”中“Fly Video For NT”应用程序。缩小所显示窗口 的尺寸,即可以看到由摄像头输入的影像。在所显示窗口上点击鼠标右键,可以看到设置菜 单。请逐项进行操作,然后在实验报告中将能够进行的设置选项记录下来(例如:可以设置 亮度、可以设置对比度等等)。 如果您在阅读过程中发现疏漏和错误,请您尽快和编者取得联系 network@ustc.edu.cn cxh@ustc.edu.cn
中国科学技术大学电子工程与信息科学系多媒体通信实验室(Copyright1999) 2视频捕捉卡编程 以下是在VC5下开发的样本程序示例界面,请同学们参照样本程序,学习视频设备编 程的基本方法。要求自己制作一个程序(可以用VC、Delphi),显示由摄像头摄入的影像, 并能够将抓取的图象和动画保存到硬盘上。本实验的编程很简单,请不要抄袭样本程序。对 具有独特风格的程序,将给予加分。 视频捕捉卡操作示例 ☒ 开始捕捉 抓取画面 保存画面 保存动画 设置动画格式, 设置捕捉卡 退出 四、思考题 1、Windows下视频程序开发和DOS下有什么不同? 2、Video For Windows提供一些什么功能?请列举一些。如果您是视频捕捉卡的生产厂家, 您需要在开发包中提供那些功能函数(指所提供函数的功能)? 如果您在阅读过程中发现疏漏和错误,请您尽快和编者取得联系network@ustc.cdu.cn cxh@ustc.edu.cn
中国科学技术大学电子工程与信息科学系 多媒体通信实验室(Copyright 1999) 2 视频捕捉卡编程 以下是在 VC5 下开发的样本程序示例界面,请同学们参照样本程序,学习视频设备编 程的基本方法。要求自己制作一个程序(可以用 VC、Delphi),显示由摄像头摄入的影像, 并能够将抓取的图象和动画保存到硬盘上。本实验的编程很简单,请不要抄袭样本程序。对 具有独特风格的程序,将给予加分。 四、思考题 1、 Windows 下视频程序开发和 DOS 下有什么不同? 2、 Video For Windows 提供一些什么功能?请列举一些。如果您是视频捕捉卡的生产厂家, 您需要在开发包中提供那些功能函数(指所提供函数的功能)? 如果您在阅读过程中发现疏漏和错误,请您尽快和编者取得联系 network@ustc.edu.cn cxh@ustc.edu.cn