📄 yuvai.cpp
字号:
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 + -