18,356
社区成员
发帖
与我相关
我的任务
分享
BOOL CDlgVideoConfig::OnInitDialog()
{
CDialogMultiLan::OnInitDialog();
// TODO: Add extra initialization here
m_btnProperty.SubclassDlgItem(IDC_BTN_VIDEOPROPERTY,this);
m_btnPicProperty.SubclassDlgItem(IDC_BTN_PICPROPERTY,this);
m_btnPicProperty.ShowWindow( SW_HIDE );
m_cbVideoSize.ResetContent();
//
m_cbVideoSize.AddString("160 * 120");
m_cbVideoSize.AddString("176 * 144");
m_cbVideoSize.AddString("320 * 240");
m_cbVideoSize.AddString("352 * 288");
#ifndef VIDEO_CIF //高清版
m_cbVideoSize.AddString("640 * 480");
#ifndef VIDEO_HR
m_cbVideoSize.AddString("704 * 576");
m_cbVideoSize.AddString("720 * 576");
#endif
#endif
CString strText;
g_lanManager.ReadTableString( IDS_CONTROL_VBRMODE,strText );
int nIndex = m_cbEncodeMode.AddString( strText );
m_cbEncodeMode.SetItemData( nIndex,0 );
g_lanManager.ReadTableString( IDS_CONTROL_CBRMODE,strText );
nIndex = m_cbEncodeMode.AddString( strText );
m_cbEncodeMode.SetItemData( nIndex,1 );
LoadConfig();
VIDEO_GetDefImgProcSetting( m_imgFilterSetting );
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CDlgVideoConfig::LoadConfig()
{
switch(g_config.m_videoConfig.nVideoSize){
case 0:
m_nVideoWidth = 160;
m_nVideoHeight = 120;
break;
case 1:
m_nVideoWidth = 176;
m_nVideoHeight = 144;
break;
case 2:
m_nVideoWidth = 320;
m_nVideoHeight = 240;
break;
case 3:
m_nVideoWidth = 352;
m_nVideoHeight = 288;
break;
case 4:
m_nVideoWidth = 640;
m_nVideoHeight = 480;
break;
case 5:
m_nVideoWidth = 704;
m_nVideoHeight = 576;
break;
case 6:
m_nVideoWidth = 720;
m_nVideoHeight = 576;
break;
default:
g_config.m_videoConfig.nVideoSize = 2;
m_nVideoWidth = 320;
m_nVideoHeight = 240;
break;
}
//缺省视频大小
m_cbVideoSize.SetCurSel(g_config.m_videoConfig.nVideoSize);
m_chkImgProc.SetCheck( g_config.m_videoConfig.bEnableImgProc );
m_chkOVerlay.SetCheck( g_config.m_videoConfig.bUseOverlay );
//最大码流
m_sliderBitRate.SetRange(0,2048);
m_sliderBitRate.SetPageSize( 10 );
m_sliderBitRate.SetLineSize( 10 );
if(g_config.m_videoConfig.nBitRate == 0)
g_config.m_videoConfig.nBitRate = 128;
m_sliderBitRate.SetPos( g_config.m_videoConfig.nBitRate );
for (int i=0;i<m_comRade.GetCount();i++)
{
CString strTemp;
m_comRade.GetLBText(i, strTemp);
strTemp.Replace("Kpbs","");
if (atoi(strTemp.GetBuffer(0)) == g_config.m_videoConfig.nBitRate)
m_comRade.SetCurSel(i);
}
CString strBitRate;
strBitRate.Format("%dKbps",g_config.m_videoConfig.nBitRate );
SetDlgItemText( IDC_STATIC_BITRATE,strBitRate);
//视频采集设备
m_cbVideoCapturer.ResetContent();
CString strDevice;
CStringList lstVDevices;
VIDEO_EnumDevices(lstVDevices);
POSITION pos = lstVDevices.GetHeadPosition();
while(pos){
strDevice = lstVDevices.GetNext(pos);
int nIndex = m_cbVideoCapturer.AddString(strDevice);
}
lstVDevices.RemoveAll();
//如果没有找到上次保存的设置ID,则设置第一个设备为默认设备
if( m_cbVideoCapturer.GetCount() > 0 ){
if( m_cbVideoCapturer.GetCount() > g_config.m_videoConfig.nVideoCapture
&& g_config.m_videoConfig.nVideoCapture >= 0)
m_cbVideoCapturer.SetCurSel( g_config.m_videoConfig.nVideoCapture );
else{
m_cbVideoCapturer.SetCurSel( 0 );
g_config.m_videoConfig.nVideoCapture = 0;
}
}
m_cbVideoEncoder.ResetContent();
CString strEncoder;
CStringList lstEncoders;
VIDEO_EnumEncoders(lstEncoders);
pos = lstEncoders.GetHeadPosition();
while(pos){
strEncoder = lstEncoders.GetNext(pos);
int nIndex = m_cbVideoEncoder.AddString(strEncoder);
}
lstEncoders.RemoveAll();
//设置默认压缩器
if( m_cbVideoEncoder.GetCount() > 0 ){
if( m_cbVideoEncoder.GetCount() > g_config.m_videoConfig.nVideoEncoder
&& g_config.m_videoConfig.nVideoEncoder >= 0)
m_cbVideoEncoder.SetCurSel( g_config.m_videoConfig.nVideoEncoder );
else{
m_cbVideoEncoder.SetCurSel( 0 );
g_config.m_videoConfig.nVideoEncoder = 0;
}
}
//设置默认压缩模式
if( m_cbEncodeMode.GetCount() > 0 ){
if( m_cbEncodeMode.GetCount() > g_config.m_videoConfig.nVideoEncodeMode
&& g_config.m_videoConfig.nVideoEncodeMode >= 0)
m_cbEncodeMode.SetCurSel( g_config.m_videoConfig.nVideoEncodeMode );
else{
m_cbEncodeMode.SetCurSel( 0 );
g_config.m_videoConfig.nVideoEncodeMode = 0;
}
}
m_cbVideoInput.EnableWindow(m_cbVideoInput.GetCount() > 0);
//视频轮循
SetDlgItemInt(m_editVideoPoll.GetDlgCtrlID(), g_config.m_videoConfig.nVideoPollTime);
}
void CDlgVideoConfig::StartVideoDevices()
{
VIDEO_EnablePostProc( g_config.m_videoConfig.bEnableImgProc );
VIDEO_EnableOverlay( FALSE );
m_bHasVideo = StartVideoCapDevices();
VIDEO_SMGR_SetBitRate( g_config.m_videoConfig.nBitRate );
if (m_bHasVideo)
SMNotifyBox1("初始化视频设备成功。");
}
BOOL CDlgVideoConfig::StartVideoCapDevices()
{
m_cbVideoInput.EnableWindow( FALSE );
m_cbVideoInput.ResetContent();
BOOL bRet = VIDEO_SMGR_StartCapture( g_config.m_videoConfig.nVideoCapture,
g_config.m_videoConfig.nVideoEncoder,
g_config.m_videoConfig.nVideoEncodeMode,
g_config.m_videoConfig.nBitRate,
m_nVideoWidth,
m_nVideoHeight,
"dkalsdfag-asffdg-asdqr-sdfg-adf");
if( !bRet ){
SMNotifyBox1(IDS_ERROR_OPENVIDEO);
return FALSE;
}
CString strSource;
CStringList lstVideoSource;
int count = VIDEO_SMGR_GetVideoSource(lstVideoSource);
if( count > 0 ){
POSITION pos = lstVideoSource.GetHeadPosition();
while(pos){
strSource = lstVideoSource.GetNext(pos);
int nIndex = m_cbVideoInput.InsertString(-1,strSource);
}
lstVideoSource.RemoveAll();
m_cbVideoInput.EnableWindow( TRUE );
g_config.m_videoConfig.nVideoInput = g_config.m_videoConfig.nVideoInput >= count?0:g_config.m_videoConfig.nVideoInput;
m_cbVideoInput.SetCurSel( g_config.m_videoConfig.nVideoInput );
VIDEO_SMGR_SetVideoSourceIndex( g_config.m_videoConfig.nVideoInput );
}
return TRUE;
}
void CDlgVideoConfig::SaveConfig()
{
UpdateData( TRUE );
m_bHasVideo = g_userManager.HasVideoDevice(g_globalInfo.dwUserID);
CString strVideoCapture;
//video capture
int nVideoSel = max(m_cbVideoCapturer.GetCurSel(), 0);
int nVideoEncoder = max(m_cbVideoEncoder.GetCurSel(), 0);
int nEncodeMode = max(m_cbEncodeMode.GetCurSel(), 0);
int nVideoInput = max(m_cbVideoInput.GetCurSel(), 0);
switch(m_nVideoSize){
case 0:
m_nVideoWidth = 160;
m_nVideoHeight = 120;
break;
case 1:
m_nVideoWidth = 176;
m_nVideoHeight = 144;
break;
case 2:
m_nVideoWidth = 320;
m_nVideoHeight = 240;
break;
case 3:
m_nVideoWidth = 352;
m_nVideoHeight = 288;
break;
case 4:
m_nVideoWidth = 640;
m_nVideoHeight = 480;
break;
case 5:
m_nVideoWidth = 704;
m_nVideoHeight = 576;
break;
case 6:
m_nVideoWidth = 720;
m_nVideoHeight = 576;
break;
default:
m_nVideoSize = 2;
m_nVideoWidth = 320;
m_nVideoHeight = 240;
break;
}
int nBitRate = m_sliderBitRate.GetPos();
CString strTemp;
m_comRade.GetWindowText(strTemp);
strTemp.Replace("Kpbs","");
nBitRate = atoi(strTemp.GetBuffer(0));
BOOL bUserOverlay = m_chkOVerlay.GetCheck();
if( bUserOverlay != g_config.m_videoConfig.bUseOverlay ){
g_config.m_videoConfig.bUseOverlay = bUserOverlay;
VIDEO_EnableOverlay( bUserOverlay );
}
//图象后处理
BOOL bEnableImgProc = m_chkImgProc.GetCheck();
if (bEnableImgProc != g_config.m_videoConfig.bEnableImgProc);
{
g_config.m_videoConfig.bEnableImgProc = bEnableImgProc;
VIDEO_EnablePostProc(bEnableImgProc);
}
//改变视频采集设备或采集大小
if( nVideoSel != g_config.m_videoConfig.nVideoCapture ||
g_config.m_videoConfig.nVideoSize != m_nVideoSize ||
g_config.m_videoConfig.nVideoEncoder != nVideoEncoder ||
g_config.m_videoConfig.nVideoEncodeMode != nEncodeMode ){
g_config.m_videoConfig.nVideoSize = m_nVideoSize;
g_config.m_videoConfig.nVideoCapture = nVideoSel;
g_config.m_videoConfig.nVideoEncoder = nVideoEncoder;
g_config.m_videoConfig.nVideoEncodeMode = nEncodeMode;
m_bHasVideo = StartVideoCapDevices();
}else{
if( nVideoInput != g_config.m_videoConfig.nVideoInput && m_cbVideoInput.GetCount()>0 ){
g_config.m_videoConfig.nVideoInput = nVideoInput;
VIDEO_SMGR_SetVideoSourceIndex( nVideoInput );
}
}
g_config.m_videoConfig.nVideoPollTime = m_nVideoPollTime;
//设置最大码流
if( nBitRate != g_config.m_videoConfig.nBitRate ){
g_config.m_videoConfig.nBitRate = nBitRate;
VIDEO_SMGR_SetBitRate( g_config.m_videoConfig.nBitRate );
}
// m_dlgCameraConfig.SaveConfig();
}
BYTE CDlgVideoConfig::GetVideoDevicesCount()
{
if( m_cbVideoCapturer.GetSafeHwnd() )
return (BYTE)m_cbVideoCapturer.GetCount();
return 0;
}
BOOL CDlgVideoConfig::CheckVideoDevice(BYTE bVideoDevice)
{
if( bVideoDevice < 0 || bVideoDevice >= GetVideoDevicesCount() )
return FALSE;
if( bVideoDevice == g_config.m_videoConfig.nVideoCapture )
return FALSE;
g_config.m_videoConfig.nVideoCapture = bVideoDevice;
m_bHasVideo = StartVideoCapDevices();
m_cbVideoCapturer.SetCurSel( bVideoDevice );
return TRUE;
}
BYTE CDlgVideoConfig::GetVideoDeviceIndex()
{
if( m_cbVideoCapturer.GetSafeHwnd() )
return (BYTE)m_cbVideoCapturer.GetCurSel();
return 0;
}
void CDlgVideoConfig::OnBtnPicproperty()
{
// TODO: Add your control notification handler code here
CDlgImgProcConfig dlg( &m_imgFilterSetting );
dlg.DoModal();
}