// EncParamSetDlg.cpp : implementation file
//

#include "stdafx.h"
#include "DVP2420Sample.h"
#include "EncParamSetDlg.h"
#include "DVP2420SampleDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CEncParamSetDlg dialog


CEncParamSetDlg::CEncParamSetDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CEncParamSetDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CEncParamSetDlg)
	m_nGOPFrames = 0;
	m_nAvgVIDBitRate = 0;
	m_nVIDBitRate = 0;
	//}}AFX_DATA_INIT
}


void CEncParamSetDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CEncParamSetDlg)
	DDX_CBIndex(pDX, IDC_SKIPFRAME_COMBO, m_nSkipFrames);
	DDX_CBIndex(pDX, IDC_GOPTYPE_COMBO, m_nGOPType);
	DDX_CBIndex(pDX, IDC_AUDBITRATE_COMBO, m_nAUDBitRate);
	DDX_CBIndex(pDX, IDC_FRAMERATE_COMBO, m_nFrameRate);
	DDX_Text(pDX, IDC_GOPFRAMES_EDIT, m_nGOPFrames);
	DDX_Text(pDX, IDC_AVGVIDBITRATE_EDIT, m_nAvgVIDBitRate);
	DDX_Text(pDX, IDC_VIDBITRATE_EDIT, m_nVIDBitRate);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CEncParamSetDlg, CDialog)
	//{{AFX_MSG_MAP(CEncParamSetDlg)
	ON_WM_DESTROY()
	ON_BN_CLICKED(IDC_MOTION_BTN, OnMotionBtn)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CEncParamSetDlg message handlers

BOOL CEncParamSetDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	m_nChNum = ((CComboBox *)GetParent()->GetDlgItem(IDC_CHANNEL_COMBO))->GetCurSel();
	m_bChipInited = ((CDVP2420SampleDlg *)GetParent())->m_bChipInited[m_nChNum];
	
	if (!m_bChipInited)
	{
		if (pDVPEncSDK->DVP2420_InitChips(m_nChNum) != ENC_SUCCEEDED)
		{
			TRACE("Initialize chip failed!\n");
			return TRUE;
		}

		if (!bSkipDL[m_nChNum])
		{
			if (pDVPEncSDK->DVP2420_DownloadFW(m_nChNum) != ENC_SUCCEEDED)
			{
				//Release chip
				if (pDVPEncSDK->DVP2420_ReleaseChips(m_nChNum) != ENC_SUCCEEDED)
					TRACE("Release Chip failed!\n");

				TRACE("Download firmware failed!\n");
				return TRUE;
			}
			bSkipDL[m_nChNum] = TRUE;
		}
	}

	int nKeyFrameInterval;
	int nRefDistance;
	if (pDVPEncSDK->DVP2420_GetGOPType(m_nChNum, &nKeyFrameInterval, &nRefDistance) == ENC_SUCCEEDED)
	{
		m_nGOPFrames = nKeyFrameInterval;
		m_nGOPType = nRefDistance;
		GetDlgItem(IDC_GOPFRAMES_EDIT)->EnableWindow(TRUE);
		GetDlgItem(IDC_GOPTYPE_COMBO)->EnableWindow(TRUE);
	}

	int nFrameRate;
	int nSkipFrames;
	if (pDVPEncSDK->DVP2420_GetFrameRate(m_nChNum, &nFrameRate, &nSkipFrames) == ENC_SUCCEEDED)
	{
		m_nFrameRate = nFrameRate-1;
		m_nSkipFrames = nSkipFrames;
		GetDlgItem(IDC_FRAMERATE_COMBO)->EnableWindow(TRUE);
		GetDlgItem(IDC_SKIPFRAME_COMBO)->EnableWindow(TRUE);
	}

	int nVideoBitRate;
	int nAvgVideoBitRate;
	if (pDVPEncSDK->DVP2420_GetVideoBitrate(m_nChNum, &nVideoBitRate, &nAvgVideoBitRate) == ENC_SUCCEEDED)
	{
		m_nVIDBitRate = nVideoBitRate;
		m_nAvgVIDBitRate = nAvgVideoBitRate;
		GetDlgItem(IDC_VIDBITRATE_EDIT)->EnableWindow(TRUE);
		GetDlgItem(IDC_AVGVIDBITRATE_EDIT)->EnableWindow(TRUE);
	}

	int nAudioBitRate;
	if (pDVPEncSDK->DVP2420_GetAudioBitrate(m_nChNum, &nAudioBitRate) == ENC_SUCCEEDED)
	{
		m_nAUDBitRate = nAudioBitRate;
		GetDlgItem(IDC_AUDBITRATE_COMBO)->EnableWindow(TRUE);
	}

	UpdateData(FALSE);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CEncParamSetDlg::OnDestroy() 
{
	CDialog::OnDestroy();
	
	// TODO: Add your message handler code here
	if (!m_bChipInited)
	{
		//Release chip
		if (pDVPEncSDK->DVP2420_ReleaseChips(m_nChNum) != ENC_SUCCEEDED)
		{
			TRACE("Release Chip failed!\n");
		}
	}
}

void CEncParamSetDlg::OnOK() 
{
	// TODO: Add extra validation here
	UpdateData(TRUE);
	if (pDVPEncSDK->DVP2420_SetGOPType(m_nChNum, m_nGOPFrames, m_nGOPType) != ENC_SUCCEEDED)
		AfxMessageBox(_T("Set GOP Type Failed!!"));
	
	if (pDVPEncSDK->DVP2420_SetFrameRate(m_nChNum, m_nFrameRate+1, m_nSkipFrames) != ENC_SUCCEEDED)
		AfxMessageBox(_T("Set Frame Rate Failed!!"));

	if (pDVPEncSDK->DVP2420_SetVideoBitrate(m_nChNum, m_nVIDBitRate, m_nAvgVIDBitRate) != ENC_SUCCEEDED)
		AfxMessageBox(_T("Set Video Bit Rate Failed!!"));

	if (pDVPEncSDK->DVP2420_SetAudioBitrate(m_nChNum, m_nAUDBitRate) != ENC_SUCCEEDED)
		AfxMessageBox(_T("Set Audio Bit Rate Failed!!"));

	CDialog::OnOK();
}

void CEncParamSetDlg::OnMotionBtn() 
{
	// TODO: Add your control notification handler code here
	CMotionDlg MotionDlg;
	if (pDVPEncSDK->DVP2420_GetMotionDetectMask(m_nChNum, MotionDlg.m_Region, MotionDlg.m_nThresholdArray) == ENC_SUCCEEDED)
	{
		if (MotionDlg.DoModal() == IDOK)
		{
			if (pDVPEncSDK->DVP2420_InsertMotionDetectMask(m_nChNum, MotionDlg.m_Region, MotionDlg.m_nThresholdArray) != ENC_SUCCEEDED)
			{
				AfxMessageBox(_T("Set Motion Detect Region Failed!!\n"));
			}
		}
	}
}
