📄 avimanager.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 + -