// DlgCfgEncoder.cpp : implementation file
//

#include "stdafx.h"
#include "NetSdkDemo.h"
#include "DlgCfgEncoder.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDlgCfgEncoder dialog
static const char *szCodecList[] = {
	"JPEG",		// 0
	"MJPEG",	// 1
	"MPEG1",	// 2
	"MPEG2",	// 3
	"MPEG4",	// 4
	"H264",		// 5
	"H263",		// 6
	"H265",		// 7
};

static const char *szImageSizeList[] = {
	"QCIF",			// 0 - 176*144(PAL) 176*120(NTSC)
	"CIF",			// 1 - 352*288(PAL) 352*240(NTSC)
	"2CIF",			// 2 - 704*288(PAL) 704*240(NTSC)
	"4CIF",			// 3 - 704*576(PAL)	704*480(NTSC)
	"1280*720", 	// 4 - 720P
	"1920*1080",	// 5 - 1080P
	"160*128",		// 6 - QQVGA
	"320*240",		// 7 - QVGA
	"480*480",		// 8 - SVCD
	"640*480",		// 9 - VGA
	"800*600",		// 10 - SVGA
	"1024*768",		// 11 - XVGA
	"1280*800",		// 12 - WXGA
	"1280*1024",	// 13 - SXGA
	"1600*1024",	// 14 - WSXGA
	"1600*1200",	// 15 - UXGA
	"1920*1200",	// 16 - WUXGA
	"1280*960",		// 17 - 1280*960	1.3M
	"1872*1408",	// 18 - 72*960	2M	 
	"2048*1536",	// 19
	"2560*1600",	// 20
	"3744*1408",	// 21
	"3296*2472",	// 22
	"1440*900",		// 23
	"1366*768",		// 24
	"960H",			// 25
	"640*360",		// 26
	"320*180",		// 27
	"960*540",		// 28
	"1920*1440",	// 29
	"2560*1440"
};

CDlgCfgEncoder::CDlgCfgEncoder(CWnd* pParent /*=NULL*/)
	: CDialog(CDlgCfgEncoder::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDlgCfgEncoder)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	m_bGetParam = FALSE;
}


void CDlgCfgEncoder::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDlgCfgEncoder)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDlgCfgEncoder, CDialog)
	//{{AFX_MSG_MAP(CDlgCfgEncoder)
	ON_BN_CLICKED(IDC_BTN_SAVE, OnBtnSave)
	ON_CBN_SELCHANGE(IDC_CMB_RATECTRL_MAIN, OnSelchangeCmbRatectrlMain)
	ON_CBN_SELCHANGE(IDC_CMB_RATECTRL_SUB, OnSelchangeCmbRatectrlSub)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgCfgEncoder message handlers
BOOL CDlgCfgEncoder::GetEnvParam()
{
	int i, iRet;
	//if(m_bGetParam)
	//	return TRUE;
	iRet = librmconfc_env_get(g_envDev.szIP, g_envDev.wPort, g_envDev.szUserName, g_envDev.szPassword, NULL,
		MRCONFC_ENVCMD_VIDEOENCODE, sizeof(MRCONFC_VIDEOENCODE_CFG), &m_stEnc);
	if(iRet)
	{
		AfxMessageBox("获得参数失败!");
		return FALSE;
	}
	((CComboBox*)GetDlgItem(IDC_CMB_CODEC_MAIN))->ResetContent();
	((CComboBox*)GetDlgItem(IDC_CMB_CODEC_SUB))->ResetContent();
	((CComboBox*)GetDlgItem(IDC_CMB_SIZE_MAIN))->ResetContent();
	((CComboBox*)GetDlgItem(IDC_CMB_SIZE_SUB))->ResetContent();
	for(i=MR_VCODEC_JPEG; i<MR_VCODEC_NUMS; i++)
	{
		if(m_stEnc.stMaster.dwVideoCodecMask & (1<<i))
		{
			((CComboBox*)GetDlgItem(IDC_CMB_CODEC_MAIN))->AddString(szCodecList[i]);
			((CComboBox*)GetDlgItem(IDC_CMB_CODEC_MAIN))->SetItemData(((CComboBox*)GetDlgItem(IDC_CMB_CODEC_MAIN))->GetCount() - 1, i);
		}
		if(m_stEnc.stSlave.dwVideoCodecMask & (1<<i))
		{
			((CComboBox*)GetDlgItem(IDC_CMB_CODEC_SUB))->AddString(szCodecList[i]);
			((CComboBox*)GetDlgItem(IDC_CMB_CODEC_SUB))->SetItemData(((CComboBox*)GetDlgItem(IDC_CMB_CODEC_SUB))->GetCount() - 1, i);
		}
	}
	for(i=0; i<m_stEnc.stMaster.nImageSizeNums; i++)
	{
		((CComboBox*)GetDlgItem(IDC_CMB_SIZE_MAIN))->AddString(szImageSizeList[m_stEnc.stMaster.byImageSizeList[i]]);
		((CComboBox*)GetDlgItem(IDC_CMB_SIZE_MAIN))->SetItemData(((CComboBox*)GetDlgItem(IDC_CMB_SIZE_MAIN))->GetCount() - 1, 
			m_stEnc.stMaster.byImageSizeList[i]);
	}
	for(i=0; i<m_stEnc.stSlave.nImageSizeNums; i++)
	{
		((CComboBox*)GetDlgItem(IDC_CMB_SIZE_SUB))->AddString(szImageSizeList[m_stEnc.stSlave.byImageSizeList[i]]);
		((CComboBox*)GetDlgItem(IDC_CMB_SIZE_SUB))->SetItemData(((CComboBox*)GetDlgItem(IDC_CMB_SIZE_SUB))->GetCount() - 1, 
			m_stEnc.stSlave.byImageSizeList[i]);
	}
	for(i=0; i<((CComboBox*)GetDlgItem(IDC_CMB_CODEC_MAIN))->GetCount(); i++)
	{
		if(((CComboBox*)GetDlgItem(IDC_CMB_CODEC_MAIN))->GetItemData(i) == m_stEnc.stMaster.emVideoCodec)
		{
			((CComboBox*)GetDlgItem(IDC_CMB_CODEC_MAIN))->SetCurSel(i);
			break;
		}
	}
	for(i=0; i<((CComboBox*)GetDlgItem(IDC_CMB_CODEC_SUB))->GetCount(); i++)
	{
		if(((CComboBox*)GetDlgItem(IDC_CMB_CODEC_SUB))->GetItemData(i) == m_stEnc.stSlave.emVideoCodec)
		{
			((CComboBox*)GetDlgItem(IDC_CMB_CODEC_SUB))->SetCurSel(i);
			break;
		}
	}

	for(i=0; i<((CComboBox*)GetDlgItem(IDC_CMB_SIZE_MAIN))->GetCount(); i++)
	{
		if(((CComboBox*)GetDlgItem(IDC_CMB_SIZE_MAIN))->GetItemData(i) == m_stEnc.stMaster.emImageSize)
		{
			((CComboBox*)GetDlgItem(IDC_CMB_SIZE_MAIN))->SetCurSel(i);
			break;
		}
	}

	for(i=0; i<((CComboBox*)GetDlgItem(IDC_CMB_SIZE_SUB))->GetCount(); i++)
	{
		if(((CComboBox*)GetDlgItem(IDC_CMB_SIZE_SUB))->GetItemData(i) == m_stEnc.stSlave.emImageSize)
		{
			((CComboBox*)GetDlgItem(IDC_CMB_SIZE_SUB))->SetCurSel(i);
			break;
		}
	}

	((CComboBox*)GetDlgItem(IDC_CMB_ENCPROFILE1))->SetCurSel(m_stEnc.stMaster.byProfile);
	((CComboBox*)GetDlgItem(IDC_CMB_ENCPROFILE2))->SetCurSel(m_stEnc.stSlave.byProfile);

	((CComboBox*)GetDlgItem(IDC_CMB_RATECTRL_MAIN))->SetCurSel(m_stEnc.stMaster.emBitRateCtrl);
	((CComboBox*)GetDlgItem(IDC_CMB_RATECTRL_SUB))->SetCurSel(m_stEnc.stSlave.emBitRateCtrl);

	((CComboBox*)GetDlgItem(IDC_CMB_QULIT_MAIN))->SetCurSel(m_stEnc.stMaster.byImageQuality);
	((CComboBox*)GetDlgItem(IDC_CMB_QULIT_SUB))->SetCurSel(m_stEnc.stSlave.byImageQuality);

	SetDlgItemInt(IDC_EDT_BITRATE_MAIN, m_stEnc.stMaster.nBitRate);
	SetDlgItemInt(IDC_EDT_BITRATE_SUB, m_stEnc.stSlave.nBitRate);

	SetDlgItemInt(IDC_EDT_FPS_MAIN, m_stEnc.stMaster.nFrameRate);
	SetDlgItemInt(IDC_EDT_FPS_SUB, m_stEnc.stSlave.nFrameRate);

	SetDlgItemInt(IDC_EDT_KEYFPS_MAIN, m_stEnc.stMaster.nIFrameInterval);
	SetDlgItemInt(IDC_EDT_KEYFPS_SUB, m_stEnc.stSlave.nIFrameInterval);

	SetDlgItemInt(IDC_EDT_KEYMINQP1, m_stEnc.stMaster.byIFrameMinQP);
	SetDlgItemInt(IDC_EDT_KEYMINQP2, m_stEnc.stSlave.byIFrameMinQP);
	SetDlgItemText(IDC_EDT_STRNAME1, m_stEnc.stMaster.szStreamName);
	SetDlgItemText(IDC_EDT_STRNAME2, m_stEnc.stSlave.szStreamName);

	OnSelchangeCmbRatectrlMain();
	OnSelchangeCmbRatectrlSub();
	m_bGetParam = TRUE;
	return TRUE;
}

void CDlgCfgEncoder::OnBtnSave() 
{
	int iRet;
	if(!m_bGetParam)
		return;
	m_stEnc.stMaster.emVideoCodec = (MR_VIDEOCODEC_TYPE)((CComboBox*)GetDlgItem(IDC_CMB_CODEC_MAIN))->GetItemData(((CComboBox*)GetDlgItem(IDC_CMB_CODEC_MAIN))->GetCurSel());
	m_stEnc.stSlave.emVideoCodec = (MR_VIDEOCODEC_TYPE)((CComboBox*)GetDlgItem(IDC_CMB_CODEC_SUB))->GetItemData(((CComboBox*)GetDlgItem(IDC_CMB_CODEC_SUB))->GetCurSel());

	m_stEnc.stMaster.emImageSize = (MR_VIDEOSIZE_TYPE)((CComboBox*)GetDlgItem(IDC_CMB_SIZE_MAIN))->GetItemData(((CComboBox*)GetDlgItem(IDC_CMB_SIZE_MAIN))->GetCurSel());
	m_stEnc.stSlave.emImageSize = (MR_VIDEOSIZE_TYPE)((CComboBox*)GetDlgItem(IDC_CMB_SIZE_SUB))->GetItemData(((CComboBox*)GetDlgItem(IDC_CMB_SIZE_SUB))->GetCurSel());

	m_stEnc.stMaster.emBitRateCtrl = (MR_BITRATE_TYPE)((CComboBox*)GetDlgItem(IDC_CMB_RATECTRL_MAIN))->GetCurSel();
	m_stEnc.stSlave.emBitRateCtrl = (MR_BITRATE_TYPE)((CComboBox*)GetDlgItem(IDC_CMB_RATECTRL_SUB))->GetCurSel();

	m_stEnc.stMaster.byProfile = ((CComboBox*)GetDlgItem(IDC_CMB_ENCPROFILE1))->GetCurSel();
	m_stEnc.stSlave.byProfile  = ((CComboBox*)GetDlgItem(IDC_CMB_ENCPROFILE2))->GetCurSel();

	if(m_stEnc.stMaster.emVideoCodec != MR_VCODEC_H264)
		m_stEnc.stMaster.byProfile = 0;
	if(m_stEnc.stSlave.emVideoCodec != MR_VCODEC_H264)
		m_stEnc.stSlave.byProfile = 0;

	m_stEnc.stMaster.byImageQuality = ((CComboBox*)GetDlgItem(IDC_CMB_QULIT_MAIN))->GetCurSel();
	m_stEnc.stSlave.byImageQuality = ((CComboBox*)GetDlgItem(IDC_CMB_QULIT_SUB))->GetCurSel();

	m_stEnc.stMaster.nBitRate = GetDlgItemInt(IDC_EDT_BITRATE_MAIN);
	m_stEnc.stSlave.nBitRate  = GetDlgItemInt(IDC_EDT_BITRATE_SUB);
	
	m_stEnc.stMaster.nFrameRate = GetDlgItemInt(IDC_EDT_FPS_MAIN);
	m_stEnc.stSlave.nFrameRate = GetDlgItemInt(IDC_EDT_FPS_SUB);
	
	m_stEnc.stMaster.nIFrameInterval = GetDlgItemInt(IDC_EDT_KEYFPS_MAIN);
	m_stEnc.stSlave.nIFrameInterval = GetDlgItemInt(IDC_EDT_KEYFPS_SUB);

	m_stEnc.stMaster.byIFrameMinQP = GetDlgItemInt(IDC_EDT_KEYMINQP1);
	m_stEnc.stSlave.byIFrameMinQP = GetDlgItemInt(IDC_EDT_KEYMINQP2);
	GetDlgItemText(IDC_EDT_STRNAME1, m_stEnc.stMaster.szStreamName, sizeof(m_stEnc.stMaster.szStreamName));
	GetDlgItemText(IDC_EDT_STRNAME2, m_stEnc.stSlave.szStreamName, sizeof(m_stEnc.stSlave.szStreamName));

	iRet = librmconfc_env_set(g_envDev.szIP, g_envDev.wPort, g_envDev.szUserName, g_envDev.szPassword, NULL,
		MRCONFC_ENVCMD_VIDEOENCODE, sizeof(MRCONFC_VIDEOENCODE_CFG), &m_stEnc);
	if(iRet)
	{
		AfxMessageBox("保存参数失败!");
		return;
	}
}

void CDlgCfgEncoder::OnSelchangeCmbRatectrlMain() 
{
	if(((CComboBox*)GetDlgItem(IDC_CMB_RATECTRL_MAIN))->GetCurSel() == MR_BITRATE_CBR)
		GetDlgItem(IDC_CMB_QULIT_MAIN)->EnableWindow(FALSE);
	else
		GetDlgItem(IDC_CMB_QULIT_MAIN)->EnableWindow(TRUE);
}

void CDlgCfgEncoder::OnSelchangeCmbRatectrlSub() 
{
	if(((CComboBox*)GetDlgItem(IDC_CMB_RATECTRL_SUB))->GetCurSel() == MR_BITRATE_CBR)
		GetDlgItem(IDC_CMB_QULIT_SUB)->EnableWindow(FALSE);
	else
		GetDlgItem(IDC_CMB_QULIT_SUB)->EnableWindow(TRUE);
}
