📄 remotechannelconfig.cpp
字号:
// RemoteChannelConfig.cpp : implementation file
//
#include "stdafx.h"
#include "newclient.h"
#include "RemoteChannelConfig.h"
#include "RemoteRecordPlanConfig.h"
#include "RemoteDetectConfig.h"
#include "RemoteHideConfig.h"
#include "RemoteHideAlarm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
LPNET_DVR_MOTION lpMotionDetect;
LPNET_DVR_HIDEALARM lpHideAlarm;
/////////////////////////////////////////////////////////////////////////////
// CRemoteChannelConfig dialog
CRemoteChannelConfig::CRemoteChannelConfig(CWnd* pParent /*=NULL*/)
: CDialog(CRemoteChannelConfig::IDD, pParent)
{
//{{AFX_DATA_INIT(CRemoteChannelConfig)
m_ChannelName = _T("");
m_bLogo = FALSE;
m_bOsd = FALSE;
m_bRecord = FALSE;
m_bHide = FALSE;
m_channame_x = 0;
m_channame_y = 0;
m_bChanname = FALSE;
m_bDispWeek = FALSE;
m_logo_x = 0;
m_logo_y = 0;
m_osd_y = 0;
m_osd_x = 0;
m_bMotion = FALSE;
m_bHideAlarm = FALSE;
m_BitRate = 0;
//}}AFX_DATA_INIT
}
void CRemoteChannelConfig::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CRemoteChannelConfig)
DDX_Control(pDX, IDC_PRERECORDTIME, m_PreRecordTime);
DDX_Control(pDX, IDC_DELAY, m_DelayCtrl);
DDX_Control(pDX, IDC_OSDTYPE, m_OsdType);
DDX_Control(pDX, IDC_OSDATTRIB, m_OsdAttrib);
DDX_Control(pDX, IDC_LOGOATTRIB, m_LogoAttrib);
DDX_Control(pDX, IDC_COMBOCOPYCHAN, m_CopyChannelCtrl);
DDX_Control(pDX, IDC_COMCHAN, m_ChannelCtrl);
DDX_Control(pDX, IDC_COMBOSTREAMTYPE, m_StreamTypeCtrl);
DDX_Control(pDX, IDC_COMBORESOLUTION, m_ResolutionCtrl);
DDX_Control(pDX, IDC_COMBOIMAGEQUALITY, m_ImageQualityCtrl);
DDX_Control(pDX, IDC_COMBOBITRATETYPE, m_BitRateTypeCtrl);
DDX_Control(pDX, IDC_COMBOFRAMERATE, m_FrameRateCtrl);
DDX_Control(pDX, IDC_COMBOBITRATE, m_BitRateCtrl);
DDX_Text(pDX, IDC_CHANNELNAME, m_ChannelName);
DDX_Check(pDX, IDC_CHKLOGO, m_bLogo);
DDX_Check(pDX, IDC_CHKOSD, m_bOsd);
DDX_Check(pDX, IDC_CHKRECORD, m_bRecord);
DDX_Check(pDX, IDC_CHKHIDEAREA, m_bHide);
DDX_Text(pDX, IDC_CHANNAME_X, m_channame_x);
DDX_Text(pDX, IDC_CHANNAME_Y, m_channame_y);
DDX_Check(pDX, IDC_CHKCHANNAME, m_bChanname);
DDX_Check(pDX, IDC_CHKDISPWEEK, m_bDispWeek);
DDX_Text(pDX, IDC_LOGO_X, m_logo_x);
DDX_Text(pDX, IDC_LOGO_Y, m_logo_y);
DDX_Text(pDX, IDC_OSD_Y, m_osd_y);
DDX_Text(pDX, IDC_OSD_X, m_osd_x);
DDX_Check(pDX, IDC_CHKMOTION, m_bMotion);
DDX_Check(pDX, IDC_CHKHIDEALARM, m_bHideAlarm);
DDX_Text(pDX, IDC_EDITBITRATE, m_BitRate);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CRemoteChannelConfig, CDialog)
//{{AFX_MSG_MAP(CRemoteChannelConfig)
ON_BN_CLICKED(IDC_BUTCHANCOPY, OnButchancopy)
ON_BN_CLICKED(IDC_BUTMOTION, OnButmotion)
ON_BN_CLICKED(IDC_BUTRECORD, OnButrecord)
ON_BN_CLICKED(IDC_CHKRECORD, OnChkrecord)
ON_BN_CLICKED(IDC_BUTHIDE, OnButhide)
ON_BN_CLICKED(IDC_CHKHIDEAREA, OnChkhidearea)
ON_BN_CLICKED(IDC_CHKOSD, OnChkosd)
ON_BN_CLICKED(IDC_CHKLOGO, OnChklogo)
ON_BN_CLICKED(IDC_CHKCHANNAME, OnChkchanname)
ON_CBN_SELCHANGE(IDC_COMCHAN, OnSelchangeComchan)
ON_CBN_SELCHANGE(IDC_COMBOCOPYCHAN, OnSelchangeCombocopychan)
ON_BN_CLICKED(IDCHANCFGOK, OnChancfgok)
ON_BN_CLICKED(IDCHANCFGEXIT, OnChancfgexit)
ON_BN_CLICKED(IDC_REMOTERECORD, OnRemoterecord)
ON_BN_CLICKED(IDC_CHKMOTION, OnChkmotion)
ON_BN_CLICKED(IDC_CHKHIDEALARM, OnChkhidealarm)
ON_BN_CLICKED(IDC_BUTHIDEALARM, OnButhidealarm)
ON_CBN_SELCHANGE(IDC_COMBOBITRATE, OnSelchangeCombobitrate)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRemoteChannelConfig message handlers
BOOL CRemoteChannelConfig::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
CRect rc(0, 0, 0, 0);
GetParent()->GetClientRect(&rc);
((CTabCtrl*)GetParent())->AdjustRect(FALSE, &rc);
MoveWindow(&rc);
CString sTemp;
char cTemp[100];
m_nChanSel = 0;
m_nCopyChanNum = -1;
m_CopyChannelCtrl.ResetContent();
m_ChannelCtrl.ResetContent();
sTemp.Format(_T("全部通道"));
m_CopyChannelCtrl.AddString(sTemp);
for(int i=0; i<m_iChannelnumber; i++)
{
sTemp.Format("通道%d", (m_lStartChannel+i));
m_ChannelCtrl.AddString(sTemp);
m_CopyChannelCtrl.AddString(sTemp);
m_nChanNum = i+m_lStartChannel;
bSetChannelPara[i] = FALSE;
bGetChannelPara[i] = FALSE;
bRemoteRecord[i] = FALSE;
if(m_bConnectServer)
{
if(GetChanPara(i))
{
bGetChannelPara[i] = TRUE;
}
else
{
sTemp.Format("获取%d通道参数失败!",m_lStartChannel+i);
AfxMessageBox(sTemp);
}
}
}
m_ChannelCtrl.SetCurSel(m_nChanSel);
m_CopyChannelCtrl.SetCurSel(m_nChanSel);
m_nChanNum = m_nChanSel+m_lStartChannel;
if(bGetChannelPara[m_nChanSel])
{
//目前网传时的结构中无信息,暂时显示录像参数
if((m_compressioncfg[m_nChanSel].struRecordPara.dwVideoBitrate >> 31) && 0x01)
{
GetDlgItem(IDC_EDITBITRATE)->EnableWindow(TRUE);
m_BitRateCtrl.SetCurSel(24); //自定义码流
m_BitRate = m_compressioncfg[m_nChanSel].struRecordPara.dwVideoBitrate & 0x7fffffff;
}
else
{
m_BitRateCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.dwVideoBitrate);
m_BitRate = 0;
GetDlgItem(IDC_EDITBITRATE)->EnableWindow(FALSE);
}
m_ResolutionCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.byResolution);
m_StreamTypeCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.byStreamType);
m_ImageQualityCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.byPicQuality);
m_BitRateTypeCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.byBitrateType);
m_FrameRateCtrl.SetCurSel(m_compressioncfg[m_nChanSel].struRecordPara.dwVideoFrameRate);
m_bRecord = m_record[m_nChanSel].dwRecord;
GetDlgItem(IDC_BUTRECORD)->EnableWindow(m_bRecord);
m_DelayCtrl.SetCurSel(m_record[m_nChanSel].dwRecordTime);
m_PreRecordTime.SetCurSel(m_record[m_nChanSel].dwPreRecordTime);
ZeroMemory(cTemp, 100);
memcpy(cTemp, m_piccfg[m_nChanSel].sChanName, NAME_LEN);
m_ChannelName.Format("%s",cTemp);
m_bHide = m_piccfg[m_nChanSel].dwEnableHide;
GetDlgItem(IDC_BUTHIDE)->EnableWindow(m_bHide);
m_bMotion = m_piccfg[m_nChanSel].struMotion.byEnableHandleMotion;
GetDlgItem(IDC_BUTMOTION)->EnableWindow(m_bMotion);
if(m_piccfg[m_nChanSel].strHideAlarm.dwEnableHideAlarm > 0)
{
m_bHideAlarm = TRUE;
}
else
{
m_bHideAlarm = FALSE;
}
GetDlgItem(IDC_BUTHIDEALARM)->EnableWindow(m_bHideAlarm);
m_bChanname = m_piccfg[m_nChanSel].dwShowChanName;
m_channame_x = m_piccfg[m_nChanSel].wShowNameTopLeftX;
m_channame_y = m_piccfg[m_nChanSel].wShowNameTopLeftY;
m_bOsd = m_piccfg[m_nChanSel].dwShowOsd;
m_osd_x = m_piccfg[m_nChanSel].wOSDTopLeftX;
m_osd_y = m_piccfg[m_nChanSel].wOSDTopLeftY;
m_bDispWeek = m_piccfg[m_nChanSel].byDispWeek;
m_OsdAttrib.SetCurSel(m_piccfg[m_nChanSel].byOSDAttrib-1);
m_OsdType.SetCurSel(m_piccfg[m_nChanSel].byOSDType);
m_bLogo = m_piccfg[m_nChanSel].dwShowLogo;
m_logo_x = m_piccfg[m_nChanSel].wLOGOTopLeftX;
m_logo_y = m_piccfg[m_nChanSel].wLOGOTopLeftY;
TRACE("LOGO属性: %d", m_piccfg[m_nChanSel].byLogoAttrib);
m_LogoAttrib.SetCurSel(m_piccfg[m_nChanSel].byLogoAttrib-1);
EnableChanname(m_bChanname);
EnableOsd(m_bOsd);
EnableLogo(m_bLogo);
GetDlgItem(IDCHANCFGOK)->EnableWindow(TRUE);
}
else
{
GetDlgItem(IDCHANCFGOK)->EnableWindow(FALSE);
}
/* NET_DVR_PREVIEWCFG m_VideoOut;
DWORD dwReturned;
if(!NET_DVR_GetDVRConfig(m_lServerID, NET_DVR_GET_PREVIEWCFG, 0,&m_VideoOut, sizeof(NET_DVR_PREVIEWCFG), &dwReturned))
{
CString sTemp;
sTemp.Format("ERROR: NET_DVR_GET_VIDEOOUTCFG = %d \n", NET_DVR_GetLastError());
TRACE(sTemp);
return FALSE;
}
*/
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL CRemoteChannelConfig::GetChanPara(int nIndex)
{
DWORD dwReturned;
if(!NET_DVR_GetDVRConfig(m_lServerID, NET_DVR_GET_PICCFG, m_nChanNum,&m_piccfg[nIndex], sizeof(NET_DVR_PICCFG), &dwReturned))
{
CString sTemp;
sTemp.Format("%d : NET_DVR_GET_PICCFG = %d \n", m_nChanNum, NET_DVR_GetLastError());
TRACE(sTemp);
return FALSE;
}
if(!NET_DVR_GetDVRConfig(m_lServerID,NET_DVR_GET_COMPRESSCFG, m_nChanNum,&m_compressioncfg[nIndex], sizeof(NET_DVR_COMPRESSIONCFG), &dwReturned))
{
CString sTemp;
sTemp.Format("%d : ERROR: NET_DVR_GET_COMPRESSCFG = %d \n", m_nChanNum, NET_DVR_GetLastError());
TRACE(sTemp);
return FALSE;
}
if(!NET_DVR_GetDVRConfig(m_lServerID,NET_DVR_GET_RECORDCFG, m_nChanNum,&m_record[nIndex], sizeof(NET_DVR_RECORD), &dwReturned))
{
CString sTemp;
sTemp.Format("%d : ERROR: NET_DVR_GET_RECORDCFG = %d \n", m_nChanNum, NET_DVR_GetLastError());
TRACE(sTemp);
return FALSE;
}
return TRUE;
}
void CRemoteChannelConfig::OnButchancopy()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
int nTemp = 0;
if(m_nCopyChanNum == m_nChanSel)
return;
if(m_nCopyChanNum == -1)
{
for(int i=0; i<m_iChannelnumber; i++)
{
if(i == m_nChanSel)
continue;
m_compressioncfg[i].struRecordPara.byStreamType = m_StreamTypeCtrl.GetCurSel();
m_compressioncfg[i].struRecordPara.byPicQuality = m_ImageQualityCtrl.GetCurSel();
if(m_BitRateCtrl.GetCurSel() == 24) //自定义码流
{
nTemp = m_BitRate;
nTemp |= 0x80000000;
m_compressioncfg[i].struRecordPara.dwVideoBitrate = nTemp;
}
else
{
m_compressioncfg[i].struRecordPara.dwVideoBitrate = m_BitRateCtrl.GetCurSel();
}
m_compressioncfg[i].struRecordPara.byResolution = m_ResolutionCtrl.GetCurSel();
m_compressioncfg[i].struRecordPara.dwVideoFrameRate = m_FrameRateCtrl.GetCurSel();
m_compressioncfg[i].struRecordPara.byBitrateType = m_BitRateTypeCtrl.GetCurSel();
m_record[i].dwRecord = m_bRecord;
m_record[i].dwRecordTime = m_DelayCtrl.GetCurSel();
m_record[i].dwPreRecordTime = m_PreRecordTime.GetCurSel();
//复制时间表
for(int k=0; k<MAX_DAYS; k++)
{
memcpy(&(m_record[i].struRecAllDay[k]), &(m_record[m_nChanSel].struRecAllDay[k]), sizeof(NET_DVR_RECORDDAY));
for(int j=0; j<MAX_TIMESEGMENT; j++)
{
memcpy(&m_record[i].struRecordSched[k][j],&m_record[m_nChanSel].struRecordSched[k][j],sizeof(NET_DVR_RECORDSCHED));
}
}
m_piccfg[i].dwEnableHide = m_bHide;
m_piccfg[i].struMotion.byEnableHandleMotion = m_bMotion;
if(!m_bHideAlarm)
{
m_piccfg[i].strHideAlarm.dwEnableHideAlarm = m_bHideAlarm;
}
m_piccfg[i].dwShowChanName = m_bChanname;
m_piccfg[i].wShowNameTopLeftX = m_channame_x;
m_piccfg[i].wShowNameTopLeftY = m_channame_y;
m_piccfg[i].dwShowOsd = m_bOsd;
m_piccfg[i].wOSDTopLeftX = m_osd_x;
m_piccfg[i].wOSDTopLeftY = m_osd_y;
m_piccfg[i].byDispWeek = m_bDispWeek;
m_piccfg[i].byOSDAttrib = m_OsdAttrib.GetCurSel()+1;
m_piccfg[i].byOSDType = m_OsdType.GetCurSel();
m_piccfg[i].dwShowLogo = m_bLogo;
m_piccfg[i].wLOGOTopLeftX = m_logo_x;
m_piccfg[i].wLOGOTopLeftY = m_logo_y;
m_piccfg[i].byLogoAttrib = m_LogoAttrib.GetCurSel()+1;
//复制视频参数
m_piccfg[i].byBrightness = m_piccfg[m_nChanSel].byBrightness;
m_piccfg[i].byContrast = m_piccfg[m_nChanSel].byContrast;
m_piccfg[i].byHue = m_piccfg[m_nChanSel].byHue;
m_piccfg[i].bySaturation = m_piccfg[m_nChanSel].bySaturation;
bSetChannelPara[i] = TRUE;
}
}
else
{
m_compressioncfg[m_nCopyChanNum].struRecordPara.byStreamType = m_StreamTypeCtrl.GetCurSel();
m_compressioncfg[m_nCopyChanNum].struRecordPara.byPicQuality = m_ImageQualityCtrl.GetCurSel();
if(m_BitRateCtrl.GetCurSel() == 24) //自定义码流
{
nTemp = m_BitRate;
nTemp |= 0x80000000;
m_compressioncfg[m_nCopyChanNum].struRecordPara.dwVideoBitrate = nTemp;
}
else
{
m_compressioncfg[m_nCopyChanNum].struRecordPara.dwVideoBitrate = m_BitRateCtrl.GetCurSel();
}
m_compressioncfg[m_nCopyChanNum].struRecordPara.byResolution = m_ResolutionCtrl.GetCurSel();
m_compressioncfg[m_nCopyChanNum].struRecordPara.dwVideoFrameRate = m_FrameRateCtrl.GetCurSel();
m_compressioncfg[m_nCopyChanNum].struRecordPara.byBitrateType = m_BitRateTypeCtrl.GetCurSel();
m_record[m_nCopyChanNum].dwRecord = m_bRecord;
m_record[m_nCopyChanNum].dwRecordTime = m_DelayCtrl.GetCurSel();
m_record[m_nCopyChanNum].dwPreRecordTime = m_PreRecordTime.GetCurSel();
//复制时间表
for(int k=0; k<MAX_DAYS; k++)
{
memcpy(&(m_record[m_nCopyChanNum].struRecAllDay[k]), &(m_record[m_nChanSel].struRecAllDay[k]), sizeof(NET_DVR_RECORDDAY));
for(int j=0; j<MAX_TIMESEGMENT; j++)
{
memcpy(&m_record[m_nCopyChanNum].struRecordSched[k][j],&m_record[m_nChanSel].struRecordSched[k][j],sizeof(NET_DVR_RECORDSCHED));
}
}
m_piccfg[m_nCopyChanNum].dwEnableHide = m_bHide;
m_piccfg[m_nCopyChanNum].struMotion.byEnableHandleMotion = m_bMotion;
if(!m_bHideAlarm)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -