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

📄 yuvai.cpp

📁 完整的RTP RTSP代码库
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	Int skipBig = piiBig -> where ().width - unit;	const PixelI* ppxlfSmall = piiSmall -> pixels ();	const PixelI* ppxlfMsk = piiMskSmall -> pixels ();	for (Int i = 0; i < unit; i++) {		for (Int j = 0; j < unit; j++) {			*ppxlfBig = *ppxlfSmall;			ppxlfBig++;			ppxlfSmall++;			ppxlfMsk++;		}		ppxlfBig += skipBig;	}}Void CVOPIntYUVBA::overlay (const CVOPIntYUVBA& vopi){	if (!vopi.valid ()) return;	m_piiBY -> overlay (*vopi.getPlane (BY_PLANE));	m_piiBUV -> overlay (*vopi.getPlane (BUV_PLANE));	overlayMB (m_piiY, vopi.getPlane (Y_PLANE), vopi.getPlane (BY_PLANE));	overlayMB (m_piiU, vopi.getPlane (U_PLANE), vopi.getPlane (BUV_PLANE));	overlayMB (m_piiV, vopi.getPlane (V_PLANE), vopi.getPlane (BUV_PLANE));  if (m_fAUsage == EIGHT_BIT) {    for(Int iAuxComp=0;iAuxComp<m_iAuxCompCount;iAuxComp++) // MAC (SB) 26-Nov-99  		overlayMB (m_ppiiA[iAuxComp], vopi.getPlaneA (iAuxComp), vopi.getPlane (BY_PLANE));  }}Void CVOPIntYUVBA::overlayBY (const CIntImage& iiBY){	if (!iiBY.valid ()) return;	m_piiBY -> overlay (iiBY);}/*own CVOPIntYUVBA* CVOPIntYUVBA::warp (const CAffine2D& aff) const{	CVideoObjectPlane* pvop = pvopYUV ();	CVideoObjectPlane* pvopWarp = pvop -> warp (aff);	CVOPIntYUVBA* pvopfRet = new CVOPIntYUVBA (*pvopWarp, m_fAUsage);	delete pvop;	delete pvopWarp;	return pvopfRet;}own CVOPIntYUVBA* CVOPIntYUVBA::warp (const CAffine2D& aff, const CRct& rctWarp) const{	CVideoObjectPlane* pvop = pvopYUV ();	CVideoObjectPlane* pvopWarp = pvop -> warp (aff, rctWarp);	CVOPIntYUVBA* pvopfRet = new CVOPIntYUVBA (*pvopWarp, m_fAUsage);	delete pvop;	delete pvopWarp;	return pvopfRet;}own CVOPIntYUVBA* CVOPIntYUVBA::warp (const CPerspective2D& persp) const{	CVideoObjectPlane* pvop = pvopYUV ();	CVideoObjectPlane* pvopWarp = pvop -> warp (persp);	CVOPIntYUVBA* pvopfRet = new CVOPIntYUVBA (*pvopWarp, m_fAUsage);	delete pvop;	delete pvopWarp;	return pvopfRet;}own CVOPIntYUVBA* CVOPIntYUVBA::warp (const CPerspective2D& persp, const CRct& rctWarp) const{	CVideoObjectPlane* pvop = pvopYUV ();	CVideoObjectPlane* pvopWarp = pvop -> warp (persp, rctWarp);	CVOPIntYUVBA* pvopfRet = new CVOPIntYUVBA (*pvopWarp, m_fAUsage);	delete pvop;	delete pvopWarp;	return pvopfRet;}own CVOPIntYUVBA* CVOPIntYUVBA::warp (const CPerspective2D& persp, const CRct& rctWarp, UInt accuracy) const{	CVideoObjectPlane* pvop = pvopYUV ();	CVideoObjectPlane* pvopWarp = pvop -> warp (persp, rctWarp, accuracy);	CVOPIntYUVBA* pvopfRet = new CVOPIntYUVBA (*pvopWarp, m_fAUsage);	delete pvop;	delete pvopWarp;	return pvopfRet;}*/own CVOPIntYUVBA* CVOPIntYUVBA::warpYUV (const CPerspective2D& persp, const CRct& rctWarp, UInt accuracy) const{	CVOPIntYUVBA* pvopfRet = new CVOPIntYUVBA (RECTANGLE, rctWarp);	CIntImage* piiwarpedY = (CIntImage*) getPlane (Y_PLANE) -> warp (persp, rctWarp, accuracy);	pvopfRet -> setPlane (piiwarpedY, Y_PLANE, FALSE);	delete piiwarpedY;	CIntImage* piiUZoom = (CIntImage*) getPlane (U_PLANE) -> zoomup (2, 2);	CIntImage* piiUZoomWarp = piiUZoom -> warp (persp, rctWarp, accuracy);	delete piiUZoom;	CIntImage* piiUWarped = piiUZoomWarp -> decimate (2, 2);	delete piiUZoomWarp;	pvopfRet -> setPlane (piiUWarped, U_PLANE, FALSE);	delete piiUWarped;	CIntImage* piiVZoom = (CIntImage*) getPlane (V_PLANE) -> zoomup (2, 2);	CIntImage* piiVZoomWarp = piiVZoom -> warp (persp, rctWarp, accuracy);	delete piiVZoom;	CIntImage* piiVWarp = piiVZoomWarp -> decimate (2, 2);	delete piiVZoomWarp;	pvopfRet -> setPlane (piiVWarp, V_PLANE, FALSE);		delete piiVWarp;	return pvopfRet;}own CVOPIntYUVBA* CVOPIntYUVBA::warpYUV (const CPerspective2D& persp, const CRct& rctWarp) const{	CVOPIntYUVBA* pvopfRet = new CVOPIntYUVBA (RECTANGLE, rctWarp);	CIntImage* piiwarpedY = getPlane (Y_PLANE) -> warp (persp, rctWarp);	pvopfRet -> setPlane (piiwarpedY, Y_PLANE, FALSE);	delete piiwarpedY;	CIntImage* piiUZoom = getPlane (U_PLANE) -> zoomup (2, 2);	CIntImage* piiUZoomWarp = piiUZoom -> warp (persp, rctWarp);	delete piiUZoom;	CIntImage* piiUWarped = piiUZoomWarp -> decimate (2, 2);	delete piiUZoomWarp;	pvopfRet -> setPlane (piiUWarped, U_PLANE, FALSE);	delete piiUWarped;	CIntImage* piiVZoom = getPlane (V_PLANE) -> zoomup (2, 2);	CIntImage* piiVZoomWarp = piiVZoom -> warp (persp, rctWarp);	delete piiVZoom;	CIntImage* piiVWarp = piiVZoomWarp -> decimate (2, 2);	delete piiVZoomWarp;	pvopfRet -> setPlane (piiVWarp, V_PLANE, FALSE);		delete piiVWarp;	return pvopfRet;}own CVOPIntYUVBA* CVOPIntYUVBA::downsampleForSpatialScalability () const{	//only handle CIF->QCIF for RECTANGULAR VOP	assert (m_fAUsage == RECTANGLE);	/* CRct rctDown = */ whereY ();	assert (whereY().left == 0 && whereY().top == 0);	CVOPIntYUVBA* pvopfRet = new CVOPIntYUVBA (m_fAUsage);	assert (pvopfRet != NULL);	pvopfRet -> m_piiY = m_piiY->downsampleForSpatialScalability ();	pvopfRet -> m_piiU = m_piiU->downsampleForSpatialScalability ();	pvopfRet -> m_piiV = m_piiV->downsampleForSpatialScalability ();	pvopfRet -> m_piiBY = new CIntImage (pvopfRet->whereY (), opaqueValue);	pvopfRet -> m_piiBUV = new CIntImage (pvopfRet->whereUV (), opaqueValue);	return pvopfRet;}own CVOPIntYUVBA* CVOPIntYUVBA::upsampleForSpatialScalability () const{	//only handle QCIF->CIF for RECTANGULAR VOP	assert (m_fAUsage == RECTANGLE);	CVOPIntYUVBA* pvopfRet = new CVOPIntYUVBA (m_fAUsage);	assert (pvopfRet != NULL);	pvopfRet -> m_piiY = m_piiY->upsampleForSpatialScalability ();	pvopfRet -> m_piiU = m_piiU->upsampleForSpatialScalability ();	pvopfRet -> m_piiV = m_piiV->upsampleForSpatialScalability ();	pvopfRet -> m_piiBY = new CIntImage (pvopfRet->whereY (), opaqueValue);	pvopfRet -> m_piiBUV = new CIntImage (pvopfRet->whereUV (), opaqueValue);	return pvopfRet;}/*Void CVOPIntYUVBA::vdlDump (const Char* fileName, CPixel ppxlFalse) const{	CVideoObjectPlane* pvop = pvopYUV ();	pvop -> vdlDump (fileName, ppxlFalse);	delete pvop;}*/own Double* CVOPIntYUVBA::mse (const CVOPIntYUVBA& vopi) const{	assert (whereY () == vopi.whereY () && whereUV () == vopi.whereUV ());	Double* rgdblMeanSquareError = new Double [3+m_iAuxCompCount]; // mean square	CIntImage* piiBOr = new CIntImage (*m_piiBY);	piiBOr -> orIi (*vopi.getPlane (BY_PLANE));	CIntImage* piiExp0 = new CIntImage (*m_piiY, piiBOr -> where ());	CIntImage* piiExp1 = new CIntImage (*vopi.getPlane (Y_PLANE), piiBOr -> where ());	rgdblMeanSquareError [0] = piiExp1 -> mse (*piiExp0, *piiBOr);	delete piiExp0;	delete piiExp1;	if (fAUsage () == EIGHT_BIT) {    assert( m_iAuxCompCount==vopi.m_iAuxCompCount );    for(Int iAuxComp=0;iAuxComp<m_iAuxCompCount;iAuxComp++) { // MAC (SB) 26-Nov-99  		piiExp0 = new CIntImage (*m_ppiiA[iAuxComp], piiBOr -> where ());	  	piiExp1 = new CIntImage (*vopi.getPlaneA(iAuxComp), piiBOr -> where ());		  rgdblMeanSquareError [3+iAuxComp] = piiExp1 -> mse (*piiExp0, *piiBOr);		  delete piiExp0;		  delete piiExp1;    }	}	delete piiBOr;	piiBOr = new CIntImage (*m_piiBUV);	piiBOr -> orIi (*vopi.getPlane (BUV_PLANE));	piiExp0 = new CIntImage (*m_piiU, piiBOr -> where ());	piiExp1 = new CIntImage (*vopi.getPlane (U_PLANE), piiBOr -> where ());	rgdblMeanSquareError [1] = piiExp1 -> mse (*piiExp0, *piiBOr);	delete piiExp0;	delete piiExp1;	piiExp0 = new CIntImage (*m_piiV, piiBOr -> where ());	piiExp1 = new CIntImage (*vopi.getPlane (V_PLANE), piiBOr -> where ());	rgdblMeanSquareError [2] = piiExp1 -> mse (*piiExp0, *piiBOr);	delete piiExp0;	delete piiExp1;	delete piiBOr;	return rgdblMeanSquareError;}own Double* CVOPIntYUVBA::snr (const CVOPIntYUVBA& vopi) const{	assert (whereY () == vopi.whereY () && whereUV () == vopi.whereUV ());	Double* psnr = new Double [3+m_iAuxCompCount]; // mean square	CIntImage* piiBOr = new CIntImage (*m_piiBY);	piiBOr -> orIi (*vopi.getPlane (BY_PLANE));	CIntImage* piiExp0 = new CIntImage (*m_piiY, piiBOr -> where ());	CIntImage* piiExp1 = new CIntImage (*vopi.getPlane (Y_PLANE), piiBOr -> where ());	psnr [0] = piiExp1 -> snr (*piiExp0, *piiBOr);	delete piiExp0;	delete piiExp1;	if (fAUsage () == EIGHT_BIT) {    assert( m_iAuxCompCount==vopi.m_iAuxCompCount );    for(Int iAuxComp=0;iAuxComp<m_iAuxCompCount;iAuxComp++) { // MAC (SB) 26-Nov-99		  piiExp0 = new CIntImage (*m_ppiiA[iAuxComp], piiBOr -> where ());		  piiExp1 = new CIntImage (*vopi.getPlaneA (iAuxComp), piiBOr -> where ());		  psnr [3+iAuxComp] = piiExp1 -> snr (*piiExp0, *piiBOr);		  delete piiExp0;		  delete piiExp1;    }	}	delete piiBOr;	piiBOr = new CIntImage (*m_piiBUV);	piiBOr -> orIi (*vopi.getPlane (BUV_PLANE));	piiExp0 = new CIntImage (*m_piiU, piiBOr -> where ());	piiExp1 = new CIntImage (*vopi.getPlane (U_PLANE), piiBOr -> where ());	psnr [1] = piiExp1 -> snr (*piiExp0, *piiBOr);	delete piiExp0;	delete piiExp1;	piiExp0 = new CIntImage (*m_piiV, piiBOr -> where ());	piiExp1 = new CIntImage (*vopi.getPlane (V_PLANE), piiBOr -> where ());	psnr [2] = piiExp1 -> snr (*piiExp0, *piiBOr);	delete piiExp0;	delete piiExp1;	delete piiBOr;	return psnr;}own CVOPIntYUVBA* CVOPIntYUVBA::operator + (const CVOPIntYUVBA& vopi) const{	assert (whereY () == vopi.whereY () && whereUV () == vopi.whereUV ());	CVOPIntYUVBA* pvopfRet = new CVOPIntYUVBA (whereY (), m_fAUsage, m_iAuxCompCount);	assert (pvopfRet != NULL);	delete pvopfRet -> m_piiY;	pvopfRet -> m_piiY = *m_piiY + *vopi.getPlane (Y_PLANE);	delete pvopfRet -> m_piiU;	pvopfRet -> m_piiU = *m_piiU + *vopi.getPlane (U_PLANE);	delete pvopfRet -> m_piiV;	pvopfRet -> m_piiV = *m_piiV + *vopi.getPlane (V_PLANE);  assert( m_iAuxCompCount==vopi.m_iAuxCompCount );  for(Int iAuxComp=0;iAuxComp<m_iAuxCompCount;iAuxComp++) { // MAC (SB) 26-Nov-99    delete pvopfRet -> m_ppiiA[iAuxComp];	  pvopfRet -> m_ppiiA[iAuxComp] = *m_ppiiA[iAuxComp] + *vopi.getPlaneA(iAuxComp);  }  delete pvopfRet -> m_piiBY;	pvopfRet -> m_piiBY = new CIntImage (*m_piiBY); // alpha is defined as the first one	delete pvopfRet -> m_piiBUV;	pvopfRet -> m_piiBUV = new CIntImage (*m_piiBUV); // alpha is defined as the first one	return pvopfRet;}own CVOPIntYUVBA* CVOPIntYUVBA::operator - (const CVOPIntYUVBA& vopi) const{	assert (whereY () == vopi.whereY () && whereUV () == vopi.whereUV ());//	CVOPIntYUVBA* pvopfRet = new CVOPIntYUVBA (whereY (), m_fAUsage);	CVOPIntYUVBA* pvopfRet = new CVOPIntYUVBA (m_fAUsage, m_iAuxCompCount, whereY ());	assert (pvopfRet != NULL);	delete pvopfRet -> m_piiY;	pvopfRet -> m_piiY = *m_piiY - *vopi.getPlane (Y_PLANE);	delete pvopfRet -> m_piiU;	pvopfRet -> m_piiU = *m_piiU - *vopi.getPlane (U_PLANE);	delete pvopfRet -> m_piiV;	pvopfRet -> m_piiV = *m_piiV - *vopi.getPlane (V_PLANE);  assert( m_iAuxCompCount==vopi.m_iAuxCompCount );  for(Int iAuxComp=0;iAuxComp<m_iAuxCompCount;iAuxComp++) { // MAC (SB) 26-Nov-99    delete pvopfRet -> m_ppiiA[iAuxComp];	  pvopfRet -> m_ppiiA[iAuxComp] = *m_ppiiA[iAuxComp] - *vopi.getPlaneA(iAuxComp);  }  delete pvopfRet -> m_piiBY;	pvopfRet -> m_piiBY = new CIntImage (*m_piiBY); // alpha is defined as the first one	delete pvopfRet -> m_piiBUV;	pvopfRet -> m_piiBUV = new CIntImage (*m_piiBUV); // alpha is defined as the first one	return pvopfRet;}own CVOPIntYUVBA* CVOPIntYUVBA::operator * (Int vl) const{	CVOPIntYUVBA* pvopfRet = new CVOPIntYUVBA (*this);	assert (pvopfRet != NULL);	delete pvopfRet -> m_piiY;	pvopfRet -> m_piiY = *m_piiY * vl;	delete pvopfRet -> m_piiU;	pvopfRet -> m_piiU = *m_piiU * vl;	delete pvopfRet -> m_piiV;	pvopfRet -> m_piiV = *m_piiV * vl;  for(Int iAuxComp=0;iAuxComp<m_iAuxCompCount;iAuxComp++) { // MAC (SB) 26-Nov-99    delete pvopfRet -> m_ppiiA[iAuxComp];	  pvopfRet -> m_ppiiA[iAuxComp] = *m_ppiiA[iAuxComp] * vl;  }  delete pvopfRet -> m_piiBY;	pvopfRet -> m_piiBY = new CIntImage (*m_piiBY); // alpha is unchanged	delete pvopfRet -> m_piiBUV;	pvopfRet -> m_piiBUV = new CIntImage (*m_piiBUV); // alpha is unchanged	return pvopfRet;}own CVOPIntYUVBA* CVOPIntYUVBA::operator / (Int vl) const{	assert (vl != .0f);	CVOPIntYUVBA* pvopfRet = new CVOPIntYUVBA (*this);	assert (pvopfRet != NULL);	delete pvopfRet -> m_piiY;	pvopfRet -> m_piiY = *m_piiY / vl;	delete pvopfRet -> m_piiU;	pvopfRet -> m_piiU = *m_piiU / vl;	delete pvopfRet -> m_piiV;	pvopfRet -> m_piiV = *m_piiV / vl;  for(Int iAuxComp=0;iAuxComp<m_iAuxCompCount;iAuxComp++) { // MAC (SB) 26-Nov-99    delete pvopfRet -> m_ppiiA[iAuxComp];	  pvopfRet -> m_ppiiA[iAuxComp] = *m_ppiiA[iAuxComp] / vl;  }  delete pvopfRet -> m_piiBY;	pvopfRet -> m_piiBY = new CIntImage (*m_piiBY); // alpha is unchanged	delete pvopfRet -> m_piiBUV;	pvopfRet -> m_piiBUV = new CIntImage (*m_piiBUV); // alpha is unchanged	return pvopfRet;}own CVOPIntYUVBA* CVOPIntYUVBA::average (const CVOPIntYUVBA& vopi) const{	assert (whereY () == vopi.whereY () && whereUV () == vopi.whereUV ());//	CVOPIntYUVBA* pvopfRet = new CVOPIntYUVBA (whereY (), m_fAUsage);	CVOPIntYUVBA* pvopfRet = new CVOPIntYUVBA (m_fAUsage, whereY ());	assert (pvopfRet != NULL);	delete pvopfRet -> m_piiY;	pvopfRet -> m_piiY = m_piiY -> average (*vopi.getPlane (Y_PLANE));	delete pvopfRet -> m_piiU;	pvopfRet -> m_piiU = m_piiU -> average (*vopi.getPlane (U_PLANE));	delete pvopfRet -> m_piiV;	pvopfRet -> m_piiV = m_piiV -> average (*vopi.getPlane (V_PLANE));  for(Int iAuxComp=0;iAuxComp<m_iAuxCompCount;iAuxComp++) { // MAC (SB) 26-Nov-99    delete pvopfRet -> m_ppiiA[iAuxComp];	  pvopfRet -> m_ppiiA[iAuxComp] = m_ppiiA[iAuxComp] -> average (*vopi.getPlaneA(iAuxComp));  }  delete pvopfRet -> m_piiBY;	pvopfRet -> m_piiBY = new CIntImage (*m_piiBY); // alpha is defined as the first one	delete pvopfRet -> m_piiBUV;	pvopfRet -> m_piiBUV = new CIntImage (*m_piiBUV); // alpha is defined as the first one	return pvopfRet;}

⌨️ 快捷键说明

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