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

📄 mode.cpp

📁 au1200 linux2.6.11 硬件解码mae驱动和maiplayer播放器源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	return m_skipNextFrame;}Void CRCMode::updateRCModel (UInt uiBitsTotalCurr, UInt uiBitsHeadCurr){#ifdef DUAL_MODE	UInt n_windowSize;	m_Rc = uiBitsTotalCurr;		// total bits used for the current frame 	m_B += m_Rc - m_Rp;			// update buffer fullness	m_Rr -= m_Rc;				// update the remaining bits	printf("%d  %d  %d  %d\n", uiBitsTotalCurr, m_Rc - m_Rp, m_B, m_Rr);	//if (m_Nr != 1 && m_Rr <= 0.0) 	//	error("out of bits in rate control");	// check if there is any bits left, except the last frame	m_S = m_Rc;					// update the previous bits	m_Hc = uiBitsHeadCurr;		// update the current header and motion bits	m_Hp = m_Hc;				// update the previous header and motion bits	m_Qp = m_Qc;				// update the previous qunatization level	m_Nr--;						// update the frame counter	m_Nc++;	Int i;	for (i = RC_MAX_SLIDING_WINDOW - 1; i > 0; i--) {// update the history		m_rgQp[i] = m_rgQp[i - 1];		m_rgRp[i] = m_rgRp[i - 1];	}	m_rgQp[0] = m_Qc;	m_rgRp[0] = (m_Rc - m_Hc) / m_Ec;	n_windowSize = (m_Ep > m_Ec) ? (UInt) (m_Ec / m_Ep * 20) : (UInt) (m_Ep / m_Ec * 20);	n_windowSize = max (n_windowSize, 1);	n_windowSize = min (n_windowSize, m_Nc);	for (i = 0; i < RC_MAX_SLIDING_WINDOW; i++) {		m_rgRejected[i] = FALSE;	}	// initial RD model estimator	RCModelEstimator (n_windowSize);	// remove outlier		Double error[20], std = 0.0, threshold;	for (i = 0; i < (Int) n_windowSize; i++) {		error[i] = m_X1 / m_rgQp[i] + m_X2 / (m_rgQp[i] * m_rgQp[i]) - m_rgRp[i];		std += error[i] * error[i];		}	threshold = (n_windowSize == 2) ? 0 : sqrt (std / n_windowSize);	for (i = 0; i < (Int) n_windowSize; i++) {		if (fabs(error[i]) > threshold)			m_rgRejected[i] = TRUE;	}    // always include the last data point	m_rgRejected[0] = FALSE;	// second RD model estimator	RCModelEstimator (n_windowSize);#endif}Void CRCMode::RCModelEstimator (UInt n_windowSize){#ifdef DUAL_MODE	UInt n_realSize = n_windowSize;	UInt i;	for (i = 0; i < n_windowSize; i++) {// find the number of samples which are not rejected		if (m_rgRejected[i])			n_realSize--;	}	// default RD model estimation results	Bool estimateX2 = FALSE;	m_X1 = m_X2 = 0.0;	Double oneSampleQ;	for (i = 0; i < n_windowSize; i++)	{		if (!m_rgRejected[i])			oneSampleQ = m_rgQp[i];	}	for (i = 0; i < n_windowSize; i++)	{// if all non-rejected Q are the same, take 1st order model		if ((m_rgQp[i] != oneSampleQ) && !m_rgRejected[i])			estimateX2 = TRUE;		if (!m_rgRejected[i])			m_X1 += (m_rgQp[i] * m_rgRp[i]) / n_realSize;	}	// take 2nd order model to estimate X1 and X2	if ((n_realSize >= 1) && estimateX2) {		Double a00 = 0.0, a01 = 0.0, a10 = 0.0, a11 = 0.0, b0 = 0.0, b1 = 0.0;		for (UInt i = 0; i < n_windowSize; i++) {			if (!m_rgRejected[i]) {				a00 = a00 + 1.0;				a01 += 1.0 / m_rgQp[i];				a10 = a01;				a11 += 1.0 / (m_rgQp[i] * m_rgQp[i]);				b0 += m_rgQp[i] * m_rgRp[i];				b1 += m_rgRp[i];			}		}		// solve the equation of AX = B		CMatrix2x2D A = CMatrix2x2D (a00, a01, a10, a11);		CMatrix2x2D AInv = A.inverse ();		CVector2D B = CVector2D (b0, b1);		CVector2D solution = AInv.apply (B);		if (solution.x != 0.0) {			m_X1 = solution.x;			m_X2 = solution.y;		}		}#endif}CStatistics::CStatistics ( Int iAuxCompCount): m_iAuxCompCount(iAuxCompCount){/*  assert( iAuxCompCount>=0 );  dSNRA = new double [iAuxCompCount];  reset ();*/}CStatistics::~CStatistics(){//  delete [] dSNRA;}								Void CStatistics::print (Bool bVOPPrint){/*	(Void) total ();	if (bVOPPrint)		cout << "\t" << "VOP overhead:" << "\t\t" << nBitsHead << "\n";	cout << "\t" << "Y:" << "\t\t\t" << nBitsY << "\n";	cout << "\t" << "Cr:" << "\t\t\t" << nBitsCr << "\n";	cout << "\t" << "Cb:" << "\t\t\t" << nBitsCb << "\n";	cout << "\t" << "A:" << "\t\t\t" << nBitsA << "\n";//	cout << "\t" << "1st Shape Code:" << "\t\t" << nBits1stShpCode << "\n";	cout << "\t" << "CBPY:" << "\t\t\t" << nBitsCBPY << "\n";	cout << "\t" << "MCBPC:" << "\t\t\t" << nBitsMCBPC << "\n";// GMC	cout << "\t" << "MCSEL:" << "\t\t\t" << nBitsMCSEL << "\n";// ~GMC	cout << "\t" << "DQUANT:" << "\t\t\t" << nBitsDQUANT << "\n";	cout << "\t" << "nBitsMODB:" << "\t\t" << nBitsMODB << "\n";	cout << "\t" << "nBitsCBPB:" << "\t\t" << nBitsCBPB << "\n";	cout << "\t" << "nBitsMBTYPE:" << "\t\t" << nBitsMBTYPE << "\n";	cout << "\t" << "nBitsIntraPred:" << "\t\t" << nBitsIntraPred << "\n";	cout << "\t" << "nBitsNoDCT:" << "\t\t" << nBitsNoDCT << "\n";		cout << "\t" << "nBitsCODA:" << "\t\t" << nBitsCODA << "\n";	cout << "\t" << "nBitsCBPA:" << "\t\t" << nBitsCBPA << "\n";	cout << "\t" << "nBitsMODBA:" << "\t\t" << nBitsMODBA << "\n";	cout << "\t" << "nBitsCBPBA:" << "\t\t" << nBitsCBPBA << "\n";	cout << "\t" << "nBitsInterlace:" << "\t\t" << nBitsInterlace << "\n";	cout << "\t" << "nBitsSTUFFING:" << "\t\t" << nBitsStuffing << "\n";	cout << "\t" << "# of Skipped MB:" << "\t" << nSkipMB << "\n";// GMC	cout << "\t" << "# of GMC MB:" << "\t\t" << nMCSELMB << "\n";// ~GMC	cout << "\t" << "# of Inter MB:" << "\t\t" << nInterMB << "\n";	cout << "\t" << "# of Inter4V MB:" << "\t" << nInter4VMB << "\n";	cout << "\t" << "# of Intra MB:" << "\t\t" << nIntraMB << "\n";	cout << "\t" << "# of Direct MB:" << "\t\t" << nDirectMB << "\n";	cout << "\t" << "# of Forward MB:" << "\t" << nForwardMB << "\n";	cout << "\t" << "# of Backward MB:" << "\t" << nBackwardMB << "\n";	cout << "\t" << "# of Interpolate MB:" << "\t" << nInterpolateMB << "\n";	cout << "\t" << "# of Field Fwd MB:" << "\t" << nFieldForwardMB << "\n";	cout << "\t" << "# of Field Back MB:" << "\t" << nFieldBackwardMB << "\n";	cout << "\t" << "# of Field Ave MB:" << "\t" << nFieldInterpolateMB << "\n";	cout << "\t" << "# of Field Direct MB:" << "\t" << nFieldDirectMB << "\n";	cout << "\t" << "# of Field DCT MBs:" << "\t" << nFieldDCTMB << "\n";	cout << "\t" << "Motion:" << "\t\t\t" << nBitsMV << "\n";	cout << "\t" << "Texture:" << "\t\t" << nBitsTexture << "\n";//	if (bVOPPrint)		cout << "\t" << "Shape:" << "\t\t\t" << nBitsShape << "\n";	cout << "\t" << "Total:" << "\t\t\t" << nBitsTotal << "\n";	cout << "\t" << "SNR Y:" << "\t\t\t" << dSNRY / nVOPs << " dB\n";	cout << "\t" << "SNR U:" << "\t\t\t" << dSNRU / nVOPs << " dB\n";	cout << "\t" << "SNR V:" << "\t\t\t" << dSNRV / nVOPs << " dB\n";  for(Int iAuxComp=0;iAuxComp<m_iAuxCompCount;iAuxComp++)  // MAC (SB) 26-Nov-99	  cout << "\t" << "SNR A[" << iAuxComp << "]:" << "\t\t" << dSNRA[iAuxComp] / nVOPs << " dB\n";	cout << "\n\t" << "average Qp:" << "\t\t" << (Double)nQp / nQMB << "\n\n";	cout.flush ();*/}Void CStatistics::operator += (const CStatistics& statSrc){/*	nBitsHead += statSrc.nBitsHead;	nBitsY += statSrc.nBitsY;	nBitsCr += statSrc.nBitsCr;	nBitsCb += statSrc.nBitsCb;	nBitsA += statSrc.nBitsA;//	nBits1stShpCode += statSrc.nBits1stShpCode;	nBitsCOD += statSrc.nBitsCOD;	nBitsCBPY += statSrc.nBitsCBPY;	nBitsMCBPC += statSrc.nBitsMCBPC;// GMC	nBitsMCSEL += statSrc.nBitsMCSEL;// ~GMC	nBitsDQUANT += statSrc.nBitsDQUANT;	nBitsMODB += statSrc.nBitsMODB;	nBitsCBPB += statSrc.nBitsCBPB;	nBitsMBTYPE += statSrc.nBitsMBTYPE;	nBitsIntraPred += statSrc.nBitsIntraPred;	nBitsNoDCT += statSrc.nBitsNoDCT;		nBitsCODA += statSrc.nBitsCODA;	nBitsCBPA += statSrc.nBitsCBPA;	nBitsMODBA += statSrc.nBitsMODBA;	nBitsCBPBA += statSrc.nBitsCBPBA;	nBitsStuffing += statSrc.nBitsStuffing;	nSkipMB += statSrc.nSkipMB;// GMC	nMCSELMB += statSrc.nMCSELMB;// ~GMC	nInterMB += statSrc.nInterMB;	nInter4VMB += statSrc.nInter4VMB;	nIntraMB += statSrc.nIntraMB;	nDirectMB += statSrc.nDirectMB;	nForwardMB += statSrc.nForwardMB;	nBackwardMB += statSrc.nBackwardMB;	nInterpolateMB += statSrc.nInterpolateMB;	nBitsInterlace += statSrc.nBitsInterlace;	nFieldForwardMB += statSrc.nFieldForwardMB;	nFieldBackwardMB += statSrc.nFieldBackwardMB;	nFieldInterpolateMB += statSrc.nFieldInterpolateMB;	nFieldDirectMB += statSrc.nFieldDirectMB;	nFieldDCTMB += statSrc.nFieldDCTMB;	nVOPs += statSrc.nVOPs;	nBitsMV += statSrc.nBitsMV;	nBitsTexture += statSrc.nBitsTexture;	nBitsShape += statSrc.nBitsShape;	nBitsTotal += statSrc.nBitsTotal;	dSNRY += statSrc.dSNRY;	dSNRU += statSrc.dSNRU;	dSNRV += statSrc.dSNRV;  for(Int iAuxComp=0;iAuxComp<m_iAuxCompCount;iAuxComp++) // MAC (SB) 26-Nov-99	  dSNRA[iAuxComp] += statSrc.dSNRA[iAuxComp];	nQMB += statSrc.nQMB;	nQp += statSrc.nQp;*/}Void CStatistics::reset (){/*	nBitsHead = 0;	nBitsY = 0;	nBitsCr = 0;	nBitsCb = 0;	nBitsA = 0;//	nBits1stShpCode = 0;	nBitsCOD = 0;	nBitsCBPY = 0;	nBitsMCBPC = 0;// GMC	nBitsMCSEL = 0;// ~GMC	nBitsDQUANT = 0;	nBitsMODB = 0;	nBitsCBPB = 0;	nBitsMBTYPE = 0;	nBitsIntraPred = 0;	nBitsNoDCT = 0;	nBitsCODA = 0;	nBitsCBPA = 0;	nBitsMODBA = 0;	nBitsCBPBA = 0;	nBitsStuffing = 0;	nSkipMB = 0;// GMC	nMCSELMB = 0;// ~GMC	nInterMB = 0;	nInter4VMB = 0;	nIntraMB = 0;	nDirectMB = 0;	nForwardMB = 0;	nBackwardMB = 0;	nInterpolateMB = 0;	nBitsInterlace = 0;	nFieldForwardMB = 0;	nFieldBackwardMB = 0;	nFieldInterpolateMB = 0;	nFieldDirectMB = 0;	nFieldDCTMB = 0;	nVOPs = 0;	nBitsMV = 0;	nBitsTexture = 0;	nBitsShape = 0;	nBitsTotal = 0;	dSNRY = 0;	dSNRU = 0;	dSNRV = 0;  for(Int iAuxComp=0;iAuxComp<m_iAuxCompCount;iAuxComp++) // MAC (SB) 26-Nov-99	  dSNRA[iAuxComp] = 0;	nQMB = 0;	nQp = 0;*/}CStatistics::CStatistics( const CStatistics& statSrc ){/*	nBitsHead = statSrc.nBitsHead;	nBitsY = statSrc.nBitsY;	nBitsCr = statSrc.nBitsCr;	nBitsCb = statSrc.nBitsCb;	nBitsA = statSrc.nBitsA;//	nBits1stShpCode = statSrc.nBits1stShpCode;	nBitsCOD = statSrc.nBitsCOD;	nBitsCBPY = statSrc.nBitsCBPY;	nBitsMCBPC = statSrc.nBitsMCBPC;// GMC	nBitsMCSEL = statSrc.nBitsMCSEL;// ~GMC	nBitsDQUANT = statSrc.nBitsDQUANT;	nBitsMODB = statSrc.nBitsMODB;	nBitsCBPB = statSrc.nBitsCBPB;	nBitsMBTYPE = statSrc.nBitsMBTYPE;	nBitsIntraPred = statSrc.nBitsIntraPred;	nBitsNoDCT = statSrc.nBitsNoDCT;		nBitsCODA = statSrc.nBitsCODA;	nBitsCBPA = statSrc.nBitsCBPA;	nBitsMODBA = statSrc.nBitsMODBA;	nBitsCBPBA = statSrc.nBitsCBPBA;	nBitsStuffing = statSrc.nBitsStuffing;	nSkipMB = statSrc.nSkipMB;// GMC	nMCSELMB = statSrc.nMCSELMB;// ~GMC	nInterMB = statSrc.nInterMB;	nInter4VMB = statSrc.nInter4VMB;	nIntraMB = statSrc.nIntraMB;	nDirectMB = statSrc.nDirectMB;	nForwardMB = statSrc.nForwardMB;	nBackwardMB = statSrc.nBackwardMB;	nInterpolateMB = statSrc.nInterpolateMB;	nBitsInterlace = statSrc.nBitsInterlace;	nFieldForwardMB = statSrc.nFieldForwardMB;	nFieldBackwardMB = statSrc.nFieldBackwardMB;	nFieldInterpolateMB = statSrc.nFieldInterpolateMB;	nFieldDirectMB = statSrc.nFieldDirectMB;	nFieldDCTMB = statSrc.nFieldDCTMB;	nVOPs = statSrc.nVOPs;	nBitsMV = statSrc.nBitsMV;	nBitsTexture = statSrc.nBitsTexture;	nBitsShape = statSrc.nBitsShape;	nBitsTotal = statSrc.nBitsTotal;	dSNRY = statSrc.dSNRY;	dSNRU = statSrc.dSNRU;	dSNRV = statSrc.dSNRV;  m_iAuxCompCount = statSrc.m_iAuxCompCount;  dSNRA = new double [m_iAuxCompCount];  for(Int iAuxComp=0;iAuxComp<m_iAuxCompCount;iAuxComp++)  // MAC (SB) 26-Nov-99	  dSNRA[iAuxComp] = statSrc.dSNRA[iAuxComp];	nQMB = statSrc.nQMB;	nQp = statSrc.nQp;*/}CStatistics& CStatistics::operator = (const CStatistics& statSrc){/*	nBitsHead = statSrc.nBitsHead;	nBitsY = statSrc.nBitsY;	nBitsCr = statSrc.nBitsCr;	nBitsCb = statSrc.nBitsCb;	nBitsA = statSrc.nBitsA;//	nBits1stShpCode = statSrc.nBits1stShpCode;	nBitsCOD = statSrc.nBitsCOD;	nBitsCBPY = statSrc.nBitsCBPY;	nBitsMCBPC = statSrc.nBitsMCBPC;// GMC	nBitsMCSEL = statSrc.nBitsMCSEL;// ~GMC	nBitsDQUANT = statSrc.nBitsDQUANT;	nBitsMODB = statSrc.nBitsMODB;	nBitsCBPB = statSrc.nBitsCBPB;	nBitsMBTYPE = statSrc.nBitsMBTYPE;	nBitsIntraPred = statSrc.nBitsIntraPred;	nBitsNoDCT = statSrc.nBitsNoDCT;		nBitsCODA = statSrc.nBitsCODA;	nBitsCBPA = statSrc.nBitsCBPA;	nBitsMODBA = statSrc.nBitsMODBA;	nBitsCBPBA = statSrc.nBitsCBPBA;	nBitsStuffing = statSrc.nBitsStuffing;	nSkipMB = statSrc.nSkipMB;// GMC	nMCSELMB = statSrc.nMCSELMB;// ~GMC	nInterMB = statSrc.nInterMB;	nInter4VMB = statSrc.nInter4VMB;	nIntraMB = statSrc.nIntraMB;	nDirectMB = statSrc.nDirectMB;	nForwardMB = statSrc.nForwardMB;	nBackwardMB = statSrc.nBackwardMB;	nInterpolateMB = statSrc.nInterpolateMB;	nBitsInterlace = statSrc.nBitsInterlace;	nFieldForwardMB = statSrc.nFieldForwardMB;	nFieldBackwardMB = statSrc.nFieldBackwardMB;	nFieldInterpolateMB = statSrc.nFieldInterpolateMB;	nFieldDirectMB = statSrc.nFieldDirectMB;	nFieldDCTMB = statSrc.nFieldDCTMB;	nVOPs = statSrc.nVOPs;	nBitsMV = statSrc.nBitsMV;	nBitsTexture = statSrc.nBitsTexture;	nBitsShape = statSrc.nBitsShape;	nBitsTotal = statSrc.nBitsTotal;	dSNRY = statSrc.dSNRY;	dSNRU = statSrc.dSNRU;	dSNRV = statSrc.dSNRV;  assert( m_iAuxCompCount==statSrc.m_iAuxCompCount );  m_iAuxCompCount = statSrc.m_iAuxCompCount;  for(Int iAuxComp=0;iAuxComp<m_iAuxCompCount;iAuxComp++)  // MAC (SB) 26-Nov-99	  dSNRA[iAuxComp] = statSrc.dSNRA[iAuxComp];	nQMB = statSrc.nQMB;	nQp = statSrc.nQp;	return *this;  */}UInt CStatistics::total (){/*	nBitsTexture = nBitsY + nBitsCr + nBitsCb + nBitsA + nBitsCOD					+ nBitsCBPY + nBitsMCBPC + nBitsDQUANT// GMC					+ nBitsMCSEL// ~GMC					+ nBitsMODB + nBitsCBPB	+ nBitsMBTYPE 					+ nBitsIntraPred + nBitsNoDCT					+ nBitsInterlace					+ nBitsCODA + nBitsCBPA + nBitsMODBA + nBitsCBPBA;	nBitsTotal = nBitsHead + nBitsTexture + nBitsMV + nBitsShape + nBitsStuffing;	return nBitsTotal;*/}UInt CStatistics::head (){	/*	UInt bitsHead = nBitsCr + nBitsCb + nBitsA + nBitsCOD					+ nBitsCBPY + nBitsMCBPC + nBitsDQUANT// GMC					+ nBitsMCSEL// ~GMC					+ nBitsMODB + nBitsCBPB	+ nBitsMBTYPE 					+ nBitsIntraPred + nBitsNoDCT					+ nBitsInterlace					+ nBitsCODA + nBitsCBPA + nBitsMODBA + nBitsCBPBA;	bitsHead +=  nBitsHead + nBitsMV + nBitsShape + nBitsStuffing;	*//*	UInt bitsHead = nBitsTotal - nBitsTexture;	return bitsHead;*/}

⌨️ 快捷键说明

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