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

📄 creportfile.cpp

📁 Xvid Quants parser(XvidQP)用来分析编码Xvid AVI文件中每侦的量化(quantization)值。分析结束后
💻 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;
}

⌨️ 快捷键说明

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