⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 montunit.cpp

📁 基于SAA7113的MPEG-4程序
💻 CPP
字号:
// MontUnit.cpp: implementation of the CMontUnit class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
//#include "MonClient.h"
#include "MontUnit.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMontUnit::CMontUnit()
{
	m_iMontID=0;

	for(int i=0;i<4;i++)
		m_IPArr[i]=0;
	m_iPort=0;

	m_pShowPicWnd = NULL;
	m_pShowAddrWnd = NULL;
	m_pShowRateWnd = NULL;
	m_pShowPicDC = NULL;

	m_fFrameRate = 0; 
	for(i=0;i<FRAMERATE_RANGE;i++)
		m_iFrameNumArr[i] = 0;
	m_iFrameSecond = 0;
	m_iFrameNumInLastSecond = 0;

	m_pPic = NULL;
}

CMontUnit::~CMontUnit()
{
	if(m_pShowPicDC)
	{
		m_pShowPicWnd->ReleaseDC(m_pShowPicDC);
		m_pShowPicDC = NULL;
	}

	if(m_pPic)
	{
		delete m_pPic;
		m_pPic = NULL;
	}

	CTitleFile::releaseInstance();
}

//初始化显示单元
void CMontUnit::InitUnit(UINT nID,CWnd* pPicWnd,CWnd* pAddrWnd,CWnd* pRateWnd)
{
	int i,j;

	m_iMontID = nID;
	m_pShowPicWnd = pPicWnd;
	m_pShowAddrWnd = pAddrWnd;
	m_pShowRateWnd = pRateWnd;

	//初始化JPG显示对象
	m_pPic  = new CPicture();

	//从配置文件中初始化IP地址信息
	CString strKey,strIP,strPort;
	strKey.Format("终端%d",m_iMontID);
	CTitleFile::getInstance()->InitFile("init.txt");
	CTitleFile::getInstance()->GetValue(strKey,INITFILE_IPNAME,strIP);
	CTitleFile::getInstance()->GetValue(strKey,INITFILE_PORTNAME,strPort);
	if(strIP.IsEmpty() || strPort.IsEmpty())
		goto RET;

	//把字符串IP/PORT转换到IP/PORT变量中
	int iPosArr[5] ;
	iPosArr[0]=-1;
	iPosArr[4] = strIP.GetLength();
	j=0;
	for(i=0;i<strIP.GetLength();i++)
	{
		if(strIP[i]=='.')
		{
			iPosArr[j+1]=i;
			j++;
		}
	}
	for(i=0;i<4;i++)
	{
		CString strtt = strIP.Mid(iPosArr[i]+1,iPosArr[i+1]-iPosArr[i]-1);
		m_IPArr[i] = atoi(strtt.GetBuffer(1));
		strtt.ReleaseBuffer(-1);			
	}

	m_iPort = atoi(strPort.GetBuffer(1));
	strPort.ReleaseBuffer(-1);

RET:

	SetAddrData(m_IPArr,m_iPort);
	
}

//接收并显示IP地址
void CMontUnit::SetAddrData(BYTE* pIPArr,UINT iport)
{
	if(pIPArr)
	{
		for(int i=0;i<4;i++)
			m_IPArr[i]=*(pIPArr+i);
	}

	m_iPort = iport;

	//把地址写入到配置文件中	
	CString strKey,strIP,strPort;
	strKey.Format("终端%d",m_iMontID);
	strIP.Format("%d.%d.%d.%d",m_IPArr[0],m_IPArr[1],m_IPArr[2],m_IPArr[3]);
	strPort.Format("%d",m_iPort);
	CTitleFile::getInstance()->InitFile("init.txt");
	CTitleFile::getInstance()->SetValue(strKey,INITFILE_IPNAME,strIP);
	CTitleFile::getInstance()->SetValue(strKey,INITFILE_PORTNAME,strPort);

	//显示地址
	if(m_pShowAddrWnd)
	{
		CString str;
		str.Format("终端地址:%d.%d.%d.%d:%d",m_IPArr[0],
			m_IPArr[1],m_IPArr[2],m_IPArr[3],m_iPort);
		
		m_pShowAddrWnd->SetWindowText(str);
	}
}

//获得IP地址
void CMontUnit::GetAddrData(BYTE* pIPArr,UINT& iport)
{
	if(pIPArr)
	{
		for(int i=0;i<4;i++)
			*(pIPArr+i)=m_IPArr[i];
	}

	iport = m_iPort;
}


//显示帧速率(该函数每1秒调用一次)
void CMontUnit::ShowFrameRate()
{
	//更新显示帧速率
	for(int i=FRAMERATE_RANGE-1;i>=1;i--)
		m_iFrameNumArr[i] = m_iFrameNumArr[i-1];
	m_iFrameNumArr[0] = m_iFrameNumInLastSecond;

	
	int iSum = 0;
	for(i=0;i<FRAMERATE_RANGE;i++)
	{
		iSum += m_iFrameNumArr[i];
	}
	
	m_fFrameRate = (float)iSum / FRAMERATE_RANGE;

	//显示帧速率		
	if(m_pShowRateWnd)
	{
		CString str;
		str.Format("编码帧率:%d帧/秒",m_iFrameNumInLastSecond);
		
		m_pShowRateWnd->SetWindowText(str);
	}

	m_iFrameNumInLastSecond = 0;
}

//接收JPG数据并显示
void CMontUnit::RcvPicData(BYTE* pBuf,int ilen)
{
	//增加帧速率计数器
	m_iFrameNumInLastSecond++;

	//显示图像
	if(m_pShowPicWnd)
	{
		//得到画图的DC
		if(m_pShowPicDC==NULL)
			m_pShowPicDC = m_pShowPicWnd->GetDC();

		//画图
		if(m_pShowPicDC)
		{
			CRect rect;
			m_pShowPicWnd->GetWindowRect(&rect);
			m_pShowPicWnd->ScreenToClient(&rect);

			m_pPic->LoadPictureData(pBuf,ilen);	
			
			m_pPic->Render(m_pShowPicDC,rect);

			m_pPic->UnloadPicture();

		}
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -