【VC开源代码栏目提醒】:网学会员VC开源代码为您提供CReportFile.cpp参考,解决您在CReportFile.cpp学习中工作中的难题,参考学习。
// CReportFile.cpp: implementation of the CReportFile class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "XvidQuantsParser.h"
#include "CReportFile.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CReportFile::CReportFile()
{
//data = NULL;
}
CReportFile::~CReportFile()
{
//if (data != NULL) delete[] data;
}
//-----------------------------------------------------------------------------------------------
bool CReportFile::Save(CString filepath, CXvid &xvid, int start, int stop)
{
CFile rfile;
//File header
fileHdr.rtyp = 0x08;
fileHdr.rmajor = 1;
fileHdr.rminor = 1;
//Info header
infoHdr.fps = xvid.GetRate();
infoHdr.width = xvid.GetWidth();
infoHdr.height = xvid.GetHeight();
infoHdr.nframes = stop-start;
infoHdr.nmax = xvid.GetMaxQuant();
infoHdr.nmin = xvid.GetMinQuant();
infoHdr.navg = xvid.GetAvgQuants();
infoHdr.icount = xvid.GetIFrameCount();
infoHdr.iavg = xvid.GetIAvgQuants();
infoHdr.pcount = xvid.GetPFrameCount();
infoHdr.pavg = xvid.GetPAvgQuants();
infoHdr.nfsmax = xvid.GetMaxFrameSize();
infoHdr.nfsmin = xvid.GetMinFrameSize();
infoHdr.ifsmax = xvid.GetIMaxFrameSize();
infoHdr.ifsmin = xvid.GetIMinFrameSize();
infoHdr.pfsmax = xvid.GetPMaxFrameSize();
infoHdr.pfsmin = xvid.GetPMinFrameSize();
//save file...
if (!rfile.Open(filepath, CFile::modeCreate|CFile::modeWrite))
{
return false;
}
rfile.Write(&fileHdr, sizeof(REPORTFILEHEADER));
rfile.Write(&infoHdr, sizeof(REPORTINFOHEADER));
rfile.Write(xvid.GetQuantsArray(), sizeof(CXvid::QUANTS)*infoHdr.nframes);
//cleanup
rfile.Close();
return true;
}
//-----------------------------------------------------------------------------------------------
bool CReportFile::Load(CString filepath, CXvid &xvid)
{
CFile rfile;
CXvid::QUANTS* databuf=NULL;
//load file...
if (!rfile.Open(filepath, CFile::modeRead))
{
return false;
}
//Check file header
rfile.Read(&fileHdr, sizeof(REPORTFILEHEADER));
if (fileHdr.rtyp != 0x08)
{
return false;
}
if (fileHdr.rminor != 1)
{
AfxMessageBox("Wrong report file version!");
return false;
}
//load info header
rfile.Read(&infoHdr, sizeof(REPORTINFOHEADER));
xvid.SetRate(infoHdr.fps);
xvid.SetWidth(infoHdr.width);
xvid.SetHeight(infoHdr.height);
xvid.SetFrameCount(infoHdr.nframes);
xvid.SetMaxQuant(infoHdr.nmax);
xvid.SetMinQuant(infoHdr.nmin);
xvid.SetAvgQuants(infoHdr.navg);
xvid.SetIFrameCount(infoHdr.icount);
xvid.SetIAvgQuants(infoHdr.iavg);
xvid.SetPFrameCount(infoHdr.pcount);
xvid.SetPAvgQuants(infoHdr.pavg);
xvid.SetMaxFrameSize(infoHdr.nfsmax);
xvid.SetMinFrameSize(infoHdr.nfsmin);
xvid.SetIMaxFrameSize(infoHdr.ifsmax);
xvid.SetIMinFrameSize(infoHdr.ifsmin);
xvid.SetPMaxFrameSize(infoHdr.pfsmax);
xvid.SetPMinFrameSize(infoHdr.pfsmin);
//load quants data
databuf = new CXvid::QUANTS[infoHdr.nframes];
rfile.Read(databuf, sizeof(CXvid::QUANTS)*infoHdr.nframes);
xvid.SetQuantsArray(databuf, infoHdr.nframes);
//cleanup
rfile.Close();
xvid.SetOpened(true);
xvid.SetAnalysed(true);
return true;
}
上一篇:
A班级设置.frm
下一篇:
多年来只想说一句,我不怪你