-
3.2
使用视频捕获
3.2.1
创建捕获窗体
下面的例子通过使用
capCreateCaptureWindow<
/p>
函数来创建一个捕获窗体
hWndC
= capCreateCaptureWindow (
(LPSTR)
//
如果是
Pop-
up
窗口的窗口名称
WS_CHILD | WS_VISIBLE,
//
窗口类型
0, 0, 160, 120,
//
窗口位置和尺寸
(HWND) hwndParent,
(int) nID
/* child ID
*/
);
3.2.2
连接到一个捕获驱动器
下面举例,
如何通过捕获窗口的句柄
h
WndC
连接到
MS VIDEO
驱动
程序上,
同时还演示了如何断开连接。使用
capDriver
Disconnect
:
fOK =
SendMessage (hWndC, WM_CAP_DRIVER_CONNECT, 0, 0L);
//
或者使用宏连接:
// fOK = capDriverConnect(hWndC, 0);
//
关闭连接
capDriverDisconnect (hWndC);
3.2.3
列举安装的捕获驱动程序
使用
capGetDriverDe
scription
函数来获得系统已经安装的所有捕获驱动
程序的
名称和版本。
char
szDeviceName[80];
char
szDeviceVersion[80];
for
(wIndex = 0; wIndex < 10; wIndex++)
{
if
(capGetDriverDescription (wIndex, szDeviceName,
sizeof (szDeviceName),
szDeviceVersion,
sizeof (szDeviceVersion))
{
//
加入名字到一个已经安装的设备列表中
//
让用户选择一个使用。
}
}
3.2.4
获得捕获驱动器的性能参数
WM_CAP_DRIVER_G
ET_CAPS
消息可以返回捕获驱动程序以及其硬件的
性能参
数。这些信息存放在一个
CAPDRIVERCAPS
的数据结
构中。当你的应用
程序的捕获窗口连接到一个新的捕获驱动器后,都会刷新这个
CAPDRIVERCAPS
数据结构。下面将使用
capDriverGetCaps
宏来获得捕获设备
的性
能参数。
CAPDRIVERCAPS
CapDrvCaps;
SendMessage
(hWndC, WM_CAP_DRIVER_GET_CAPS,
sizeof (CAPDRIVERCAPS), (LONG) (LPVOID)
&CapDrvCaps);
//
或者,使用宏来获得驱动器的新能参数
// capDriverGetCaps(hWndC,
&CapDrvCaps, sizeof (CAPDRIVERCAPS));
3.2.5
获得捕获窗口状态
(Status)
< br>下面例子使用
SetWindowPos
函数区设置捕获
窗口的尺寸,这个尺寸的大小
是基于输入的视频流大小的。输入视频流的尺寸大小由
p>
capGetStatus
宏来获得,
获得
信息放在一个
CAPSTATUS
的数据结构体中。
CAPSTATUS CapStatus;
capGetStatus(hWndC, &CapStatus, sizeof
(CAPSTATUS));
SetWindowPos(hWndC, NULL, 0, 0, eWidth,
eHeight,
SWP_NOZORDER | SWP_NOMOVE);
3.2.6
显示对话框区设置视频属性
每个捕获驱动器都可以提高
3
个以上的不同对话框来控制数字视频的特性和
捕获处理。
下面的例子示范如何显示这些对话框。
在显示每个
对话框前,
该例会
调用
capDriv
erGetCaps
宏并且检查返回的
CAPDRIVERCA
PS
对象来查看是否
可以能够显示特定的对话框。
CAPDRIVERCAPS CapDrvCaps;
capDriverGetCaps(hWndC, &CapDrvCaps,
sizeof (CAPDRIVERCAPS));
//
视频源对话框
if
(gVideoSource)
capDlgVideoSource(hWndC);
//
视频格式对话框
if (gVideoFormat)
{
capDlgVideoFormat(hWndC);
//
是否由新的图像尺寸?
Are
there new image dimensions?
capGetStatus(hWndC, &CapStatus, sizeof
(CAPSTATUS));
//
如果有,发送通知给父窗口,告诉它尺寸改变了
}
//
视频显示对话框
if (gVideoDisplay)
capDlgVideoDisplay(hWndC);
3.2.7
获得和设定视频格式
BITMAPINFO
数据结构体可
以实现长度可调节地去适应标准压缩的数据格
式。
因为它的长度
可以变,
所以在每次获得当前视频格式前,
都必须去查询这个<
/p>
结构的长度以及分配的内存大小。
该例子使用了
< br>capGetVideoFormatSize
宏去获
得
缓存区大小,使用
capGetVideoFormat
宏区获
得当前视频格式。
LPBITMAPINFO
lpbi;
DWORD
dwSize;
dwSize =
capGetVideoFormatSize(hWndC);
lpbi = GlobalAllocPtr (GHND,
dwSize);
capGetVideoFormat(hWndC, lpbi, dwSize);
//
访问视频格式,并且释放分配的内存。
应用程序使用
< br>capSetVideoFormat
宏
(WM_CAP
_SET_VIDEOFORMAT)
,把一个
BITMAPI
NFO
结构发送给捕获窗口,显示修改。因为视频格式由设备指定的,
< br>你的应用程序可以去检查获得的返回值,来知道这个视频格式是不是公开的。
3.2.8
预览视频
下面使用
capPreviewRa
te
宏来设置预览模式的帧频率为
66
毫秒
/
帧,使用
capPreview
宏在捕获窗口预览图像。
capPreviewRate(hWndC, 66);
//
速度
,
微秒
capPreview(hWndC, TRUE);
//
开始预览
capPreview(hWnd, FALSE);
//
屏蔽预览
3.2.9
允许视频覆盖
(Overlay)
下面使用
capDriverGetCaps
宏去检测这个捕获驱动是否支持覆盖
(Overlay)
模
式
,
如果支持,就允许视频覆盖模式;
CAPDRIVERCAPS
CapDrvCaps;
capDriverGetCaps(hWndC, &CapDrvCaps,
sizeof (CAPDRIVERCAPS));
if
(erlay)
capOverlay(hWndC, TRUE);
3.2.10
捕获文件命名
下例使用
capFileSetCa
ptureFile
宏来指定一个要命名的文件名
(
)
,
使用
capFileAlloc
宏去预分配
5MB
的文件。
char szCaptureFile[] =
capFileSetCaptureFile( hWndC,
szCaptureFile);
capFileAlloc( hWndC, (1024L * 1024L *
5));
3.2.11
格式化音频捕获
下例使用
capSetAudioF
ormat
来设置音频格式为
11-KHz PCM
8-bit,
立体声。
WAVEFORMATEX
wfex;
tTag =
WAVE_FORMAT_PCM;
els = 2;
//
使用立体声
esPerSec = 11025;
tesPerSec = 22050;
Align = 2;
erSample = 8;
=
0;
capSetAudioFormat(hWndC,
&wfex, sizeof(WAVEFORMATEX));
3.2.12
改变视频捕获设置
下例使用
capCaptureGetSetup
和
capCaptur
eSetSetup
宏来改变捕获速度,从
默认值
(15
帧
/
秒
)
到
10
帧
/
秒。
CAPTUREPARMS
CaptureParms;
float
FramesPerSec = 10.0;
capCaptureGetSetup(hWndC,
&CaptureParms, sizeof(CAPTUREPARMS));
-
-
-
-
-
-
-
-
-
上一篇:描写田园风光的优美诗句大全
下一篇:描写秋冬的诗句