// CPageCodecSettings.cpp : implementation file // #include "stdafx.h" #include "mgrnve.h" #include "ConnectionManager.h" #include "PageCodecSettings.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CPageCodecSettings dialog CPageCodecSettings::CPageCodecSettings(CWnd* pParent, CMgrNVE* pMgrCM, CConnectionManager *pConnMgr) : CParamDlg(CPageCodecSettings::IDD, pParent, pMgrCM, pConnMgr) { //{{AFX_DATA_INIT(CPageCodecSettings) //}}AFX_DATA_INIT m_pNet5Api = NULL; m_pCod5Api = NULL; m_uPreFps = 0; } void CPageCodecSettings::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPageCodecSettings) DDX_Control(pDX, IDC_CHECK_ENABLE_VIDEO, m_chkEnable); DDX_Control(pDX, IDC_EDIT_QUANT, m_edtQuant); DDX_Control(pDX, IDC_CB_FRAME_RATE, m_cbFrameRate); DDX_Control(pDX, IDC_CB_VIDEO_CODEC, m_cbCodec); DDX_Control(pDX, IDC_CB_BITRATE, m_cbBitrate); DDX_Control(pDX, IDC_CB_BIT_RATE_MODE, m_cbBitrateMode); DDX_Control(pDX, IDC_CB_VIDEO_FORMAT, m_cbVideoFormat); DDX_Control(pDX, IDC_CB_GOP_SIZE, m_cbGOPSize); DDX_Control(pDX, IDC_CB_IMAGE_SIZE, m_cbImageSize); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CPageCodecSettings, CDialog) //{{AFX_MSG_MAP(CPageCodecSettings) ON_CBN_SELCHANGE(IDC_CB_VIDEO_FORMAT, OnSelchangeCbVideoFormat) ON_CBN_SELCHANGE(IDC_CB_VIDEO_CODEC, OnSelchangeCbVideoCodec) ON_CBN_SELCHANGE(IDC_CB_BIT_RATE_MODE, OnSelchangeCbBitRateMode) ON_BN_CLICKED(IDC_BTN_CODEC_APPLY, OnBtnCodecApply) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPageCodecSettings message handlers BOOL CPageCodecSettings::IsRestart() { m_bIsRestart = FALSE; GetResolution(&m_uResolution); if (m_uResolution != m_pMediaSettings->CodecSettings.uResolution) { m_bIsRestart = TRUE; } m_cbVideoFormat.GetCurSel() == 0 ? m_uVideoFormat = CMN5_VIDEO_FORMAT_NTSC_M : m_uVideoFormat = CMN5_VIDEO_FORMAT_PAL_B; if (m_uVideoFormat != m_pMediaSettings->CodecSettings.uVideoFormat) { m_bIsRestart = TRUE; } m_uGOPSize = GetDlgItemInt(IDC_CB_GOP_SIZE); if (m_uGOPSize != m_pMediaSettings->CodecSettings.uGOPSize) { m_bIsRestart = TRUE; } CString strFrameRate; GetDlgItemText(IDC_CB_FRAME_RATE, strFrameRate); m_uFrameRate = atoi((LPSTR)(LPCSTR)strFrameRate); if (m_uFrameRate != m_pMediaSettings->CodecSettings.uFrameRate) { m_bIsRestart = TRUE; } m_uBitrateMode = m_cbBitrateMode.GetCurSel(); GetBitrate(&m_uBitrate); m_uQuant = GetDlgItemInt(IDC_EDIT_QUANT); switch(m_cbCodec.GetCurSel()) { case 0: m_uCodecType = COD5_VCT_MP4_ES; break; /*case 1: m_uCodecType = COD5_VCT_MP4S_ES; break;*/ case 1: m_uCodecType = COD5_VCT_MJPEG; break; case 2: m_uCodecType = COD5_VCT_MP2_ES; } if (m_uCodecType != m_pMediaSettings->CodecSettings.uVideoCodec) { m_bIsRestart = TRUE; } return m_bIsRestart; } BOOL CPageCodecSettings::SaveSetting() { ULONG uCh = m_local_param.channel; CMN5_MULTI_COMMAND Cmds[NVE_MAX_MULTI_CMD_COUNT]; ULONG uCmdIndex = 0; if (m_pConnection->GetProcessState() < CMN5_PS_SETUP) { return TRUE; } IsRestart(); if (m_cbBitrateMode.GetCurSel() != 2) { uCmdIndex = 0; Cmds[uCmdIndex].uCommand = COD5_CAC_BITRATE; Cmds[uCmdIndex].uBoard = 0; Cmds[uCmdIndex].uChannel = 0; if (m_cbBitrateMode.GetCurSel() == 0) { Cmds[uCmdIndex].uParam[0] = COD5_BM_CBR; Cmds[uCmdIndex].uParam[1] = m_uBitrate; }else if (m_cbBitrateMode.GetCurSel() == 1) { Cmds[uCmdIndex].uParam[0] = COD5_BM_VBRQ; Cmds[uCmdIndex].uParam[1] = GetDlgItemInt(IDC_EDIT_QUANT); } uCmdIndex++; if (!m_pCod5Api->Cod5SetMultiCodecAdjusts(uCmdIndex, Cmds)) { m_pMsgMgr->PushErrorCodeF("Cod5SetMultiCodecAdjusts failed"); m_pMsgMgr->Show(TRUE); } if (m_cbBitrateMode.GetCurSel() == 0) { m_pMediaSettings->CodecSettings.uBitrateMode = COD5_BM_CBR; m_pMediaSettings->CodecSettings.uBitrate = m_uBitrate; }else if (m_cbBitrateMode.GetCurSel() == 1) { m_pMediaSettings->CodecSettings.uBitrateMode = COD5_BM_VBRQ; m_pMediaSettings->CodecSettings.uQuant = GetDlgItemInt(IDC_EDIT_QUANT); } } else { char szCmd[NVE_SHORT_EXT_CMD_LENGTH]; _snprintf(szCmd, sizeof(szCmd), "EXT_SUBSESSION_CMD %s/track6 RTSP/1.0\r\n" "CSeq: 1\r\n" "CmdCount: 1\r\n" "SET BITRATE mode=hvbr, cbr_bitrate=%d, vbr_quant=%d\r\n\r\n", m_pConnection->GetServerAddr(), GetDlgItemInt(IDC_CB_BITRATE)*1000, GetDlgItemInt(IDC_EDIT_QUANT)); CHECK_AND_RETURN_FALSE(m_pNet5Api->Net5Command(NET5_NC_SEND_RTSP_REQUEST, (ULONG*)szCmd, NULL, NULL, NULL), "Cannot set bitrate"); CHECK_AND_RETURN_FALSE(m_pNet5Api->Net5Command(NET5_NC_RECV_RTSP_RESPONSE, (ULONG*)szCmd, NULL, NULL, NULL), "Cannot receive response(bitrate)"); m_pMediaSettings->CodecSettings.uBitrateMode = 0; m_pMediaSettings->CodecSettings.uBitrate = GetDlgItemInt(IDC_CB_BITRATE)*1000; m_pMediaSettings->CodecSettings.uQuant = GetDlgItemInt(IDC_EDIT_QUANT); } uCmdIndex = 0; ULONG uParam = 0; if (m_chkEnable.GetCheck()) { uParam |= COD5_CST_VIDEO; } if (m_pMediaSettings->AudioSettings.bEnable) { uParam |= COD5_CST_AUDIO; } MAKE_MULTI_CMD(Cmds[uCmdIndex], uCmdIndex, COD5_CAC_STREAM_ENABLE, 0, 0, uParam, 0, 0, 0); if (!m_pCod5Api->Cod5SetMultiCodecAdjusts(uCmdIndex, Cmds)) { m_pMsgMgr->PushErrorCodeF("Cod5SetMultiCodecAdjusts failed"); m_pMsgMgr->Show(TRUE); } m_pMediaSettings->VideoSettings.bEnable = m_chkEnable.GetCheck(); if (!m_bIsRestart) { return TRUE; } uCmdIndex = 0; if (uCh == 0xff) { for (ULONG i=0; iAudioSettings.uAudioCodec; uCmdIndex++; MAKE_MULTI_CMD(Cmds[uCmdIndex], uCmdIndex, COD5_CPC_DENOISE_FILTER, 0, i, GetDlgItemInt(IDC_EDIT_NOISE), 0, 0, 0); } }else{ Cmds[uCmdIndex].uCommand = COD5_CPC_VIDEO_FORMAT; Cmds[uCmdIndex].uBoard = 0; Cmds[uCmdIndex].uChannel = uCh; Cmds[uCmdIndex].uParam[0] = m_uVideoFormat; uCmdIndex++; Cmds[uCmdIndex].uCommand = COD5_CPC_VIDEO_IMAGE_SIZE; Cmds[uCmdIndex].uBoard = 0; Cmds[uCmdIndex].uChannel = uCh; Cmds[uCmdIndex].uParam[0] = m_uResolution; uCmdIndex++; Cmds[uCmdIndex].uCommand = COD5_CPC_SKIP_FRAME; Cmds[uCmdIndex].uBoard = 0; Cmds[uCmdIndex].uChannel = uCh; if (m_uVideoFormat == CMN5_VIDEO_FORMAT_NTSC_M) { Cmds[uCmdIndex].uParam[0] = (NVE_MAX_NTSC_FRAME_RATE/m_uFrameRate)-1; }else if (m_uVideoFormat == CMN5_VIDEO_FORMAT_PAL_B) { Cmds[uCmdIndex].uParam[0] = (NVE_MAX_PAL_FRAME_RATE/m_uFrameRate)-1; } uCmdIndex++; #if 0 Cmds[uCmdIndex].uCommand = COD5_CPC_BITRATE; Cmds[uCmdIndex].uBoard = 0; Cmds[uCmdIndex].uChannel = uCh; Cmds[uCmdIndex].uParam[0] = COD5_BM_CBR; Cmds[uCmdIndex].uParam[1] = m_uBitrate; uCmdIndex++; #endif Cmds[uCmdIndex].uCommand = COD5_CPC_GOP_SIZE; Cmds[uCmdIndex].uBoard = 0; Cmds[uCmdIndex].uChannel = uCh; Cmds[uCmdIndex].uParam[0] = m_uGOPSize; uCmdIndex++; Cmds[uCmdIndex].uCommand = COD5_CPC_CODEC_TYPE; Cmds[uCmdIndex].uBoard = 0; Cmds[uCmdIndex].uChannel = uCh; Cmds[uCmdIndex].uParam[0] = m_uCodecType; Cmds[uCmdIndex].uParam[1] = m_pMediaSettings->AudioSettings.uAudioCodec; uCmdIndex++; MAKE_MULTI_CMD(Cmds[uCmdIndex], uCmdIndex, COD5_CPC_DENOISE_FILTER, 0, uCh, GetDlgItemInt(IDC_EDIT_NOISE), 0, 0, 0); } m_pCod5Api->Cod5SetMultiCodecProperties(uCmdIndex, Cmds); for (ULONG i=0; iPushErrorCodeF("Cod5SetMultiCodecProperties failed. cmd[0x%08x]", Cmds[i].uCommand); m_pMsgMgr->Show(TRUE); } } return TRUE; } BOOL CPageCodecSettings::ResetSetting() { m_cbCodec.SetCurSel(0); m_cbVideoFormat.SetCurSel(0); OnSelchangeCbVideoFormat(); m_cbImageSize.SetCurSel(1); m_cbGOPSize.EnableWindow(TRUE); m_cbGOPSize.SetCurSel(3); m_cbFrameRate.SetCurSel(0); m_cbBitrateMode.SetCurSel(0); m_cbBitrate.EnableWindow(TRUE); m_cbBitrate.SetCurSel(6); SetDlgItemText(IDC_EDIT_QUANT, "128"); m_edtQuant.EnableWindow(FALSE); SetDlgItemInt(IDC_EDIT_NOISE, 0); UpdateData(FALSE); return TRUE; } BOOL CPageCodecSettings::UpdateSetting() { ULONG uCodecIndex; switch(m_pMediaSettings->CodecSettings.uVideoCodec) { case COD5_VCT_MP4_ES: uCodecIndex = 0; break; /*case COD5_VCT_MP4S_ES: uCodecIndex = 1; break;*/ case COD5_VCT_MJPEG: uCodecIndex = 1; break; case COD5_VCT_MP2_ES: uCodecIndex = 2; break; } m_cbCodec.SetCurSel(uCodecIndex); if (m_pMediaSettings->CodecSettings.uVideoCodec == COD5_VCT_MJPEG) { m_cbGOPSize.EnableWindow(FALSE); } m_cbVideoFormat.SetCurSel(m_pMediaSettings->CodecSettings.uVideoFormat-1); ULONG uIndex; SetResoultionToIndex(m_pMediaSettings->CodecSettings.uResolution, &uIndex); m_cbImageSize.SetCurSel(uIndex); SetValueToIndex(&m_cbFrameRate, m_pMediaSettings->CodecSettings.uFrameRate, &uIndex); m_cbFrameRate.SetCurSel(uIndex); char temp[NVE_MAX_STR_LENGTH]; _itoa(m_pMediaSettings->CodecSettings.uFrameRate, temp, 10); SetDlgItemText(IDC_CB_FRAME_RATE, temp); SetValueToIndex(&m_cbGOPSize, m_pMediaSettings->CodecSettings.uGOPSize, &uIndex); m_cbGOPSize.SetCurSel(uIndex); if (m_pMediaSettings->CodecSettings.uBitrateMode == COD5_BM_CBR) { m_cbBitrateMode.SetCurSel(0); m_edtQuant.EnableWindow(FALSE); m_cbBitrate.EnableWindow(TRUE); } else if (m_pMediaSettings->CodecSettings.uBitrateMode == COD5_BM_VBRQ) { m_cbBitrateMode.SetCurSel(1); m_edtQuant.EnableWindow(TRUE); m_cbBitrate.EnableWindow(FALSE); SetDlgItemInt(IDC_EDIT_QUANT, m_pMediaSettings->CodecSettings.uQuant); } else { char szCmd[NVE_SHORT_EXT_CMD_LENGTH]; _snprintf(szCmd, sizeof(szCmd), "EXT_SUBSESSION_CMD %s/track6 RTSP/1.0\r\n" "CSeq: 1\r\n" "CmdCount: 1\r\n" "GET BITRATE\r\n\r\n", m_pConnection->GetServerAddr()); CHECK_AND_RETURN_FALSE(m_pNet5Api->Net5Command(NET5_NC_SEND_RTSP_REQUEST, (ULONG*)szCmd, NULL, NULL, NULL), "Cannot get bitrate"); CHECK_AND_RETURN_FALSE(m_pNet5Api->Net5Command(NET5_NC_RECV_RTSP_RESPONSE, (ULONG*)szCmd, NULL, NULL, NULL), "Cannot receive response(bitrate)"); NVE_RTSP_VALUE RtspValue[NVE_MAX_RTSP_VALUE]; char szMode[NVE_SHORT_STR_LENGTH]; ParseRTSPResponse(szCmd, RtspValue, NVE_MAX_RTSP_VALUE); FindRTSPValue(RtspValue, "mode", szMode, NVE_RTSP_VALUE_STR); if (strcmp("hvbr", szMode) == 0) { m_cbBitrateMode.SetCurSel(2); } FindRTSPValue(RtspValue, "cbr_bitrate", &m_pMediaSettings->CodecSettings.uBitrate, NVE_RTSP_VALUE_INT); FindRTSPValue(RtspValue, "quant", &m_pMediaSettings->CodecSettings.uQuant, NVE_RTSP_VALUE_INT); SetDlgItemInt(IDC_EDIT_QUANT, m_pMediaSettings->CodecSettings.uQuant); } SetBitrateToIndex(m_pMediaSettings->CodecSettings.uBitrate); SetDlgItemInt(IDC_EDIT_NOISE, m_pMediaSettings->CodecSettings.uNoiseFilter); //UpdateData(FALSE); return TRUE; } BOOL CPageCodecSettings::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here ULONG uCh = m_local_param.channel; char text[64]; if(uCh==0xFF){ sprintf(text,"All Channels"); uCh=0; }else{ sprintf(text,"Channel:%d", uCh); } SetDlgItemText(IDC_STATIC_MPEG_CH,text); m_pMediaSettings = m_pConnection->GetMediaSettings(uCh); m_pNet5Api = m_pConnection->GetNet5Api(); m_pCod5Api = m_pConnection->GetCod5Api(); m_pMsgMgr = m_pMgrNVE->GetMsgManager(); CHECK_AND_RETURN_FALSE(m_pCod5Api->Cod5QueryInfo(CMN5_QIC_GET_HWINFO_STR, 0, m_pConnection->GetGlobalSettings()->InformationString), "Cod5QueryInfo failed"); BOOL bUseMpeg2 = TRUE; char szName[NVE_SHORT_STR_LENGTH], szValue[NVE_SHORT_STR_LENGTH]; char *pStr = strstr(m_pConnection->GetGlobalSettings()->InformationString, "sw_resource"); if (pStr) { sscanf(pStr, "%[a-zA-Z0-9_]=%[a-zA-Z0-9_]", szName, szValue); if (atoi(szValue)&0x1) { bUseMpeg2 = FALSE; } } m_cbCodec.AddString("MPEG4-ES"); //m_cbCodec.AddString("MP4S"); m_cbCodec.AddString("MJPEG"); if (bUseMpeg2) { m_cbCodec.AddString("MPEG2-ES"); } if (m_pMediaSettings->CodecSettings.uVideoFormat == CMN5_VIDEO_FORMAT_NTSC_M) { m_cbImageSize.AddString("720x480"); m_cbImageSize.AddString("704x480"); m_cbImageSize.AddString("640x480"); m_cbImageSize.AddString("704x240"); m_cbImageSize.AddString("320x240"); m_cbImageSize.AddString("352x240"); m_cbImageSize.AddString("176x112"); }else{ m_cbImageSize.AddString("720x576"); m_cbImageSize.AddString("704x576"); m_cbImageSize.AddString("640x480"); m_cbImageSize.AddString("704x288"); m_cbImageSize.AddString("320x240"); m_cbImageSize.AddString("352x288"); m_cbImageSize.AddString("176x144"); } if (m_pMediaSettings->CodecSettings.uVideoFormat == CMN5_VIDEO_FORMAT_NTSC_M) { #if 0 m_cbFrameRate.AddString("0 (30 fps)"); m_cbFrameRate.AddString("1 (15 fps)"); m_cbFrameRate.AddString("2 (10 fps)"); m_cbFrameRate.AddString("3 (7.5 fps)"); m_cbFrameRate.AddString("4 (6 fps)"); m_cbFrameRate.AddString("5 (5 fps)"); m_cbFrameRate.AddString("7 (3.75 fps)"); m_cbFrameRate.AddString("14 (2 fps)"); m_cbFrameRate.AddString("29 (1 fps)"); #endif m_cbFrameRate.AddString("30"); m_cbFrameRate.AddString("15"); m_cbFrameRate.AddString("10"); m_cbFrameRate.AddString("7.50"); m_cbFrameRate.AddString("6"); m_cbFrameRate.AddString("5"); m_cbFrameRate.AddString("3"); m_cbFrameRate.AddString("2"); m_cbFrameRate.AddString("1"); }else{ m_cbFrameRate.AddString("25"); m_cbFrameRate.AddString("12.50"); m_cbFrameRate.AddString("8.33"); m_cbFrameRate.AddString("6.25"); m_cbFrameRate.AddString("5"); m_cbFrameRate.AddString("4.16"); m_cbFrameRate.AddString("3.12"); m_cbFrameRate.AddString("2.08"); m_cbFrameRate.AddString("1"); } m_cbGOPSize.AddString("1"); m_cbGOPSize.AddString("3"); m_cbGOPSize.AddString("7"); m_cbGOPSize.AddString("15"); m_cbGOPSize.AddString("31"); m_cbGOPSize.AddString("63"); m_cbGOPSize.AddString("127"); m_cbBitrateMode.AddString("CBR"); m_cbBitrateMode.AddString("VBR"); m_cbBitrateMode.AddString("HVBR"); if (m_pConnection->IsSetup()) { m_chkEnable.SetCheck(m_pMediaSettings->VideoSettings.bEnable); } else { m_chkEnable.SetCheck(1); } UpdateSetting(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } BOOL CPageCodecSettings::GetResolution(ULONG *puResolution) { // TODO: Add your control notification handler code here ULONG uWidth, uHeight; if (m_cbVideoFormat.GetCurSel() == 0) { switch(m_cbImageSize.GetCurSel()) { case 0: uWidth = 720; uHeight = 480; break; case 1: uWidth = 704; uHeight = 480; break; case 2: uWidth = 640; uHeight = 480; break; case 3: uWidth = 704; uHeight = 240; break; #if 0 case 4: uWidth = 544; uHeight = 576; break; case 5: uWidth = 544; uHeight = 480; break; #endif case 4: uWidth = 320; uHeight = 240; break; case 5: uWidth = 352; uHeight = 240; break; case 6: uWidth = 176; uHeight = 112; break; #if 0 case 7: uWidth = 160; uHeight = 112; break; #endif } }else{ switch(m_cbImageSize.GetCurSel()) { case 0: uWidth = 720; uHeight = 576; break; case 1: uWidth = 704; uHeight = 576; break; case 2: uWidth = 640; uHeight = 480; break; case 3: uWidth = 704; uHeight = 288; break; #if 0 case 4: uWidth = 544; uHeight = 576; break; case 5: uWidth = 544; uHeight = 480; break; #endif case 4: uWidth = 320; uHeight = 240; break; case 5: uWidth = 352; uHeight = 288; break; case 6: uWidth = 176; uHeight = 144; break; #if 0 case 7: uWidth = 160; uHeight = 112; break; #endif } } *puResolution = CMN5_MAKEIMGSIZE(uWidth, uHeight); return TRUE; } void CPageCodecSettings::OnSelchangeCbVideoFormat() { // TODO: Add your control notification handler code here m_cbImageSize.ResetContent(); if (m_cbVideoFormat.GetCurSel() == 0) { m_cbImageSize.AddString("720x480"); m_cbImageSize.AddString("704x480"); m_cbImageSize.AddString("640x480"); m_cbImageSize.AddString("704x240"); #if 0 m_cbImageSize.AddString("544x576"); m_cbImageSize.AddString("544x480"); #endif m_cbImageSize.AddString("320x240"); m_cbImageSize.AddString("352x240"); m_cbImageSize.AddString("176x112"); #if 0 m_cbImageSize.AddString("160x112"); #endif }else{ m_cbImageSize.AddString("720x576"); m_cbImageSize.AddString("704x576"); m_cbImageSize.AddString("640x480"); m_cbImageSize.AddString("704x288"); #if 0 m_cbImageSize.AddString("544x576"); m_cbImageSize.AddString("544x480"); #endif m_cbImageSize.AddString("320x240"); m_cbImageSize.AddString("352x288"); m_cbImageSize.AddString("176x144"); #if 0 m_cbImageSize.AddString("160x112"); #endif } m_cbImageSize.SetCurSel(0); m_cbFrameRate.ResetContent(); if (m_cbVideoFormat.GetCurSel() == 0) { m_cbFrameRate.AddString("30"); m_cbFrameRate.AddString("15"); m_cbFrameRate.AddString("10"); m_cbFrameRate.AddString("7.50"); m_cbFrameRate.AddString("6"); m_cbFrameRate.AddString("5"); m_cbFrameRate.AddString("3"); m_cbFrameRate.AddString("2"); m_cbFrameRate.AddString("1"); }else{ m_cbFrameRate.AddString("25"); m_cbFrameRate.AddString("12.50"); m_cbFrameRate.AddString("8.33"); m_cbFrameRate.AddString("6.25"); m_cbFrameRate.AddString("5"); m_cbFrameRate.AddString("4.16"); m_cbFrameRate.AddString("3.12"); m_cbFrameRate.AddString("2.08"); m_cbFrameRate.AddString("1"); } m_cbFrameRate.SetCurSel(0); } BOOL CPageCodecSettings::GetBitrate(ULONG *puBitrate) { switch(m_cbBitrate.GetCurSel()) { case 0: *puBitrate = 128000; break; case 1: *puBitrate = 256000; break; case 2: *puBitrate = 512000; break; case 3: *puBitrate = 768000; break; case 4: *puBitrate = 1000000; break; case 5: *puBitrate = 1200000; break; case 6: *puBitrate = 1500000; break; case 7: *puBitrate = 1800000; break; case 8: *puBitrate = 2000000; break; case 9: *puBitrate = 2500000; break; case 10: *puBitrate = 3000000; break; case 11: *puBitrate = 3500000; break; case 12: *puBitrate = 4000000; break; case 13: *puBitrate = 5000000; break; default: { CString strBitrate; GetDlgItemText(IDC_CB_BITRATE, strBitrate); *puBitrate = atoi((LPSTR)(LPCSTR)strBitrate)*1000; } } return TRUE; } BOOL CPageCodecSettings::SetResoultionToIndex(ULONG uResolution, ULONG *puIndex) { ULONG uWidth = CMN5_GETIMGWIDTH(uResolution); ULONG uHeight = CMN5_GETIMGHEIGHT(uResolution); *puIndex = 0; if (m_pMediaSettings->CodecSettings.uVideoFormat == CMN5_VIDEO_FORMAT_NTSC_M) { if (uWidth == 720 && uHeight == 480) { *puIndex = 0; return TRUE; } if (uWidth == 704 && uHeight == 480) { *puIndex = 1; return TRUE; } if (uWidth == 640 && uHeight == 480) { *puIndex = 2; return TRUE; } if (uWidth == 704 && uHeight == 240) { *puIndex = 3; return TRUE; } #if 0 if (uWidth == 544 && uHeight == 576) { *puIndex = 4; return TRUE; } if (uWidth == 544 && uHeight == 480) { *puIndex = 5; return TRUE; } #endif if (uWidth == 320 && uHeight == 240) { *puIndex = 4; return TRUE; } if (uWidth == 352 && uHeight == 240) { *puIndex = 5; return TRUE; } if (uWidth == 176 && uHeight == 112) { *puIndex = 6; return TRUE; } #if 0 if (uWidth == 160 && uHeight == 112) { *puIndex = 7; return TRUE; } #endif }else{ if (uWidth == 720 && uHeight == 576) { *puIndex = 0; return TRUE; } if (uWidth == 704 && uHeight == 576) { *puIndex = 1; return TRUE; } if (uWidth == 640 && uHeight == 480) { *puIndex = 2; return TRUE; } if (uWidth == 704 && uHeight == 288) { *puIndex = 3; return TRUE; } #if 0 if (uWidth == 544 && uHeight == 576) { *puIndex = 4; return TRUE; } if (uWidth == 544 && uHeight == 480) { *puIndex = 5; return TRUE; } #endif if (uWidth == 320 && uHeight == 240) { *puIndex = 4; return TRUE; } if (uWidth == 352 && uHeight == 288) { *puIndex = 5; return TRUE; } if (uWidth == 176 && uHeight == 144) { *puIndex = 6; return TRUE; } #if 0 if (uWidth == 160 && uHeight == 112) { *puIndex = 7; return TRUE; } #endif } return FALSE; } BOOL CPageCodecSettings::SetValueToIndex(CComboBox *pComboBox, ULONG uValue, ULONG *puIndex) { char strValue[5]; for (LONG i=0; iGetCount(); i++) { pComboBox->GetLBText(i, strValue); if (uValue == (ULONG)atoi(strValue)) { *puIndex = i; return TRUE; } } return FALSE; } BOOL CPageCodecSettings::SetBitrateToIndex(ULONG uBitrate) { ULONG uIndex; switch(uBitrate) { case 128000: uIndex = 0; break; case 256000: uIndex = 1; break; case 512000: uIndex = 2; break; case 768000: uIndex = 3; break; case 1000000: uIndex = 4; break; case 1200000: uIndex = 5; break; case 1500000: uIndex = 6; break; case 1800000: uIndex = 7; break; case 2000000: uIndex = 8; break; case 2500000: uIndex = 9; break; case 3000000: uIndex = 10; break; case 3500000: uIndex = 11; break; case 4000000: uIndex = 12; break; case 5000000: uIndex = 13; break; default: { char temp[NVE_MAX_STR_LENGTH]; _itoa(uBitrate/1000, temp, 10); SetDlgItemText(IDC_CB_BITRATE, temp); return TRUE; } } m_cbBitrate.SetCurSel(uIndex); return TRUE; } void CPageCodecSettings::OnSelchangeCbVideoCodec() { ULONG uFrameRate; if (m_cbCodec.GetCurSel() == 1) { m_cbGOPSize.EnableWindow(FALSE); uFrameRate = m_cbFrameRate.GetCurSel(); m_uPreFps = uFrameRate; if (uFrameRate < 2) { m_cbFrameRate.SetCurSel(2); } }else{ m_cbGOPSize.EnableWindow(TRUE); m_cbFrameRate.SetCurSel(m_uPreFps); } } void CPageCodecSettings::OnSelchangeCbBitRateMode() { // TODO: Add your control notification handler code here switch(m_cbBitrateMode.GetCurSel()) { case 0: m_edtQuant.EnableWindow(FALSE); m_cbBitrate.EnableWindow(TRUE); break; case 1: m_edtQuant.EnableWindow(TRUE); m_cbBitrate.EnableWindow(FALSE); SetDlgItemInt(IDC_EDIT_QUANT, m_pMediaSettings->CodecSettings.uQuant); break; case 2: m_edtQuant.EnableWindow(TRUE); m_cbBitrate.EnableWindow(TRUE); SetDlgItemInt(IDC_EDIT_QUANT, m_pMediaSettings->CodecSettings.uQuant); break; } } void CPageCodecSettings::OnBtnCodecApply() { // TODO: Add your control notification handler code here m_pConnection->ApplyProc(this); }