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

📄 avimanager.cpp

📁 MPEG4网络视频服务器客户端图象监控软件
💻 CPP
字号:
// AviManager.cpp: implementation of the CAviManager class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "AviManager.h"

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

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
//---------------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------------
IMPLEMENT_DYNCREATE(CAviManager, CObject);
//---------------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------------
VOID CAviManager::FileTimeProc(
UINT uID, 
UINT uMsg, 
DWORD dwUser, 
DWORD dw1, 
DWORD dw2
)
{
	CAviManager* pManager = (CAviManager*)dwUser;

	pManager->bNewFile = 1;
}
//---------------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------------
CAviManager::CAviManager(
)
{
	AVIFileInit();
	InitParam();
}
//---------------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------------
CAviManager::~CAviManager(
)
{
	ClearParam();
	AVIFileExit();

}
//---------------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------------
void CAviManager::InitParam(
)
{
	pfile	= NULL;
	ps		= NULL;
	lFrame	= 0;

	bNewFile = 0;

	uiTimeID		= 0;
	m_strDataPath	= "c:\\data";

	m_bFirstFrame	= TRUE;
}
//---------------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------------
void CAviManager::ClearParam(
)
{
	lFrame	= 0;
	m_bFirstFrame	= TRUE;
	
	if(ps)
	{
		AVIStreamClose(ps);
		ps = NULL;
	}

	if(pfile)
	{
		AVIFileRelease(pfile);
		pfile = NULL;
		CoUninitialize();
	}

}
//---------------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------------
void CAviManager::SetDataPath(
CString strPath
)
{
	m_strDataPath = strPath;
	CreateDirectory(m_strDataPath, NULL);
}
//---------------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------------
void CAviManager::SetSaveTime(
int nTime
)
{
	if(uiTimeID)
	{
		timeKillEvent(uiTimeID);
	}
	uiTimeID = timeSetEvent(1000*60*nTime, 50, FileTimeProc, (DWORD)this, TIME_PERIODIC);
	if(uiTimeID == 0)
	{
		TRACE("Create Time Error!\n");
	}
}
//---------------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------------
void CAviManager::CreateFile(
AVISTREAMINFO *psi, 
BITMAPINFOHEADER *pbi,
int nCameraID,
int nFrameRate
)
{
CString strTemp; 
CTime	time; 
CString strPath;
CString strFileName;
CString	strSubDir;

	memcpy(&m_bi, pbi, sizeof(BITMAPINFOHEADER));
	memcpy(&m_si, psi, sizeof(AVISTREAMINFO));
	m_si.dwRate = nFrameRate;

	time		= CTime::GetCurrentTime();
	strTemp		= time.Format("%Y%m%d_%H%M");
	strSubDir	= time.Format("%Y%m%d");

	m_nCameraID = nCameraID;
	strFileName.Format("%s_%03d.AVI", strTemp, m_nCameraID);
	
	strPath = m_strDataPath + "\\" + strSubDir;
	CreateDirectory(strPath, NULL);

	strPath = strPath + "\\" + strFileName;

	CoInitialize(NULL);

	LONG hr = AVIFileOpen(&pfile, strPath, OF_READWRITE|OF_CREATE|OF_SHARE_EXCLUSIVE, NULL);
	if(hr)//REGDB_E_CLASSNOTREG
	{
		TRACE("avifile create Error\n");
	}

	if(AVIFileCreateStream(pfile, &ps, &m_si))
	{
		TRACE("stream create Error\n");
	}

	LONG lSize = sizeof(BITMAPINFOHEADER);
	hr = AVIStreamSetFormat(ps, 0, &m_bi, lSize);
	if(hr)
	{
		TRACE("Create New File Error!\n");
	}

}
//---------------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------------
BOOL CAviManager::ReCreateFile(
DWORD IsKeyFrame
)
{
CString strTemp; 
CTime	time; 
CString strPath;
CString strFileName;
CString	strSubDir;

	if(!IsKeyFrame)
	{
		bNewFile = 1;
		return FALSE;
	}

	time = CTime::GetCurrentTime();
	strTemp		= time.Format("%Y%m%d_%H%M");
	strSubDir	= time.Format("%Y%m%d");

	strFileName.Format("%s_%03d.AVI", strTemp, m_nCameraID);

	strPath = m_strDataPath + "\\" + strSubDir;
	CreateDirectory(strPath, NULL);

	strPath = strPath + "\\" + strFileName;
	
	ClearParam();

	CoInitialize(NULL);
	LONG hr = AVIFileOpen(&pfile, strPath, OF_READWRITE|OF_CREATE|OF_SHARE_EXCLUSIVE, NULL);
	if(hr)//REGDB_E_CLASSNOTREG
	{
		TRACE("avifile create Error\n");
	}

	if(AVIFileCreateStream(pfile, &ps, &m_si))
	{
		TRACE("stream create Error\n");
	}

	LONG lSize = sizeof(BITMAPINFOHEADER);
	hr = AVIStreamSetFormat(ps, 0, &m_bi, lSize);
	if(hr)
	{
		TRACE("Create New File Error!\n");
	}

	bNewFile = 0;
	return TRUE;
}
//---------------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------------
void CAviManager::WriteData(
char* pData, 
DWORD IsKeyFrame, 
DWORD dwLength
)
{
	if(m_bFirstFrame)
	{
		if(IsKeyFrame)
		{
			m_bFirstFrame = FALSE;
		}
		else{
			return;
		}
	}

	if(bNewFile)
	{
		ReCreateFile(IsKeyFrame);
	}

	if(IsKeyFrame == TRUE)
	{
		IsKeyFrame = 0x10;
	}

	if(AVIStreamWrite(ps, lFrame, 1, pData, dwLength, IsKeyFrame, NULL, NULL))
	{
		TRACE("Write New File Error!\n");
	}
	lFrame ++;

}
//---------------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------------

⌨️ 快捷键说明

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