void __fastcall TFormVideo::FormCreate(TObject *Sender)
{
int iTotalDSPs = InitDSPs(); //卡初始化
if(iTotalDSPs <= 0)
{
ShowMessage("视频压缩卡初始化失败!");
return;
}
for(int i=0; i<iTotalDSPs; i++) //打开通道
ChannelHandle[i] = ChannelOpen(i);
for(int i=0; i<iTotalDSPs; i++) //流类型设置为只采集视频
SetStreamType(ChannelHandle[i],1);
SetEncoderPictureFormat(ChannelHandle[0], ENC_DCIF_FORMAT); //设置编码方式(这里只设了第一个通道,默认设置为DCIF)
//下面一段是从VC例子上找的,不太清楚
// SetupNotifyThreshold(ChannelHandle[0], 3);
// unsigned int MsgDataReady = RegisterWindowMessage("data ready");
// RegisterMessageNotifyHandle(Handle,MsgDataReady);
// SetOverlayColorKey(RGB(10, 10, 10));
TRect rc;
rc = Panel1->ClientRect;
StartVideoPreview(ChannelHandle[0],Panel1->Handle,&rc,false,vdfYUV422Planar,25);
}
我第一次做视频采集,之前完全没有一点概念。以上都是直接从海康网站上下了个SDK,然后摸索着做的,但图像就是出不来。海康的DEMO程序能正确显示图像,所以硬件肯定没问题的。
对了,卡初始化,打开通道,StartVideoPreview等函数执行时返回0(即执行正确),Panel1颜色设置为0xFFFFFFFF
最好能提供给我一点例子代码,这里先谢过了!
13 个解决方案
#1
我用控件能够采集摄像头的视频
海康的没做过,不懂
帮挺一下
海康的没做过,不懂
帮挺一下
#2
以前做过品尼高电视卡的视频采集,全部使用WINDOWS函数就能够支持了!!
你要用SDK来做二次开发?这个就复杂多了!!
你要用SDK来做二次开发?这个就复杂多了!!
#3
初始化
int i, j;
Init_Video = InitDSPs()
For (i = 0; i<(GetTotalDSPs() - 1);i++)
{
ChannelHandle(i) = ChannelOpen(i)
j = SetVideoStandard(ChannelHandle(i), &H2)
j = SetEncoderPictureFormat(ChannelHandle(i), &H0)
}
SetOverlayColorKey RGB(10, 10, 10)
VideoFlag = False
ChannelValue = 0
int i, j;
Init_Video = InitDSPs()
For (i = 0; i<(GetTotalDSPs() - 1);i++)
{
ChannelHandle(i) = ChannelOpen(i)
j = SetVideoStandard(ChannelHandle(i), &H2)
j = SetEncoderPictureFormat(ChannelHandle(i), &H0)
}
SetOverlayColorKey RGB(10, 10, 10)
VideoFlag = False
ChannelValue = 0
#4
只用过控件或是api
#5
heart119(越陷越深)
初始化
int i, j;
Init_Video = InitDSPs();
For (i = 0; i<(GetTotalDSPs() - 1);i++) //不能GetTotalDSPs()-1吧,通常一张卡只初始化一个DSP,你这样写该循环一次也没执行。
{
ChannelHandle(i) = ChannelOpen(i) //ChannelHandle[i]
j = SetVideoStandard(ChannelHandle(i), &H2) //H2在哪赋值的?
j = SetEncoderPictureFormat(ChannelHandle(i), &H0) //H0又是哪冒出来的?
}
SetOverlayColorKey RGB(10, 10, 10)
VideoFlag = False //VideoFlag哪冒出来的?干么用
ChannelValue = 0 //同上
能贴完整点吗,再则,感觉你这个也太随便了,ChannelHandle(i)显然不对。这样的回答有何意义
初始化
int i, j;
Init_Video = InitDSPs();
For (i = 0; i<(GetTotalDSPs() - 1);i++) //不能GetTotalDSPs()-1吧,通常一张卡只初始化一个DSP,你这样写该循环一次也没执行。
{
ChannelHandle(i) = ChannelOpen(i) //ChannelHandle[i]
j = SetVideoStandard(ChannelHandle(i), &H2) //H2在哪赋值的?
j = SetEncoderPictureFormat(ChannelHandle(i), &H0) //H0又是哪冒出来的?
}
SetOverlayColorKey RGB(10, 10, 10)
VideoFlag = False //VideoFlag哪冒出来的?干么用
ChannelValue = 0 //同上
能贴完整点吗,再则,感觉你这个也太随便了,ChannelHandle(i)显然不对。这样的回答有何意义
#6
我做过视频的二次开发
主要是先初始化卡
然后定义一个矩形,把视频流放到矩形上显示
主要是先初始化卡
然后定义一个矩形,把视频流放到矩形上显示
#7
我以前也做过品尼高的,同意楼上的
#8
if(InitDSPs() <= 0){
//afxDump<<"error:can not init DSPs\n";
ShowMessage("can not init DSPs\n");
}
for(int i = 0; i < GetTotalDSPs(); i++) {
ChannelHandle[i] = ChannelOpen(i);
SetupNotifyThreshold(ChannelHandle[i], 3);
gFileHandle[i] = -1;
}
方法和楼上说的一样啊。先初始化板卡,然后,定义一个矩形区域显示视频流。
//afxDump<<"error:can not init DSPs\n";
ShowMessage("can not init DSPs\n");
}
for(int i = 0; i < GetTotalDSPs(); i++) {
ChannelHandle[i] = ChannelOpen(i);
SetupNotifyThreshold(ChannelHandle[i], 3);
gFileHandle[i] = -1;
}
方法和楼上说的一样啊。先初始化板卡,然后,定义一个矩形区域显示视频流。
#9
我也是这样写的啊:
if(InitDSPs() <= 0) //卡初始化
{
ShowMessage("视频压缩卡初始化失败!");
return;
}
for(int i = 0; i < GetTotalDSPs(); i++)
{
ChannelHandle[i] = ChannelOpen(i); //打开所有可使用的通道
SetEncoderPictureFormat(ChannelHandle[0], ENC_DCIF_FORMAT);
SetupNotifyThreshold(ChannelHandle[i], 3);
}
TRect rc;
rc = Panel1->ClientRect; //定义矩形区域,即为Panel1的全部
StartVideoPreview(ChannelHandle[0],Panel1->Handle,&rc,false,vdfYUV422Planar,25); //开始视频预览
但图像就是出不来,而它的DEMO程序图像能出来。请帮我诊断一下上面的代码
if(InitDSPs() <= 0) //卡初始化
{
ShowMessage("视频压缩卡初始化失败!");
return;
}
for(int i = 0; i < GetTotalDSPs(); i++)
{
ChannelHandle[i] = ChannelOpen(i); //打开所有可使用的通道
SetEncoderPictureFormat(ChannelHandle[0], ENC_DCIF_FORMAT);
SetupNotifyThreshold(ChannelHandle[i], 3);
}
TRect rc;
rc = Panel1->ClientRect; //定义矩形区域,即为Panel1的全部
StartVideoPreview(ChannelHandle[0],Panel1->Handle,&rc,false,vdfYUV422Planar,25); //开始视频预览
但图像就是出不来,而它的DEMO程序图像能出来。请帮我诊断一下上面的代码
#10
能把你们做过的发一个给我么?万分感谢!!!!!!!
hu_zb49@163.com
hu_zb49@163.com
#11
你还需要调用它的另外一个函数
设置显示模式
有两种模式
另外还要看它对显示器的分辨率有没有要求
设置显示模式
有两种模式
另外还要看它对显示器的分辨率有没有要求
#12
g_MRgnID = -1 ; //初始化
t_bFull = true ;
sapiDeviceInit(1) ;
int ret = sapiDisplayCreate();
if(ret<0)
{
ShowMessage("显示,模式不对!");
return;
}
if(ret==0)
{
m_bOverlay = true;
}
if(ret==1)
{
m_bOverlay = false;
}
isPAL = sapiIsPal(0) ;
RECT Rcm, Rc ; //显示
GetWindowRect(Panel1->Handle, &Rcm) ;
Rc.left = 2 ;
Rc.top = 2 ;
Rc.right=Rcm.right - Rcm.left - 2 ;
Rc.bottom=Rcm.bottom - Rcm.top - 2 ;
sapiSetVideoPreviewSource(0, COMPOSITE1);
if(m_bOverlay)
g_MRgnID = sapiCreateMainDispRgn(Panel1->Handle, OVERLAYNOBUF) ;
else
g_MRgnID = sapiCreateMainDispRgn(Panel1->Handle, PRIMARYNOBUF) ;
iSRgnID = sapiCreateSubDispRgnInMainRgn(g_MRgnID, &Rc) ;
sapiStartPreview(0, 0, g_MRgnID, iSRgnID, isPAL) ;
t_bFull = true ;
sapiDeviceInit(1) ;
int ret = sapiDisplayCreate();
if(ret<0)
{
ShowMessage("显示,模式不对!");
return;
}
if(ret==0)
{
m_bOverlay = true;
}
if(ret==1)
{
m_bOverlay = false;
}
isPAL = sapiIsPal(0) ;
RECT Rcm, Rc ; //显示
GetWindowRect(Panel1->Handle, &Rcm) ;
Rc.left = 2 ;
Rc.top = 2 ;
Rc.right=Rcm.right - Rcm.left - 2 ;
Rc.bottom=Rcm.bottom - Rcm.top - 2 ;
sapiSetVideoPreviewSource(0, COMPOSITE1);
if(m_bOverlay)
g_MRgnID = sapiCreateMainDispRgn(Panel1->Handle, OVERLAYNOBUF) ;
else
g_MRgnID = sapiCreateMainDispRgn(Panel1->Handle, PRIMARYNOBUF) ;
iSRgnID = sapiCreateSubDispRgnInMainRgn(g_MRgnID, &Rc) ;
sapiStartPreview(0, 0, g_MRgnID, iSRgnID, isPAL) ;
#13
解决了,把Pannel1的背景色改成255,0,255就OK了,靠,把我累个半死!
谢谢各位!
谢谢各位!
#1
我用控件能够采集摄像头的视频
海康的没做过,不懂
帮挺一下
海康的没做过,不懂
帮挺一下
#2
以前做过品尼高电视卡的视频采集,全部使用WINDOWS函数就能够支持了!!
你要用SDK来做二次开发?这个就复杂多了!!
你要用SDK来做二次开发?这个就复杂多了!!
#3
初始化
int i, j;
Init_Video = InitDSPs()
For (i = 0; i<(GetTotalDSPs() - 1);i++)
{
ChannelHandle(i) = ChannelOpen(i)
j = SetVideoStandard(ChannelHandle(i), &H2)
j = SetEncoderPictureFormat(ChannelHandle(i), &H0)
}
SetOverlayColorKey RGB(10, 10, 10)
VideoFlag = False
ChannelValue = 0
int i, j;
Init_Video = InitDSPs()
For (i = 0; i<(GetTotalDSPs() - 1);i++)
{
ChannelHandle(i) = ChannelOpen(i)
j = SetVideoStandard(ChannelHandle(i), &H2)
j = SetEncoderPictureFormat(ChannelHandle(i), &H0)
}
SetOverlayColorKey RGB(10, 10, 10)
VideoFlag = False
ChannelValue = 0
#4
只用过控件或是api
#5
heart119(越陷越深)
初始化
int i, j;
Init_Video = InitDSPs();
For (i = 0; i<(GetTotalDSPs() - 1);i++) //不能GetTotalDSPs()-1吧,通常一张卡只初始化一个DSP,你这样写该循环一次也没执行。
{
ChannelHandle(i) = ChannelOpen(i) //ChannelHandle[i]
j = SetVideoStandard(ChannelHandle(i), &H2) //H2在哪赋值的?
j = SetEncoderPictureFormat(ChannelHandle(i), &H0) //H0又是哪冒出来的?
}
SetOverlayColorKey RGB(10, 10, 10)
VideoFlag = False //VideoFlag哪冒出来的?干么用
ChannelValue = 0 //同上
能贴完整点吗,再则,感觉你这个也太随便了,ChannelHandle(i)显然不对。这样的回答有何意义
初始化
int i, j;
Init_Video = InitDSPs();
For (i = 0; i<(GetTotalDSPs() - 1);i++) //不能GetTotalDSPs()-1吧,通常一张卡只初始化一个DSP,你这样写该循环一次也没执行。
{
ChannelHandle(i) = ChannelOpen(i) //ChannelHandle[i]
j = SetVideoStandard(ChannelHandle(i), &H2) //H2在哪赋值的?
j = SetEncoderPictureFormat(ChannelHandle(i), &H0) //H0又是哪冒出来的?
}
SetOverlayColorKey RGB(10, 10, 10)
VideoFlag = False //VideoFlag哪冒出来的?干么用
ChannelValue = 0 //同上
能贴完整点吗,再则,感觉你这个也太随便了,ChannelHandle(i)显然不对。这样的回答有何意义
#6
我做过视频的二次开发
主要是先初始化卡
然后定义一个矩形,把视频流放到矩形上显示
主要是先初始化卡
然后定义一个矩形,把视频流放到矩形上显示
#7
我以前也做过品尼高的,同意楼上的
#8
if(InitDSPs() <= 0){
//afxDump<<"error:can not init DSPs\n";
ShowMessage("can not init DSPs\n");
}
for(int i = 0; i < GetTotalDSPs(); i++) {
ChannelHandle[i] = ChannelOpen(i);
SetupNotifyThreshold(ChannelHandle[i], 3);
gFileHandle[i] = -1;
}
方法和楼上说的一样啊。先初始化板卡,然后,定义一个矩形区域显示视频流。
//afxDump<<"error:can not init DSPs\n";
ShowMessage("can not init DSPs\n");
}
for(int i = 0; i < GetTotalDSPs(); i++) {
ChannelHandle[i] = ChannelOpen(i);
SetupNotifyThreshold(ChannelHandle[i], 3);
gFileHandle[i] = -1;
}
方法和楼上说的一样啊。先初始化板卡,然后,定义一个矩形区域显示视频流。
#9
我也是这样写的啊:
if(InitDSPs() <= 0) //卡初始化
{
ShowMessage("视频压缩卡初始化失败!");
return;
}
for(int i = 0; i < GetTotalDSPs(); i++)
{
ChannelHandle[i] = ChannelOpen(i); //打开所有可使用的通道
SetEncoderPictureFormat(ChannelHandle[0], ENC_DCIF_FORMAT);
SetupNotifyThreshold(ChannelHandle[i], 3);
}
TRect rc;
rc = Panel1->ClientRect; //定义矩形区域,即为Panel1的全部
StartVideoPreview(ChannelHandle[0],Panel1->Handle,&rc,false,vdfYUV422Planar,25); //开始视频预览
但图像就是出不来,而它的DEMO程序图像能出来。请帮我诊断一下上面的代码
if(InitDSPs() <= 0) //卡初始化
{
ShowMessage("视频压缩卡初始化失败!");
return;
}
for(int i = 0; i < GetTotalDSPs(); i++)
{
ChannelHandle[i] = ChannelOpen(i); //打开所有可使用的通道
SetEncoderPictureFormat(ChannelHandle[0], ENC_DCIF_FORMAT);
SetupNotifyThreshold(ChannelHandle[i], 3);
}
TRect rc;
rc = Panel1->ClientRect; //定义矩形区域,即为Panel1的全部
StartVideoPreview(ChannelHandle[0],Panel1->Handle,&rc,false,vdfYUV422Planar,25); //开始视频预览
但图像就是出不来,而它的DEMO程序图像能出来。请帮我诊断一下上面的代码
#10
能把你们做过的发一个给我么?万分感谢!!!!!!!
hu_zb49@163.com
hu_zb49@163.com
#11
你还需要调用它的另外一个函数
设置显示模式
有两种模式
另外还要看它对显示器的分辨率有没有要求
设置显示模式
有两种模式
另外还要看它对显示器的分辨率有没有要求
#12
g_MRgnID = -1 ; //初始化
t_bFull = true ;
sapiDeviceInit(1) ;
int ret = sapiDisplayCreate();
if(ret<0)
{
ShowMessage("显示,模式不对!");
return;
}
if(ret==0)
{
m_bOverlay = true;
}
if(ret==1)
{
m_bOverlay = false;
}
isPAL = sapiIsPal(0) ;
RECT Rcm, Rc ; //显示
GetWindowRect(Panel1->Handle, &Rcm) ;
Rc.left = 2 ;
Rc.top = 2 ;
Rc.right=Rcm.right - Rcm.left - 2 ;
Rc.bottom=Rcm.bottom - Rcm.top - 2 ;
sapiSetVideoPreviewSource(0, COMPOSITE1);
if(m_bOverlay)
g_MRgnID = sapiCreateMainDispRgn(Panel1->Handle, OVERLAYNOBUF) ;
else
g_MRgnID = sapiCreateMainDispRgn(Panel1->Handle, PRIMARYNOBUF) ;
iSRgnID = sapiCreateSubDispRgnInMainRgn(g_MRgnID, &Rc) ;
sapiStartPreview(0, 0, g_MRgnID, iSRgnID, isPAL) ;
t_bFull = true ;
sapiDeviceInit(1) ;
int ret = sapiDisplayCreate();
if(ret<0)
{
ShowMessage("显示,模式不对!");
return;
}
if(ret==0)
{
m_bOverlay = true;
}
if(ret==1)
{
m_bOverlay = false;
}
isPAL = sapiIsPal(0) ;
RECT Rcm, Rc ; //显示
GetWindowRect(Panel1->Handle, &Rcm) ;
Rc.left = 2 ;
Rc.top = 2 ;
Rc.right=Rcm.right - Rcm.left - 2 ;
Rc.bottom=Rcm.bottom - Rcm.top - 2 ;
sapiSetVideoPreviewSource(0, COMPOSITE1);
if(m_bOverlay)
g_MRgnID = sapiCreateMainDispRgn(Panel1->Handle, OVERLAYNOBUF) ;
else
g_MRgnID = sapiCreateMainDispRgn(Panel1->Handle, PRIMARYNOBUF) ;
iSRgnID = sapiCreateSubDispRgnInMainRgn(g_MRgnID, &Rc) ;
sapiStartPreview(0, 0, g_MRgnID, iSRgnID, isPAL) ;
#13
解决了,把Pannel1的背景色改成255,0,255就OK了,靠,把我累个半死!
谢谢各位!
谢谢各位!