⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 configchannel.cpp

📁 大华DVR的客户端开发包和Demo,从网上是下载不到的。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -