// PageMDSettings.cpp : implementation file // #include "stdafx.h" #include "mgrnve.h" #include "ConnectionManager.h" #include "PageMDSettings.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CPageMDSettings dialog CPageMDSettings::CPageMDSettings(CWnd* pParent, CMgrNVE* pMgrCM, CConnectionManager *pConnMgr) : CParamDlg(CPageMDSettings::IDD, pParent, pMgrCM, pConnMgr) { //{{AFX_DATA_INIT(CPageMDSettings) m_uActivity = 0; m_uThreshold = 0; m_bEnable = FALSE; //}}AFX_DATA_INIT m_pCod5Api = NULL; m_pMsgMgr = NULL; m_fUnit = 0; m_bFirst = TRUE; m_bBtnDownOk = FALSE; ZeroMemory(m_bDraw, sizeof(m_bDraw)); ZeroMemory(m_AreaRect, sizeof(m_AreaRect)); ZeroMemory(m_MDInfo, sizeof(m_MDInfo)); } void CPageMDSettings::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPageMDSettings) DDX_Control(pDX, IDC_COMBO_MD_INFO_TYPE, m_cbInfoType); DDX_Control(pDX, IDC_BTN_MD_APPLY, m_btnApply); DDX_Control(pDX, IDC_STATIC_SCALE, m_stScale); DDX_Control(pDX, IDC_CHECK_MD_ENABLE, m_btnEnable); DDX_Control(pDX, IDC_STATIC_RES, m_stRes); DDX_Control(pDX, IDC_STATIC_MD, m_stMD); DDX_Control(pDX, IDC_COMBO_MD_LAYER_ID, m_cbLayerID); DDX_Text(pDX, IDC_EDIT_MD_ACTIVITY, m_uActivity); DDX_Text(pDX, IDC_EDIT_MD_THRESHOLD, m_uThreshold); DDX_Check(pDX, IDC_CHECK_MD_ENABLE, m_bEnable); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CPageMDSettings, CDialog) //{{AFX_MSG_MAP(CPageMDSettings) ON_CBN_SELCHANGE(IDC_COMBO_MD_LAYER_ID, OnSelchangeComboMdLayerId) ON_WM_LBUTTONDOWN() ON_WM_LBUTTONUP() ON_BN_CLICKED(IDC_CHECK_MD_ENABLE, OnCheckMdEnable) ON_CBN_DROPDOWN(IDC_COMBO_MD_LAYER_ID, OnDropdownComboMdLayerId) ON_WM_PAINT() ON_BN_CLICKED(IDC_BTN_MD_APPLY, OnBtnMdApply) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPageMDSettings message handlers BOOL CPageMDSettings::SaveSetting() { UpdateData(TRUE); m_MDInfo[m_cbLayerID.GetCurSel()].Info.uLayerID = m_cbLayerID.GetCurSel(); m_MDInfo[m_cbLayerID.GetCurSel()].Info.uEnable = m_bEnable; m_MDInfo[m_cbLayerID.GetCurSel()].Info.uActivity = m_uActivity; m_MDInfo[m_cbLayerID.GetCurSel()].Info.uThreshold = m_uThreshold; for (ULONG i=0; iCod5SetCodecProperty(0, 0, COD5_CPC_MD_INFO, (ULONG)pMDInfo, 0, 0, 0)) { m_pMsgMgr->PushErrorCodeF("Cannot set MD. Layer[%d]", i); m_pMsgMgr->Show(TRUE); delete[] pMDInfo; delete[] pRect; return FALSE; } delete[] pMDInfo; delete[] pRect; } return TRUE; } BOOL CPageMDSettings::ResetSetting() { return TRUE; } BOOL CPageMDSettings::UpdateSetting() { return TRUE; } BOOL CPageMDSettings::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here m_pCod5Api = m_pConnection->GetCod5Api(); m_pMsgMgr = m_pConnection->GetMgrNVE()->GetMsgManager(); CopyMemory(m_MDInfo, m_pConnection->GetMDInfo(), sizeof(m_MDInfo)); m_pMediaSettings = m_pConnection->GetMediaSettings(0); m_stMD.GetClientRect(&m_Rect); //m_fUnit = CMN5_GETIMGHEIGHT(m_pMediaSettings->CodecSettings.uResolution)/(float)(m_Rect.bottom - m_Rect.top); m_fUnit = CMN5_GETIMGWIDTH(m_pMediaSettings->CodecSettings.uResolution)/(float)(m_Rect.right - m_Rect.left); m_Rect.left = 200; //m_Rect.right = (LONG)(CMN5_GETIMGWIDTH(m_pMediaSettings->CodecSettings.uResolution)/m_fUnit + m_Rect.left); m_Rect.right = m_Rect.left + m_Rect.right; m_Rect.top = 15; //m_Rect.bottom = m_Rect.bottom + m_Rect.top; m_Rect.bottom = (LONG)(CMN5_GETIMGHEIGHT(m_pMediaSettings->CodecSettings.uResolution)/m_fUnit + m_Rect.top); m_stMD.MoveWindow(&m_Rect); char szText[NVE_MAX_STR_LENGTH]; sprintf(szText, "%dx%d", CMN5_GETIMGWIDTH(m_pMediaSettings->CodecSettings.uResolution), CMN5_GETIMGHEIGHT(m_pMediaSettings->CodecSettings.uResolution)); m_stRes.SetWindowText(szText); RECT rc; m_stRes.GetClientRect(&rc); rc.left = m_Rect.right + 10; rc.right = rc.right + rc.left; rc.top = m_Rect.bottom - 20; rc.bottom = m_Rect.bottom - 5; m_stRes.MoveWindow(&rc); sprintf(szText, "1 : %1.2f", m_fUnit); m_stScale.SetWindowText(szText); m_stScale.GetClientRect(&rc); rc.left = m_Rect.right + 10; rc.right = rc.right + rc.left; rc.top = m_Rect.bottom - 40; rc.bottom = m_Rect.bottom - 25; m_stScale.MoveWindow(&rc); m_btnApply.GetClientRect(&rc); rc.left = m_Rect.right + 10; rc.right = rc.right + rc.left; rc.top = rc.top + 15; rc.bottom = rc.bottom + 15; m_btnApply.MoveWindow(&rc); COD5_MD_PROPERTY MDProp; CHECK_AND_RETURN_FALSE(m_pCod5Api->Cod5GetCodecProperty(0, 0, COD5_CPC_MD_PROPERTY, (ULONG*)&MDProp, 0, 0, 0), "Cannot get MD property"); char szID[8]; ULONG i; for (i=0; iCod5GetCodecProperty(0, 0, COD5_CPC_MD_INFO, (ULONG*)pMDInfo, 0, 0, 0)) { delete[] pMDInfo; return FALSE; } ULONG uIndex = 0; for (i=0; iuAreaCount; j++) { ULONG uType = *(ULONG*)(pMDInfo + uIndex); uIndex += sizeof(ULONG); ULONG uSize = *(ULONG*)(pMDInfo + uIndex); uIndex -= sizeof(ULONG); if (uType == COD5_MDT_RECT) { COD5_MD_AREA_RECT *pRect = (COD5_MD_AREA_RECT*)(pMDInfo + uIndex); CopyMemory(&m_MDInfo[i].Rect[pRect->uRectID], pRect, uSize); m_MDInfo[i].bRect[pRect->uRectID] = TRUE; } uIndex += uSize; CROP_BY_MACROBLOCK(m_MDInfo[i].Rect[j].uX, FALSE); CROP_BY_MACROBLOCK(m_MDInfo[i].Rect[j].uY, FALSE); CROP_BY_MACROBLOCK(m_MDInfo[i].Rect[j].uWidth, TRUE); CROP_BY_MACROBLOCK(m_MDInfo[i].Rect[j].uHeight, TRUE); m_AreaRect[i][j].left = m_Rect.left + (ULONG)(m_MDInfo[i].Rect[j].uX/m_fUnit); m_AreaRect[i][j].top = m_Rect.top + (ULONG)(m_MDInfo[i].Rect[j].uY/m_fUnit); m_AreaRect[i][j].right = m_AreaRect[i][j].left + (ULONG)(m_MDInfo[i].Rect[j].uWidth/m_fUnit); m_AreaRect[i][j].bottom = m_AreaRect[i][j].top + (ULONG)(m_MDInfo[i].Rect[j].uHeight/m_fUnit); } } delete[] pMDInfo; m_bEnable = m_MDInfo[0].Info.uEnable; m_uActivity = m_MDInfo[0].Info.uActivity; m_uThreshold = m_MDInfo[0].Info.uThreshold; UpdateData(FALSE); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CPageMDSettings::OnSelchangeComboMdLayerId() { // TODO: Add your control notification handler code here ULONG uLayerID = m_cbLayerID.GetCurSel(); m_bEnable = m_MDInfo[uLayerID].Info.uEnable; m_uActivity = m_MDInfo[uLayerID].Info.uActivity; m_uThreshold = m_MDInfo[uLayerID].Info.uThreshold; UpdateData(FALSE); } void CPageMDSettings::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default if (!m_btnEnable.GetCheck()) { return; } m_bBtnDownOk = FALSE; if (point.x < m_Rect.left || point.x > m_Rect.right || point.y < m_Rect.top || point.y > m_Rect.bottom) { return; } //ClearArea(); if (m_MDInfo[m_cbLayerID.GetCurSel()].Info.uAreaCount >= MAX_RECT_COUNT) { return; } m_AreaRect[m_cbLayerID.GetCurSel()][m_MDInfo[m_cbLayerID.GetCurSel()].Info.uAreaCount].left = point.x; m_AreaRect[m_cbLayerID.GetCurSel()][m_MDInfo[m_cbLayerID.GetCurSel()].Info.uAreaCount].top = point.y; for (int i=0; i m_Rect.right || point.y < m_Rect.top || point.y > m_Rect.bottom) { return; } if (m_MDInfo[m_cbLayerID.GetCurSel()].Info.uAreaCount >= MAX_RECT_COUNT) { return; } if ((point.x - m_AreaRect[m_cbLayerID.GetCurSel()][m_MDInfo[m_cbLayerID.GetCurSel()].Info.uAreaCount].left)*m_fUnit < MACROBLOCK_SIZE) { return; } if ((point.y - m_AreaRect[m_cbLayerID.GetCurSel()][m_MDInfo[m_cbLayerID.GetCurSel()].Info.uAreaCount].top)*m_fUnit < MACROBLOCK_SIZE) { return; } m_AreaRect[m_cbLayerID.GetCurSel()][m_MDInfo[m_cbLayerID.GetCurSel()].Info.uAreaCount].right = point.x; m_AreaRect[m_cbLayerID.GetCurSel()][m_MDInfo[m_cbLayerID.GetCurSel()].Info.uAreaCount].bottom = point.y; m_MDInfo[m_cbLayerID.GetCurSel()].Info.uAreaCount++; for (ULONG j=0; jFillSolidRect(&rc, color); ReleaseDC(pDC); m_bDraw[m_cbLayerID.GetCurSel()] = FALSE; ZeroMemory(m_AreaRect[m_cbLayerID.GetCurSel()], sizeof(m_AreaRect[m_cbLayerID.GetCurSel()])); ZeroMemory(&m_MDInfo[m_cbLayerID.GetCurSel()], sizeof(m_MDInfo[m_cbLayerID.GetCurSel()])); } BOOL CPageMDSettings::DrawArea(ULONG uLayerID, ULONG uRectID, RECT *pRect) { if (!m_MDInfo[uLayerID].Info.uEnable) { return FALSE; } CDC* pDC=GetDC(); CBrush brush; COLORREF color; switch(uLayerID) { case 0: color = RGB(255,0,0); break; case 1: color = RGB(0,255,0); break; case 2: color = RGB(0,0,255); break; } pDC->SetTextColor(color); pDC->SetBkColor(GetSysColor(COLOR_3DFACE)); brush.CreateSolidBrush(color); pDC->FrameRect(pRect, &brush); RECT rc; rc.left = pRect->left + 3; rc.right = rc.left + 15; rc.top = pRect->top + 3; rc.bottom = rc.top + 15; char szText[NVE_MAX_STR_LENGTH]; sprintf(szText, "%d", uRectID); pDC->DrawText(szText, &rc, 0); brush.DeleteObject(); ReleaseDC(pDC); m_bDraw[uLayerID] = TRUE; return TRUE; } void CPageMDSettings::OnCheckMdEnable() { // TODO: Add your control notification handler code here UpdateData(TRUE); if (!m_btnEnable.GetCheck()) { ClearArea(); for (int i=0; iApplyProc(this); }