📄 simpapi13.txt
字号:
//6.
SAPI int DLLCALL sapiGetCardType(UINT CardID);
输入:卡号.(0,1,2...)
返回:卡的类型.
功能: 得到某卡的类型.可为常数SS1,SS1A,SS2,SS2A,SD,SDA
//7.
SAPI int DLLCALL sapiGetCardSerial(UINT CardID);
输入:卡号.(0,1,2...)
返回:卡的序列号.
功能: 得到卡的唯一序列号.
SAPI int DLLCALL sapiGetCardPCIIndex(UINT CardID);
输入:卡号.(0,1,2...)
返回:卡的PCI识别序号.
功能:得到卡的PCI识别序号,该号越小,在PCI扫描中越先发现,在同一台机器上
插卡的位置不变时,该号也不变.一般情况下,该号等于CardID.但有时不同.
//8.
//DataType=0 (ENCODER1),2(ENCODER2),3(AUDIOIN)
SAPI long DLLCALL sapiGetCaptureDataLostCounter(UINT CardID,int DataType);
输入:CardID卡号;DataType数据类型,可取值为0(ENCODER1),2(ENCODER2),3(AUDIOIN)
返回:数据块丢失计数.0无丢失,0xffffffff不支持查询,其他数值越高,丢失越高
功能:用该函数,查询压缩编码器1,压缩编码器2(SD卡)和音频输入流数据丢失情况.
在有丢失时,应该加大缓冲区长度,或提高机器速度.
2.视频输入通道设置函数
//1.
SAPI BOOL DLLCALL sapiSetVideoCompressSource(UINT CardID,UINT VInputChannel);
输入:CardID卡号;VInputChannel视频压缩输入通道号,可取值COMPOSITE1,COMPOSITE2,COMPOSITE3
COMPOSITE4,既四个复合道号.
返回:TREU成功.
功能:设置视频压缩输入通道.
//2.
SAPI BOOL DLLCALL sapiSetVideoPreviewSource(UINT CardID, UINT VInputChannel);
输入:CardID卡号;VInputChannel视频预览输入通道号,可取值COMPOSITE1,COMPOSITE2,COMPOSITE3
COMPOSITE4,既四个复合道号.
返回:TREU成功.
功能:设置视频预览输入通道.
//3. //value 0-255
SAPI BOOL DLLCALL sapiSetVideoPreviewSourceParams(UINT CardID,UINT VInputChannel,UNIT ParamID,UINT value);
输入:CardID卡号;VInputChannel视频预览输入通道号,可取值COMPOSITE1,COMPOSITE2,COMPOSITE3
COMPOSITE4,既四个复合道号;ParamID为设置参数类型,为亮度BrightnessID,对比度ContrastID,
色饱和度SaturationID,色调HueID;value为参数值,它们的取值范围均为0-255.
返回:TREU成功.
功能:设置视频预览输入通道的亮,色,对比度参数.如用系统缺省设置可不调用该函数.
//4. //value 0-255
SAPI BOOL DLLCALL sapiSetVideoCompressSourceParams(UINT CardID,UINT EncoderID,UNIT ParamID,UINT value);
输入:CardID卡号;VInputChannel视频压缩输入通道号,可取值COMPOSITE1,COMPOSITE2,COMPOSITE3
COMPOSITE4,即四个复合道号;ParamID为设置参数类型,为亮度BrightnessID,对比度ContrastID,
色饱和度SaturationID,色调HueID;value参数值,它们的取值范围均为0-255.
返回:TREU成功.
功能:设置视频压缩输入通道的亮,色,对比度参数.如用系统缺省设置可不调用该函数.
注意:对SS2,SS2A卡,视频压缩,视频预览输入通道不同可以用sapiSetVideoPreviewSourceParams
和sapiSetVideoCompressSourceParams分别设置,对其他卡两者相同.不须分别设置.
3.视频压缩功能
Video compress function
有关视频压缩结构定义:
3-1.压缩回调函数指针VOIDENCODERCALLBACK
typedef void (* VOIDENCODERCALLBACK)(UINT CardID,UINT EncoderID,BYTE * buf,int length,void * pUsrParam);
当用户希望获取压缩数据流时,可以自定义一个回调函数,并定义自已的参数pUsrParam,将其添入
压缩参数stEncoderParams结构,则启动压缩后,每当有压缩数据到SSAPI系统内核后,系统会调用
回调函数,并传入卡号CardID,编码器号EncoderID,压缩数据缓存指针buf,数据长度length,用户
自定义参数.用户应尽快处理结束并返回.注意回调函数是在独立的压缩线程中,注意线程同步问题.
比如定义回调函数:
void MyCompressCallBackFun(UINT CardID,UINT EncoderID,BYTE * buf,int length,void * pUsrParam)
{
}
3-2.视频编码器参数结构ENCODERPARM 用于描述S1000系列卡编码器参数
typedef struct {
UINT BufLength;//=16384,32768,65536最小BufLength=16384
UINT BufNums;//=6,7,8,...
UNIT Mode;//Mode=1 mpg mode;Mode=2 jpeg mode
UNIT BitRateMode;//0:const bit rate,use for mpeg mode ;1: var bit rate use for Mpeg
/and MJPEG mode
UNIT StreamFrameSize;//0: SIF size normal;1: QSIF size small
UNIT BitRate;//200000-3000000 use only for mpeg const bit rate mode
UNIT M ; //for I Frame mpeg,M=N=1; NORMAL mpeg M=3,N=15
UNIT N ; //for mjpeg M not use,N control the Frame rate,N=1:25 F/s;N=xx: 25/xx F/s
UNIT Quality;//0-30 use for mpeg var bit rate mode or mjpeg mode
//the small number, the large of the recoder file.
UNIT SequenceDistance;//=4 mpeg video Sequence Distance.
UNIT GOPDistance;//=4 mpeg video GOPDistance Distance
} ENCODERPARM;
在Tvcard.ini配置文件中,ENCODER,ENCODER2节中,定义了SS1卡,SS2卡编码器(ENCODER)及SD卡(ENCODER,ENCODER2)的缺省配置编码参数.
该结构与Tvcard.ini配置参数是一一对应的.它用于控制每块卡编码器的工作.
BufLength为缓冲区块长度,必须为4096的倍数,BufNums为缓冲区块数,缓冲区总长度=BufLength*BufNums
卡越多,数据率越高缓冲区应越大.增加缓冲区块长度,比增加缓冲区块数,有效的多.
sapiGetCaptureDataLostCounter函数就可以检察缓冲区是否够用.
Mode:编码Mode, 1 为Mpeg Mode. 2 为Mjpeg Mode.
BitRateMode:位速率Mode, 0:恒定位速率,仅用于Mpeg方式。1:可变位速率,用于Mpeg VBR变码率及MJPEG方式。
对监控应用,MPEG可变位速率(var bit rate)可有效的压缩数据.70-300MB/小时
StreamFrameSize:画面尺寸0: SIF size(PAL=352*288);1:QSIF(176*144)
对远程传输,带宽受限时QSIF可大大减少数据量。
BitRate:位速率,仅用于Mpeg恒定位速率方式200000-3000000,多数MPEG-1卡仅能在此方式工作。
Quality:恒定质量1-30,越小,质量越高,一般取5-7即可。用于Mpeg VBR变码率及MJPEG方式
M,N 控制MPEG关建帧(I)与预测帧(B,P)的组合。一般M=3,N=15;对MPEG 纯I帧M=1,N=1;帧序列IIII...
M=2,N=2,4,6,8,10,...60; 帧序列BIBPBPBP...
M=3,N=3,6,9,12,15,...,60; 帧序列BBIBBPBBP...
M=4,N=4,8,12,16,...,60; 帧序列BBBIBBBPBBBP...
M,N取值越高,压缩越高。I帧压缩小,P压缩较高,B压缩最高。
适当调整M,N达到压缩高,且画质较好。
对MJPEG方式M不用,N控制帧速率。JPEG帧速率=25/N (PAL),N=1-60.
SequenceDistance:相邻MPEG视频流序列头间隔(间隔多少图象组)0-15,一般取4;序列头000001B3
GOPDistance: 相邻MPEG图象组头间隔多少I帧: 1-15. 一般取4
这两个间隔加大会减少数据量.组头000001B8
3-3. 编码器参数
typedef struct {
BOOL UseTVCardini; //是否使用TVCARD.INI的设置作为编码器参数设置。TRUE使用,FALSE不使用.
int VideoStandard; //1:PAL;0 NTSC
ENCODERPARM * pEncoderParams; //编码器参数结构地址,如UseTVCardini为TRUE,则可置0,否则不可为0。
char * pfilename; //需SSAPI记录文件时的文件名,否则置0.
void * pUserCallBackParam; //用户自用参数指针,当用消息通知方式获取压缩数据接口时置0
VOIDENCODERCALLBACK pEncodercallback; //回调函数指针,当用消息通知方式获取压缩数据接口时置0
} stEncoderParams;
该结构控制整个S1000卡压缩流的工作。
UseTVCardini:
pEncoderParams:这两个参数配合使用。当UseTVCardini置为TRUE时,表示使用Tvcard.ini中的
ENCODER或ENCODER2节的参数,pEncoderParams不用,可置0。
当UseTVCardini置为FALSE时表示不用Tvcard.ini中的参数,用户必须填充一个
ENCODERPARM结构,并将其地址置入pEncoderParams中。
VideoStandard:压缩视频标准1为PAL,0为NTSC。我国为PAL(1).
pfilename:存储压缩文件名字串。用户置入文件名时,则启动压缩后,SSAPI DLL会自动产生该文件
。如为0,则DLL不产生记录文件及写盘操作。此时用户可使用编码回调函数完全自己处理
压缩数据。也可以记录文件的同时使用编码回调函数。
pEncodercallback:当用户不须要处理压缩数据时,可置0。当用户需要处理压缩数据时,可定义一个
压缩回调函数,处理压缩数据。见3-1说明。
3-4:函数
//1
SAPI int sapiStartOneCompressRec(UINT CardID,UINT EncoderID,stEncoderParams * pParams);
输入: CardID卡号,EncoderID视频编码器号,为0(ENCODER1)或1(ENCODER2)(SD卡)
pParams 为结构指向stEncoderParams(见3-3)的指针。
返回: 成功返回启动的编码器ID(0或1),失败返回〈0,查SSAPI.cpp;
功能: 启动一路编码器压缩流。
注意: 对同一块卡,只能调用该函数一次。必须Call sapiStopCompressRec后,才可再次调用它。
//2.
SAPI int sapiStartTwoCompressRec(UINT CardID,stEncoderParams * pEnc1Params,stEncoderParams * pEnc2Params);
输入: CardID卡号,pEnc1Params 为编码器1参数结构指向stEncoderParams(见3-3)的指针。
pEnc2Params 为编码器2参数结构指向stEncoderParams(见3-3)的指针。
返回: 成功返回0,失败返回〈0,查SSAPI.cpp;
功能: 启动两路编码器压缩流。仅用于SD卡。
//3.
SAPI BOOL sapiStopCompressRec(UINT CardID);
输入: CardID卡号
返回: 成功TRUE.
功能: 停止压缩码流,关闭压缩文件。
//4.
SAPI BYTE * sapiSearchB4TYPE(B4TYPE * pB4type, BYTE * Buffer,int BufferLength);
输入: pB4type待查找的4字节码结构指针,Buffer:缓存首地址,BufferLength 缓存中数据长度。
返回: 成功返回指向4字节码头的指针(包括4字节码).失败返回0。
功能: 在压缩码流缓存中,搜索指定4字节码,如序列头000001b3,等。
一般用于MPEG流。用户必须自行处理两个缓冲的接缝问题(第一个Buff的最后3字节
和下一个Buff的首3字节)。
//5
SAPI BYTE * sapiSearchB2TYPE(B2TYPE * pB2type, BYTE * Buffer,int BufferLength);
同4,类似。
功能:在压缩码流缓存中,搜索指定2字节码,如JPEG头FF D8。
一般用于MJPEG流。
4.视频预览显示功能
Video preview function
4-1.
a.主区域:一个Windows窗口的客户区.每个主区域与一个Windows窗口关联,含有一个
窗口句柄。每个主区域用一个MRgnID整数识别,MRgnID实质是主区域数组下标为0,1,2,3...。
主区域顶点是屏幕坐标。
b.子区域:在一个主区域内可创建若干个矩形区称它们为子区域.
每个子区域用SRgnID整数标识.SRgnID实质是子区域数组下标。0,1,2,3...。子区域矩形的左顶点坐标是相对于
主区域左顶点的坐标,即客户坐标.子区域最大可与主区域相同.
当主区域(窗口)缩放及移动时,区域内所有子区域自动缩放及移动.
c.SD和SS2卡均可以完成双路同屏实时显示(每路50场),且双路画面均为高分辨率全帧(两场)
SD,SS2 卡由主,次两路显示通道构成完成.与SS1单路卡相比增加了次显示通道
对主通道的控制与SS1卡相同。次显示通道则有一些局限:
与主通道相比次通道不能认意缩放,帧尺寸水平分4级(1,1/2,1/4,1/8)(PAL:704,704/2,704/4
704/8),垂直分为4级(1,1/2,1/4,1/8) (PAL:576,576/2,576/4,576/8)
次显示通道必须由支持YUY2的Overlay模式的显卡支持.
但因主次显示通道可任意交换,可以克服次显示通道局限。见应用程序TT3。
d. 每个主区域有个区域属性DispMode,决定该区域中所有子区域的工作方式.
目前有4种方式.在SSAPI.H定义.
PRIMARYBUF 主平面缓冲写方式:
(适于显示预览主通道,占用CPU,显卡兼容好)
PRIMARYNOBUF 主平面直接写方式:
(适于显示预览主通道,不占CPU,显卡兼容较好)
OVERLAYBUF 覆盖平面缓冲写方式:
(适于显示预览主,次通道,占用CPU,显卡兼容较差)
OVERLAYNOBUF 覆盖平面直接写方式
(适于显示预览主,次通道,不占CPU,覆盖写对显卡兼容较差)
推荐使用Interl或ATI显卡及某些TNT显卡.
对TNT显卡,丽台的S320II(TNT2)显卡+S320II Driver测试正确。
其它TNT显卡多数不可用,但使用丽台的S320II Driver驱动很可能成功。
请到丽台网站下载(www.leadtek.com.cn或www.leadtek.com)
4-2 函数
//1.
SAPI int DLLCALL sapiCreateMainDispRgn(HWND hwnd,UINT DispMode);
输入: hwnd:主区域所在窗口句柄;DispMode:显示区域属性。取值OVERLAYNOBUF,OVERLAYBUF,
PRIMARYNOBUF,PRIMARYBUF
返回: 成功返回主区域MRgnID标识.失败返回<0.
功能: 以指定属性DispMode,创建一个主区域。
//2.
SAPI int DLLCALL sapiCreateSubDispRgnInMainRgn(int MRgnID,RECT * prect);
输入: MRgnID:主区域标识;prect:子矩形区域指针,客户坐标。取值OVERLAYNOBUF,OVERLAYBUF,
PRIMARYNOBUF,PRIMARYBUF
返回: 成功返回子区域SRgnID标识.失败返回<0.
功能: 在主区域中创建一个子区域。
//3.
SAPI BOOL DLLCALL sapiDestoryMainDispRgn(int MRgnID);
输入: MRgnID:主区域标识
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -