📄 mp_apdlg.cpp
字号:
EnterCriticalSection(&g_CS[i]);
nRate = (g_Channel_Info[i].nFrames * 1000) / dwDiff;
g_Channel_Info[i].nFrames = 0;
g_Channel_Info[i].dwLastFRTick = dwTickNow;
LeaveCriticalSection(&g_CS[i]);
}
}
sprintf(chTemp, "%d", nRate);
GetDlgItem(IDC_STATIC_FR1 + i)->SetWindowText(chTemp);
}
}
CTime t = CTime::GetCurrentTime();
str3.Format("\n %02ld:%02ld:%02ld", t.GetHour(), t.GetMinute(), t.GetSecond());
str = str1+str2+str3;
m_STATIC_STATUS.SetWindowText(str);
return 0;
}
int CMP_APDlg::CheckUI(void)
{
/*m_btnGetSys.EnableWindow(g_Channel_Info[g_iFocus].bConnecting &&
!(g_Channel_Info[g_iFocus].dwAsyncOper & (asyncSetProp)));
GetDlgItem(IDC_BUTTON_GETMD)->EnableWindow(g_Channel_Info[g_iFocus].bConnecting &&
!(g_Channel_Info[g_iFocus].dwAsyncOper & (asyncSetProp)));
GetDlgItem(IDC_BUTTON_SETMD)->EnableWindow(g_Channel_Info[g_iFocus].bConnecting &&
!(g_Channel_Info[g_iFocus].dwAsyncOper & (asyncSetProp)));
m_editUrlCmd.EnableWindow(g_Channel_Info[g_iFocus].bConnecting &&
!(g_Channel_Info[g_iFocus].dwAsyncOper & (asyncSetProp | asyncHttpOperGet | asyncHttpOperPost)));
GetDlgItem(IDC_CHECK_SHOW_RETURN)->EnableWindow(g_Channel_Info[g_iFocus].bConnecting &&
!(g_Channel_Info[g_iFocus].dwAsyncOper & (asyncSetProp | asyncHttpOperGet | asyncHttpOperPost)));
m_StaticUrlCmd.EnableWindow(g_Channel_Info[g_iFocus].bConnecting &&
!(g_Channel_Info[g_iFocus].dwAsyncOper & (asyncSetProp | asyncHttpOperGet | asyncHttpOperPost)));
m_butGet.EnableWindow(g_Channel_Info[g_iFocus].bConnecting &&
!(g_Channel_Info[g_iFocus].dwAsyncOper & (asyncSetProp | asyncHttpOperGet | asyncHttpOperPost)));
m_butPost.EnableWindow(g_Channel_Info[g_iFocus].bConnecting &&
!(g_Channel_Info[g_iFocus].dwAsyncOper & (asyncSetProp | asyncHttpOperGet | asyncHttpOperPost)));
CButton_SetDO1.EnableWindow(g_Channel_Info[g_iFocus].bConnecting &&
!(g_Channel_Info[g_iFocus].dwAsyncOper & (asyncSetProp | asyncSetDO)));
CEdit_DO1Val.EnableWindow(g_Channel_Info[g_iFocus].bConnecting &&
!(g_Channel_Info[g_iFocus].dwAsyncOper & (asyncSetProp | asyncSetDO)));
GetDlgItem(IDC_BUTTON_SETPARAM)->EnableWindow(g_Channel_Info[g_iFocus].bConnecting &&
!(g_Channel_Info[g_iFocus].dwAsyncOper & (asyncSetProp | asyncSetDO)));
GetDlgItem(IDC_BUTTON_UPD_REMOTE)->EnableWindow(g_Channel_Info[g_iFocus].bConnecting &&
!(g_Channel_Info[g_iFocus].dwAsyncOper & (asyncSetProp)));
GetDlgItem(IDC_EDIT_SETPARAM_CNT)->EnableWindow(g_Channel_Info[g_iFocus].bConnecting &&
!(g_Channel_Info[g_iFocus].dwAsyncOper & (asyncSetProp | asyncSetDO)));
GetDlgItem(IDC_READ_UART)->EnableWindow(g_Channel_Info[g_iFocus].bConnecting &&
!(g_Channel_Info[g_iFocus].dwAsyncOper & (asyncSetProp | asyncUartRead)));
GetDlgItem(IDC_EDIT_UART)->EnableWindow(g_Channel_Info[g_iFocus].bConnecting &&
!(g_Channel_Info[g_iFocus].dwAsyncOper & (asyncSetProp | asyncUartRead)));
GetDlgItem(IDC_WRITE_UART)->EnableWindow(g_Channel_Info[g_iFocus].bConnecting &&
!(g_Channel_Info[g_iFocus].dwAsyncOper & (asyncSetProp | asyncUartWrite)));
GetDlgItem(IDC_EDIT_UART2)->EnableWindow(g_Channel_Info[g_iFocus].bConnecting &&
!(g_Channel_Info[g_iFocus].dwAsyncOper & (asyncSetProp | asyncUartWrite)));
((CButton *) GetDlgItem(IDC_CHECK_NOBORDER))->SetCheck(g_Channel_Info[g_iFocus].bNoBorder?1:0);
GetDlgItem(IDC_BUTTON_GET_SECENTRY)->EnableWindow(g_Channel_Info[g_iFocus].bConnecting &&
!(g_Channel_Info[g_iFocus].dwAsyncOper & (asyncSetProp)));
*/
if (g_Channel_Info[g_iFocus].chServer_Type[2] > '3' && g_Channel_Info[g_iFocus].chServer_Type[2] != '7')
{
BOOL bTalkEnabled = !(g_Channel_Info[g_iFocus].eTalkState == eTalkEstablishing ||
g_Channel_Info[g_iFocus].eTalkState == eTalkStopping);
bTalkEnabled &= (g_Channel_Info[g_iFocus].iAudioMode < 3);
m_btnTx.EnableWindow(bTalkEnabled && g_Channel_Info[g_iFocus].bConnecting && g_Channel_Info[g_iFocus].nTxConn != 2);
GetDlgItem(IDC_BUTTON_TALK)->EnableWindow(!m_bNoAudio && bTalkEnabled && g_Channel_Info[g_iFocus].bConnecting && g_Channel_Info[g_iFocus].nTxConn != 1);
m_editTxFileName.EnableWindow(bTalkEnabled && g_Channel_Info[g_iFocus].bConnecting && g_Channel_Info[g_iFocus].nTxConn == 0);
m_btnTxBrowse.EnableWindow(bTalkEnabled && g_Channel_Info[g_iFocus].bConnecting && g_Channel_Info[g_iFocus].nTxConn == 0);
if (g_Channel_Info[g_iFocus].nTxConn == 1)
m_btnTx.SetWindowText("Stop Tx");
else
m_btnTx.SetWindowText("Start Tx");
if (g_Channel_Info[g_iFocus].nTxConn == 2)
GetDlgItem(IDC_BUTTON_TALK)->SetWindowText("Stop Talk");
else
GetDlgItem(IDC_BUTTON_TALK)->SetWindowText("Start Talk");
}
else
{
m_btnTx.EnableWindow(FALSE);
m_editTxFileName.EnableWindow(FALSE);
m_btnTxBrowse.EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON_TALK)->EnableWindow(FALSE);
}
CButton_ChDisplay.SetCheck(g_Channel_Info[g_iFocus].bNoDisplay?0:1);
CSliderCtrl_Volume.SetPos(g_Channel_Info[g_iFocus].dwVolume);
BOOL bEnabled = FALSE;
if (g_Channel_Info[g_iFocus].chStatus == channelStopped ||
g_Channel_Info[g_iFocus].chStatus == channelConnected)
bEnabled = TRUE;
if ( strlen(g_Channel_Info[g_iFocus].chServer_Type) == 0 )
{
CButton_Record.EnableWindow(FALSE);
CButton_Connect.EnableWindow(FALSE);
CButton_Snap.EnableWindow(FALSE);
}
else
{
CButton_Record.EnableWindow(bEnabled && g_Channel_Info[g_iFocus].bConnecting);
CButton_Snap.EnableWindow(bEnabled && g_Channel_Info[g_iFocus].bConnecting);
CSliderCtrl_Range.EnableWindow(g_Channel_Info[g_iFocus].dwMediaEnd && bEnabled);
CButton_Pause.EnableWindow(bEnabled && g_Channel_Info[g_iFocus].eRtspState == eRtspStPlay);
CButton_Play.EnableWindow(bEnabled && g_Channel_Info[g_iFocus].eRtspState != eRtspStPlay);
CButton_Connect.EnableWindow(TRUE); //Bruce
}
if (g_Channel_Info[g_iFocus].chStatus != channelStopped)
CButton_Connect.SetWindowText("Disconnect");
else
CButton_Connect.SetWindowText("Connect");
if ( g_Channel_Info[g_iFocus].bRecording == TRUE )
CButton_Record.SetWindowText("Stop");
else
CButton_Record.SetWindowText("Record");
// close non-focus channel's audio
TUPDATECHANNELOPTION tUpdateChannelOptions;
for ( int i = 0 ; i < g_nMaxChannel ; i ++ )
{
tUpdateChannelOptions.dwFlags = UPCH_AUDIOOUT;
if (i == g_iFocus)
{
tUpdateChannelOptions.bAudioOut = TRUE;
// mute half duplex when upstream is enabled.
if((g_Channel_Info[g_iFocus].iAudioMode == 2) & (g_Channel_Info[g_iFocus].nTxConn))
{
tUpdateChannelOptions.bAudioOut = FALSE;
}
}
else
tUpdateChannelOptions.bAudioOut = FALSE;
tUpdateChannelOptions.dwFlags = UPCH_AUDIOOUT;
if ( g_Channel_Info[i].hChannel != NULL )
AvSynchronizer_UpdateChannelSettings (g_Channel_Info[i].hChannel,tUpdateChannelOptions );
}
g_Channel_Info[g_iFocus].nTimerDI = 0;
m_btnEventDrivenRec.EnableWindow(g_Channel_Info[g_iFocus].bConnecting);
m_btnEventDrivenRec.SetCheck(g_Channel_Info[g_iFocus].bEventRecord?1:0);
return 0;
}
void CMP_APDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if (nIDEvent == 1)
Change_Status();
else if (nIDEvent == 2)
// check for reconnection
CheckReconnection();
CDialog::OnTimer(nIDEvent);
}
void CMP_APDlg::CheckReconnection()
{
EnterCriticalSection(&m_CS);
for (int nCnt = 0; nCnt < g_nMaxChannel; nCnt++)
{
if (g_Channel_Info[nCnt].bNeedReconnect)
{
g_Channel_Info[nCnt].bNeedReconnect = FALSE;
if (g_Channel_Info[nCnt].chStatus == channelStopped)
{
Connect_Channel(nCnt);
}
}
}
LeaveCriticalSection(&m_CS);
}
//=================================================================
// Function : InitialParameters
// Description: initial the g_Channel_Info
//
// Parameters :
// Return :
//=================================================================
int CMP_APDlg::InitialParameters(void)
{
ZeroMemory(g_Channel_Info,sizeof(g_Channel_Info));
ReadParameters();// read parameters from mp_ap.ini
char chTemp[64];
for ( int i = 0 ; i < g_nMaxChannel ; i++)
{
g_Channel_Info[i].dwContext = i;
sprintf(chTemp,"CH_%d",i);
strcpy(g_Channel_Info[i].chDBLocation,chTemp);
InitializeCriticalSection(&g_CS[i]);
g_Channel_Info[i].hDisplay = GetDlgItem(IDC_STATIC_DISPLAY1 + i)->m_hWnd;
g_Channel_Info[i].pvDlg = this;
}
g_hBMP = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE((WORD)IDB_B));
return 0;
}
//=================================================================
// Function : OnNMReleasedcaptureSliderVolume
// Description: change the volume
//
// Parameters :
// Return :
//=================================================================
void CMP_APDlg::OnNMReleasedcaptureSliderVolume(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: Add your control notification handler code here
g_Channel_Info[g_iFocus].dwVolume = CSliderCtrl_Volume.GetPos();
long int iSoundVolume = 50 * g_Channel_Info[g_iFocus].dwVolume; // 0~ 100 -> 0~5000
// set sound volume
TUPDATECHANNELOPTION tUpdateChannelOptions;
tUpdateChannelOptions.dwVolume = iSoundVolume;
tUpdateChannelOptions.dwFlags = UPCH_VOLUME;
if ( g_Channel_Info[g_iFocus].hChannel != NULL )
AvSynchronizer_UpdateChannelSettings (g_Channel_Info[g_iFocus].hChannel, tUpdateChannelOptions);
*pResult = 0;
}
void CMP_APDlg::OnNMReleasedcaptureSliderRange(NMHDR *pNMHDR, LRESULT *pResult)
{
DWORD dwPosition;
AvSynchronizer_SetChannelOption(g_Channel_Info[g_iFocus].hChannel, SETCH_RESUME_PLAYING, TRUE, 0);
dwPosition = CSliderCtrl_Range.GetPos();
DataBroker_JumpMediaStreaming(
g_Channel_Info[g_iFocus].hConn,
dwPosition
);
}
void CMP_APDlg::UpdateStatusToEdit(const char *pszMsg)
{
CEdit *pEdit = (CEdit *) GetDlgItem(IDC_UPGRADE_STATUS);
pEdit->SetSel(-1, 0, FALSE);
CString strOrg;
pEdit->GetWindowText(strOrg);
if (strOrg.GetLength() > 0)
pEdit->ReplaceSel("\r\n");
pEdit->ReplaceSel(pszMsg);
}
void CMP_APDlg::TxOnChannel(int nIndex)
{
if (!g_Channel_Info[nIndex].bConnecting)
return;
if (g_Channel_Info[nIndex].nTxConn == 1)
{
g_Channel_Info[nIndex].nTxConn = 0;
g_Channel_Info[nIndex].eTalkState = eTalkStopping;
SCODE sRet = DataBroker_StopTxConnection(g_Channel_Info[nIndex].hConn);
if (sRet != S_OK)
{
MessageBox("Unable to stop tx connection");
return;
}
fclose(g_Channel_Info[nIndex].pFileMedia);
g_Channel_Info[nIndex].pFileMedia = NULL;
}
else if (g_Channel_Info[nIndex].nTxConn == 0)
{
SCODE sRet = DataBroker_StartTxConnection(g_Channel_Info[nIndex].hConn);
if (sRet != S_OK)
{
MessageBox("Unable to start tx connection");
return;
}
g_Channel_Info[nIndex].nTxConn = 1;
g_Channel_Info[nIndex].eTalkState = eTalkEstablishing;
}
CheckUI();
}
LRESULT CMP_APDlg::OnDeleteDataBrokerConn(WPARAM wParam, LPARAM lParam)
{
int index = wParam;
Connect_Channel(index);
return 0;
}
void CMP_APDlg::TalkOneChannel(int nIndex)
{
EnterCriticalSection(&m_CS);
if (g_Channel_Info[nIndex].nTxConn == 0)
{
g_Channel_Info[nIndex].nTxConn = 2;
g_Channel_Info[nIndex].eTalkState = eTalkEstablishing;
m_nTalkChNum++;
DataBroker_StartTxConnection(g_Channel_Info[nIndex].hConn);
}
else if (g_Channel_Info[nIndex].nTxConn == 2)
{
g_Channel_Info[nIndex].nTxConn = 0;
g_Channel_Info[nIndex].eTalkState = eTalkStopping;
m_nTalkChNum--;
// stop talk
DataBroker_StopTxConnection(g_Channel_Info[nIndex].hConn);
}
LeaveCriticalSection(&m_CS);
CheckUI();
}
SCODE __stdcall CMP_APDlg::StaticAudioCapturePacketCB(DWORD dwContent, TMediaDataPacketInfo *ptMediaPacket, DWORD dwDataTimePeriod)
{
CMP_APDlg *pCaller = (CMP_APDlg *) dwContent;
EnterCriticalSection(&pCaller->m_CS);
for (int nCnt = 0; nCnt < g_nMaxChannel; nCnt++)
{
if (g_Channel_Info[nCnt].hConn && g_Channel_Info[nCnt].nTxConn == 2 &&
g_Channel_Info[nCnt].eTalkState == eTalkTalking)
{
DataBroker_InputTxPacket(g_Channel_Info[nCnt].hConn, ptMediaPacket, dwDataTimePeriod);
}
}
LeaveCriticalSection(&pCaller->m_CS);
return S_OK;
}
SCODE __stdcall CMP_APDlg::StaticAudioCaptureStatusCB(DWORD dwContent, DWORD dwStatus, DWORD dwParam1, DWORD dwParam2)
{
// do nothing here
return S_OK;
}
int CMP_APDlg::InitialAudioCapture()
{
EnterCriticalSection(&m_CS);
TPMACAPCHANNELOPTION tChOpt;
memset(&tChOpt, 0, sizeof(tChOpt));
tChOpt.dwAudioCodec = mctG729A;
tChOpt.dwAudioChannelNum = 1;
tChOpt.dwAudioFramesPerPacket = 5;
tChOpt.dwAudioSampleFreq = 8000;
tChOpt.dwAudioSizePerFrame = 160;
tChOpt.dwBitsPerSample = 16;
tChOpt.dwPacketContext = (DWORD) this;
tChOpt.dwStatusContext = (DWORD) this;
tChOpt.pfPacketCB = StaticAudioCapturePacketCB;
tChOpt.pfStatusCB = StaticAudioCaptureStatusCB;
SCODE scRet = PacketMaker_CreateAudioCaptureChannel(m_hPacketMaker, &m_hAudioCapCh, &tChOpt);
LeaveCriticalSection(&m_CS);
if (scRet != S_OK)
return -1;
return 0;
}
void CMP_APDlg::ReleaseAudioCapture()
{
EnterCriticalSection(&m_CS);
if (m_hAudioCapCh)
PacketMaker_DeleteAudioCaptureChannel(&m_hAudioCapCh);
if (m_hPacketMaker)
PacketMaker_Release(&m_hPacketMaker);
LeaveCriticalSection(&m_CS);
}
LRESULT CMP_APDlg::OnShowError(WPARAM wParam, LPARAM lParam)
{
char *pszMsg, *pszTitle, *pszExtra;
BOOL bFormat = FALSE;
int nIndex = LOWORD(lParam);
int nExtra = HIWORD(lParam);
if (wParam == eOnAudioDisabled)
{
pszTitle = "Warning";
if ((g_Channel_Info[nIndex].dwPrivilege & ePrivilegeTALK) == 0 ||
g_Channel_Info[nIndex].iAudioMode == 4)
{
// none is enable, just close th
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -