📄 configchannel.cpp
字号:
// ConfigChannel.cpp : implementation file
//
#include "stdafx.h"
#include "netsdkdemo.h"
#include "ConfigChannel.h"
#include "NetSDKDemoDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CConfigChannel dialog
CConfigChannel::CConfigChannel(CWnd* pParent /*=NULL*/)
: CDialog(CConfigChannel::IDD, pParent)
{
//{{AFX_DATA_INIT(CConfigChannel)
//}}AFX_DATA_INIT
m_pDev = 0;;
memset(&m_chnCFG, 0, 16*sizeof(DHDEV_CHANNEL_CFG));
memset(&m_sysCFG, 0, sizeof(DHDEV_SYSTEM_ATTR_CFG));
m_bInited = FALSE;
m_chnIdx = -1;
m_strmIdx = -1;
m_osdIdx = -1;
}
void CConfigChannel::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CConfigChannel)
DDX_Control(pDX, IDC_COMBO_CHANNO, m_channelsel);
DDX_Control(pDX, IDC_CHECK_OSDSHOW, m_osdshowchk);
DDX_Control(pDX, IDC_COMBO_RESOLUTION, m_resolutionsel);
DDX_Control(pDX, IDC_COMBO_ENCODETYPE, m_encodetypesel);
DDX_Control(pDX, IDC_COMBO_BLINDTYPE, m_blindtypesel);
DDX_Control(pDX, IDC_COMBO_AUDIOFMT, m_audiofmtsel);
DDX_Control(pDX, IDC_COMBO_OSD, m_osdsel);
DDX_Control(pDX, IDC_COMBO_IMGQUALITY, m_imgqualitysel);
DDX_Control(pDX, IDC_COMBO_FRAME, m_framesel);
DDX_Control(pDX, IDC_COMBO_BRCTRL, m_bitratectrlsel);
DDX_Control(pDX, IDC_CHECK_VIDEO, m_videochk);
DDX_Control(pDX, IDC_CHECK_AUDIO, m_audiochk);
DDX_Control(pDX, IDC_COMBO_STREAM, m_streamsel);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CConfigChannel, CDialog)
//{{AFX_MSG_MAP(CConfigChannel)
ON_CBN_SELCHANGE(IDC_COMBO_CHANNO, OnSelchangeComboChanno)
ON_CBN_SELCHANGE(IDC_COMBO_STREAM, OnSelchangeComboStream)
ON_CBN_SELCHANGE(IDC_COMBO_OSD, OnSelchangeComboOsd)
ON_WM_SHOWWINDOW()
ON_BN_CLICKED(IDC_UNDO_ALL2, OnUndoAll)
ON_BN_CLICKED(IDC_APPLY, OnApply)
ON_CBN_DROPDOWN(IDC_COMBO_CHANNO, OnDropdownComboChanno)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CConfigChannel message handlers
void GetMaskedIndex(BYTE *des, BYTE src, DWORD dwMask)
{
if (!des)
{
return;
}
BYTE idx = 0;
for (int i = 0; i< 32; i++)
{
if (i >= src)
{
break;
}
else if ((dwMask&(0x01<<i)))
{
idx++;
}
}
*des = idx;
}
void GetOrigIndex(BYTE *des, BYTE src, DWORD dwMask)
{
if (!des)
{
return;
}
BYTE idx = 0;
for (int i = 0; i< 32; i++)
{
if (idx >= src)
{
break;
}
else if ((dwMask&(0x01<<i)))
{
idx++;
}
}
*des = i;
}
BOOL CConfigChannel::OnInitDialog()
{
CDialog::OnInitDialog();
g_SetWndStaticText(this);
if (!m_pDev)
{
return TRUE;
}
CString strChn;
for (int i = 0; i < m_pDev->Info.byChanNum; i++)
{
strChn.Format("Channel_%d", i+1);
m_channelsel.InsertString(i, strChn);
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CConfigChannel::GetConfig()
{
if (!m_pDev || m_bInited)
{
return;
}
BOOL bRet = FALSE;
DWORD retlen = 0;
bRet = CLIENT_GetDevConfig(m_pDev->LoginID, DH_DEV_DEVICECFG, 0,
&m_sysCFG, sizeof(DHDEV_SYSTEM_ATTR_CFG), &retlen);
if (!bRet || retlen != sizeof(DHDEV_SYSTEM_ATTR_CFG))
{
((CNetSDKDemoDlg*)AfxGetMainWnd())->LastError();
return;
}
bRet = CLIENT_GetDevConfig(m_pDev->LoginID, DH_DEV_CHANNELCFG, -1/*all channel*/,
&m_chnCFG, 16*sizeof(DHDEV_CHANNEL_CFG), &retlen);
if (!bRet || retlen != m_pDev->Info.byChanNum*sizeof(DHDEV_CHANNEL_CFG))
{
((CNetSDKDemoDlg*)AfxGetMainWnd())->LastError();
return;
}
else
{
m_bInited = TRUE;
}
//compute resolution and encode type name list
char *rsName[8] = {"D1", "HD1", "BCIF", "CIF", "QCIF", "VGA", "QVGA", "SVCD"};
char *ecName[8] = {"DIVX_MPEG4", "MS_MPEG4", "MPEG2", "MPEG1", "H263", "MJPG", "FCC_MPEG4", "H264"};
BYTE rsIdx = 0;
for (int mi = 0; mi < 8; mi++)
{
if (m_sysCFG.stDspEncodeCap.dwImageSizeMask & (0x01<<mi))
{
m_resolutionsel.InsertString(rsIdx, rsName[mi]);
rsIdx++;
}
}
BYTE ecIdx = 0;
for (int ei = 0; ei < 8; ei++)
{
if (m_sysCFG.stDspEncodeCap.dwEncodeModeMask & (0x01<<ei))
{
m_encodetypesel.InsertString(ecIdx, ecName[ei]);
ecIdx++;
}
}
//show config information
if (m_channelsel.GetCount() > 0)
{
m_channelsel.SetCurSel(0);
OnSelchangeComboChanno();
}
}
void CConfigChannel::SetDevice(DeviceNode *pDev)
{
m_pDev = pDev;
}
void CConfigChannel::OnSelchangeComboChanno()
{
if (!m_bInited)
{
return;
}
int strmIdx,osdIdx;
//store current config
if (m_chnIdx < 0)
{
goto skipsave;
}
strmIdx = m_streamsel.GetCurSel();
if (strmIdx < 0)
{
return;
}
osdIdx = m_osdsel.GetCurSel();
if (osdIdx < 0)
{
return;
}
GetDlgItemText(IDC_EDIT_CHANNAME, m_chnCFG[m_chnIdx].szChannelName, DH_CHAN_NAME_LEN);
if (strmIdx < 3) //main stream - for record
{
m_chnCFG[m_chnIdx].stMainVideoEncOpt[strmIdx].byVideoEnable= m_videochk.GetCheck();
m_chnCFG[m_chnIdx].stMainVideoEncOpt[strmIdx].byAudioEnable= m_audiochk.GetCheck();
m_chnCFG[m_chnIdx].stMainVideoEncOpt[strmIdx].byBitRateControl= m_bitratectrlsel.GetCurSel();
m_chnCFG[m_chnIdx].stMainVideoEncOpt[strmIdx].byFramesPerSec= m_framesel.GetCurSel();
m_chnCFG[m_chnIdx].stMainVideoEncOpt[strmIdx].byEncodeMode= m_encodetypesel.GetCurSel();
m_chnCFG[m_chnIdx].stMainVideoEncOpt[strmIdx].byImageSize= m_resolutionsel.GetCurSel();
m_chnCFG[m_chnIdx].stMainVideoEncOpt[strmIdx].byImageQlty= m_imgqualitysel.GetCurSel()+1;
}
else if (strmIdx < 6) //assistant - for net-transfor
{
m_chnCFG[m_chnIdx].stAssiVideoEncOpt[strmIdx-3].byVideoEnable= m_videochk.GetCheck();
m_chnCFG[m_chnIdx].stAssiVideoEncOpt[strmIdx-3].byAudioEnable= m_audiochk.GetCheck();
m_chnCFG[m_chnIdx].stAssiVideoEncOpt[strmIdx-3].byBitRateControl= m_bitratectrlsel.GetCurSel();
m_chnCFG[m_chnIdx].stAssiVideoEncOpt[strmIdx-3].byFramesPerSec= m_framesel.GetCurSel();
m_chnCFG[m_chnIdx].stAssiVideoEncOpt[strmIdx-3].byEncodeMode= m_encodetypesel.GetCurSel();
m_chnCFG[m_chnIdx].stAssiVideoEncOpt[strmIdx-3].byImageSize= m_resolutionsel.GetCurSel();
m_chnCFG[m_chnIdx].stAssiVideoEncOpt[strmIdx-3].byImageQlty= m_imgqualitysel.GetCurSel()+1;
}
m_chnCFG[m_chnIdx].stColorCfg[0].byBrightness = GetDlgItemInt(IDC_EDIT_BRIGHTNESS);
m_chnCFG[m_chnIdx].stColorCfg[0].bySaturation = GetDlgItemInt(IDC_EDIT_SATURATION);
m_chnCFG[m_chnIdx].stColorCfg[0].byContrast = GetDlgItemInt(IDC_EDIT_CONTRAST);
m_chnCFG[m_chnIdx].stColorCfg[0].byHue = GetDlgItemInt(IDC_EDIT_HUE);
m_chnCFG[m_chnIdx].stColorCfg[0].byGain = GetDlgItemInt(IDC_EDIT_GAIN);
//show new config
skipsave:
int chnIdx = m_channelsel.GetCurSel();
if (chnIdx < 0)
{
return;
}
m_chnIdx = chnIdx;
SetDlgItemText(IDC_EDIT_CHANNAME, m_chnCFG[chnIdx].szChannelName);
// SetDlgItemInt(IDC_EDIT_MONADDR, m_chnCFG[chnIdx].dwMonitorAddr);
//refresh every area
if (m_streamsel.GetCount())
{
m_streamsel.SetCurSel(0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -