📄 mp_mobilemovecamdlg.cpp
字号:
// MP_MobileMoveCamDlg.cpp : implementation file
//
#include "stdafx.h"
#include "MP_MobileMoveCam.h"
#include "MP_MobileMoveCamDlg.h"
#include "Settings.h"
#include "DataBroker.h"
#include "AvSynchronizer.h"
#include "ServerUtl.h"
#include "SrvDepResource.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#define WM_UPDATE_CTRLSTATE (WM_USER + 3)
SCODE DataBrokerStatusCallBack(DWORD dwContext, TDataBrokerStatusType tStatusType, PVOID pvParam1, PVOID pvParam2)
{
CMP_MobileMoveCamDlg *pDlg = (CMP_MobileMoveCamDlg*)dwContext;
switch (tStatusType)
{
case eOnConnectionInfo:
pDlg->m_tChannelInfo.chStatus = channelConnected;
PTDataBrokerConnInfo pConnInfo;
pConnInfo=(PTDataBrokerConnInfo) pvParam1;
pDlg->m_tChannelInfo.nFrames = 0;
if (pConnInfo->dwMediaType == (emtAudio|emtVideo))
{
pDlg->m_tChannelInfo.dwMediaType = AVSYNCHRONIZER_MEDIATYPE_AUDIO_VIDEO;
TRACE(_T("dwMediaType = AUDIO_VIDEO\n"));
}
else if (pConnInfo->dwMediaType == emtAudio)
{
pDlg->m_tChannelInfo.dwMediaType = AVSYNCHRONIZER_MEDIATYPE_AUDIO_ONLY;
TRACE(_T("dwMediaType = AUDIO_ONLY\n"));
}
else
{
pDlg->m_tChannelInfo.dwMediaType = AVSYNCHRONIZER_MEDIATYPE_VIDEO_ONLY;
TRACE(_T("dwMediaType = VIDEO_ONLY\n"));
}
TUPDATECHANNELOPTION tUpdateChOpt;
tUpdateChOpt.dwFlags = UPCH_MEDIATYPE;
tUpdateChOpt.tMediaType = (EMEDIATYPE)pDlg->m_tChannelInfo.dwMediaType;
AvSynchronizer_UpdateChannelSettings(pDlg->m_tChannelInfo.hChannel, tUpdateChOpt);
pDlg->PostMessage(WM_UPDATE_CTRLSTATE, TRUE, 0);
break;
case eOnAuthFailed:
TRACE(_T("eOnAuthFailed\n"));
break;
case eOnStartMediaChannel:
TRACE(_T("eOnStartMediaChannel\n"));
break;
case eOnChannelClosed:
TRACE(_T("eOnChannelClosed\n"));
break;
case eOnTimeout:
if ((int) pvParam1 == eAudioChannel)
TRACE(_T("Timeout for audio\n"));
else
TRACE(_T("Timeout for video\n"));
return S_OK;
//break;
case eOnProtocolChanged:
TRACE(_T("eOnProtocolChanged\n"));
::MessageBox (pDlg->m_hWnd, _T("Protocol change\n"), _T(""), MB_OK);
break;
case eOnPacketLoss:
TRACE(_T("eOnPacketLoss ...\n"));
break;
case eOnDiDo:
TRACE(_T("eOnDiDo\n"));
break;
case eOnLocationChanged:
TRACE(_T("eOnLocationChanged ...\n"));
break;
case eOnInputInfo:
TRACE(_T("eOnInputInfo\n"));
break;
case eOnOtherError:
TRACE(_T("eOnOtherError %x\n"), pvParam1);
break;
case eOnVideoSignalChange:
TRACE(_T("eOnVideoSignalChange\n"));
break;
case eOnStopped:
TRACE(_T("eOnStopped\n"));
//if (!pDlg->m_bUserStop)
//{ // disconnected abnormally, reconnecting
// pDlg->m_tChannelInfo.dwReconnCnt++;
//}
pDlg->m_tChannelInfo.chStatus = channelStopped;
break;
// below are for 4000/5000/6000 servers
case eOnGetPrivilege:
TRACE(_T("eOnGetPrivilege\n"));
break;
case eOnAudioMode:
TRACE(_T("eOnAudioMode\n"));
break;
case eOnAudioDisabled:
TRACE(_T("eOnAudioDisabled\n"));
break;
case eOnChangeMediaType:
// post to show error message
TRACE(_T("eOnChangeMediaType\n"));
break;
case eOnServiceUnavailable:
TRACE(_T("eOnServiceUnavailable\n"));
break;
default:
break;
}
return S_OK;
}
SCODE DataBrokerAVCallBack(DWORD dwContext,TMediaDataPacketInfo *pMediaDataPacket)
{
CMP_MobileMoveCamDlg *pDlg = (CMP_MobileMoveCamDlg*)dwContext;
SCODE scRet = AvSynchronizer_InputEncodedMediaFrame(pDlg->m_tChannelInfo.hChannel, pMediaDataPacket);
if (AVSYNCHRONIZER_E_QUEUE_FULL == scRet)
{
TRACE(_T("FRAME_NOT_HANDLED\n"));
return DATABROKER_S_FRAME_NOT_HANDLED;
}
return S_OK;
}
SCODE AvSyhchronizerStatusCallBack(DWORD dwContext, DWORD dwStatusCode, DWORD dwParam1, DWORD dwParam2)
{
return S_OK;
}
SCODE AvSyhchronizerDisplayCallBack(DWORD dwContext, TDISPLAYINFO* ptDisplayInfo)
{
CMP_MobileMoveCamDlg *pDlg = (CMP_MobileMoveCamDlg*)dwContext;
HDC hDC = ptDisplayInfo->hDC;
struct tm * p = (struct tm *)ptDisplayInfo->DrawTime;
TCHAR chTime[128];
SetBkMode(hDC,TRANSPARENT);
// show remote time
SetTextColor(hDC,RGB(0,255,0));
_stprintf(chTime,_T("%d/%02ld/%02ld %02ld:%02ld:%02ld"),
p->tm_year + 1900, p->tm_mon + 1, p->tm_mday,
p->tm_hour,p->tm_min,p->tm_sec);
SIZE Size;
GetTextExtentPoint32(hDC, chTime, wcslen(chTime), &Size);
RECT r;
r.top = ptDisplayInfo->ptOrigin.y;
r.left = ptDisplayInfo->dwWidth - Size.cx - 5;
r.bottom = ptDisplayInfo->dwHeight;
r.right = ptDisplayInfo->dwWidth;
DrawText(hDC, chTime, wcslen(chTime), &r, DT_RIGHT);
return S_OK;
}
CMP_MobileMoveCamDlg::CMP_MobileMoveCamDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMP_MobileMoveCamDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_hDataBroker = NULL;
m_hAvSync = NULL;
m_hServerDev = NULL;
m_hServerUtl = NULL;
}
CMP_MobileMoveCamDlg::~CMP_MobileMoveCamDlg()
{
if (m_tChannelInfo.hDataConn)
DataBroker_DeleteConnection(m_hDataBroker,&m_tChannelInfo.hDataConn);
if (m_hDataBroker)
DataBroker_Release(&m_hDataBroker);
if (m_tChannelInfo.hChannel)
AvSynchronizer_DeleteChannel(m_hAvSync, &m_tChannelInfo.hChannel);
if (m_hAvSync)
AvSynchronizer_Release(&m_hAvSync);
if (m_hServerDev)
ServerUtl_DeleteDevice(m_hServerDev);
if (m_hServerUtl)
ServerUtl_Release(&m_hServerUtl);
}
void CMP_MobileMoveCamDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CMP_MobileMoveCamDlg, CDialog)
#if defined(_DEVICE_RESOLUTION_AWARE) && !defined(WIN32_PLATFORM_WFSP)
ON_WM_SIZE()
#endif
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_BUTTON6, &CMP_MobileMoveCamDlg::OnBnClickedSettings)
ON_BN_CLICKED(IDC_BUTTON_CONNECT, &CMP_MobileMoveCamDlg::OnButtonConnect)
ON_BN_CLICKED(IDC_BUTTON_LEFT, OnButtonLeft)
ON_BN_CLICKED(IDC_BUTTON_DOWN, OnButtonDown)
ON_BN_CLICKED(IDC_BUTTON_HOME, OnButtonHome)
ON_BN_CLICKED(IDC_BUTTON_UP, OnButtonUp)
ON_BN_CLICKED(IDC_BUTTON_RIGHT, OnButtonRight)
ON_MESSAGE(WM_UPDATE_CTRLSTATE, OnUpdateCtrlState)
END_MESSAGE_MAP()
// CMP_MobileMoveCamDlg message handlers
void CMP_MobileMoveCamDlg::ReadParameters()
{
_tcscpy(m_tChannelInfo.szHostIP, _T("172.16.7.36"));
m_tChannelInfo.dwHTTPPort = 80;
m_tChannelInfo.dwMediaType = 3;
_tcscpy(m_tChannelInfo.szUserName, _T("root"));
_tcscpy(m_tChannelInfo.szPassword, _T(""));
_tcscpy(m_tChannelInfo.szServer_Type, _T("auto"));
m_tChannelInfo.dwProtocol = 3;
}
BOOL CMP_MobileMoveCamDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
ReadParameters();
CenterWindow(GetDesktopWindow()); // center to the hpc screen
// TODO: Add extra initialization here
SetDlgItemText (IDC_EDIT_TYPE, _T("IP21x1-VVTK"));
SetDlgItemText (IDC_EDIT_ADDRESS, _T("192.168.1.66"));
SetDlgItemText (IDC_EDIT_PORT, _T("80"));
GetDlgItem(IDC_STATIC_DISPLAY)->MoveWindow(0, 0, 460, 420);//240, 180); //
TCHAR szBuf[256];
SCODE sRet = DataBroker_Initial ( &m_hDataBroker, 1,
DataBrokerStatusCallBack,
DataBrokerAVCallBack,
mctJPEG | mctH263 | mctMP4V | mctG7221 | mctG729A | mctAAC ,
0?0:eOptConnUseIE,
DATABROKER_VERSION);
if (IS_FAIL(sRet))
{
_stprintf(szBuf, _T("DataBroker_Initial failed with error %X"), sRet);
MessageBox(szBuf, _T("Error"), MB_OK);
return FALSE;
}
sRet = DataBroker_CreateConnection(m_hDataBroker, &m_tChannelInfo.hDataConn);
if (IS_FAIL(sRet))
{
_stprintf(szBuf, _T("DataBroker_CreateConnection failed with error %X"), sRet);
MessageBox(szBuf, _T("Error"), MB_OK);
return FALSE;
}
sRet = AvSynchronizer_InitialEx(&m_hAvSync, AvSyhchronizerStatusCallBack,
AvSyhchronizerDisplayCallBack,
//NULL,
this->m_hWnd, AUDIOOUT_FOCUS_NORMAL, 0, AVSYNCHRONIZER_VERSION,
USE_GDI_ONLY | FORCE_GDI | BETTER_GDI_STRETCH, //| AV_DONT_SYNC,// | CAPTION_ON_GRAPH,
RGB(82, 130, 148));
if (IS_FAIL(sRet))
{
_stprintf(szBuf, _T("AvSynchronizer_Initial failed with error %X"), sRet);
MessageBox(szBuf, _T("Error"), MB_OK);
return FALSE;
}
CreateAvSyncChannel();
sRet = ServerUtl_Initial(&m_hServerUtl, SERVERUTL_VERSION);
if (sRet != S_OK)
{
_stprintf(szBuf, _T("ServerUtl_Initial failed with error %X"), sRet);
MessageBox(szBuf, _T("Error"), MB_OK);
return FALSE;
}
return TRUE; // return TRUE unless you set the focus to a control
}
LRESULT CMP_MobileMoveCamDlg::OnUpdateCtrlState(WPARAM wParam, LPARAM lParam)
{
if (wParam == TRUE)
{
// set serverutl property here
if (m_hServerDev)
ServerUtl_DeleteDevice(m_hServerDev);
m_hServerDev = NULL;
TSrvDepResource_ServerInfo srvInfo;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -