Changeset 1191 in 3DVCSoftware for branches/HTM-14.0-MV-draft-3/source/Lib/TLibRenderer/TRenImage.cpp
- Timestamp:
- 15 Apr 2015, 11:36:33 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HTM-14.0-MV-draft-3/source/Lib/TLibRenderer/TRenImage.cpp
r1179 r1191 37 37 #include "TRenFilter.h" 38 38 #include "assert.h" 39 #if H_3D40 41 42 template<typename T>43 TRenImage<T>::TRenImage( TRenImage& rcIn )44 {45 allocatePlanes( rcIn.getPlane(0)->getWidth(), rcIn.getPlane(0)->getHeight(), rcIn.getNumberOfFullPlanes(), rcIn.getNumberOfQuaterPlanes() ) ; assign(&rcIn);46 }47 48 template<typename T>49 TRenImage<T>::TRenImage( UInt uiWidth, UInt uiHeight, UInt uiNumberOfFullPlanes, UInt uiNumberOfQuaterPlanes )50 {51 allocatePlanes( uiWidth, uiHeight, uiNumberOfFullPlanes, uiNumberOfQuaterPlanes );52 }53 54 template<typename T>55 TRenImage<T>::TRenImage() : m_uiNumberOfFullPlanes(0), m_uiNumberOfQuaterPlanes(0), m_uiNumberOfPlanes(0), m_apcPlanes(0)56 {57 58 }59 60 61 template<>62 TRenImage<Pel>::TRenImage( TComPicYuv* pcPicYuv, Bool bFirstPlaneOnly )63 {64 if (bFirstPlaneOnly) //40065 {66 m_uiNumberOfPlanes = 1;67 m_uiNumberOfFullPlanes = 1;68 m_uiNumberOfQuaterPlanes = 0;69 m_apcPlanes = new TRenImagePlane<Pel>*[ m_uiNumberOfPlanes ];70 m_apcPlanes[0] = new TRenImagePlane<Pel>( pcPicYuv->getBufY(), pcPicYuv->getWidth() + (REN_LUMA_MARGIN << 1), pcPicYuv->getHeight()+ (REN_LUMA_MARGIN << 1), pcPicYuv->getStride (), REN_LUMA_MARGIN );71 }72 else //42073 {74 m_uiNumberOfPlanes = 3;75 m_uiNumberOfFullPlanes = 1;76 m_uiNumberOfQuaterPlanes = 2;77 78 m_apcPlanes = new TRenImagePlane<Pel>*[ m_uiNumberOfPlanes ];79 m_apcPlanes[0] = new TRenImagePlane<Pel>( pcPicYuv->getBufY(), pcPicYuv->getWidth() + (REN_LUMA_MARGIN << 1), pcPicYuv->getHeight() + (REN_LUMA_MARGIN << 1), pcPicYuv->getStride (), REN_LUMA_MARGIN );80 m_apcPlanes[1] = new TRenImagePlane<Pel>( pcPicYuv->getBufU(), (pcPicYuv->getWidth()>>1)+ REN_LUMA_MARGIN , (pcPicYuv->getHeight()>>1) + REN_LUMA_MARGIN , pcPicYuv->getCStride(), REN_LUMA_MARGIN >> 1 );81 m_apcPlanes[2] = new TRenImagePlane<Pel>( pcPicYuv->getBufV(), (pcPicYuv->getWidth()>>1)+ REN_LUMA_MARGIN , (pcPicYuv->getHeight()>>1) + REN_LUMA_MARGIN , pcPicYuv->getCStride(), REN_LUMA_MARGIN >> 1 );82 }83 }84 85 template<typename T>86 TRenImage<T>* TRenImage<T>::create()87 {88 return new TRenImage( m_apcPlanes[0]->getWidth(), m_apcPlanes[0]->getHeight(), m_uiNumberOfFullPlanes, m_uiNumberOfQuaterPlanes );89 }90 91 92 template<typename T>93 TRenImage<T>::TRenImage( TComPicYuv* pcPicYuv, Bool bFirstPlaneOnly )94 {95 assert(0);96 }97 98 template<class T>99 TRenImagePlane<T>* TRenImage<T>::getPlane(UInt uiPlaneNumber) const100 {101 return m_apcPlanes[uiPlaneNumber];102 }103 104 template<class T>105 TRenImagePlane<T>** TRenImage<T>::getPlanes() const106 {107 return m_apcPlanes;108 }109 110 template<typename T>111 Void TRenImage<T>::getDataAndStrides( T** pptData, Int* piStrides )112 {113 for (UInt uiCurPlane = 0; uiCurPlane < m_uiNumberOfPlanes; uiCurPlane++ )114 {115 piStrides[uiCurPlane] = m_apcPlanes[uiCurPlane]->getStride ();116 pptData [uiCurPlane] = m_apcPlanes[uiCurPlane]->getPlaneData();117 }118 }119 120 121 template<typename T>122 Void TRenImage<T>::getWidthAndHeight( Int* ppiWidths, Int* ppiHeights )123 {124 for (UInt uiCurPlane = 0; uiCurPlane < m_uiNumberOfPlanes; uiCurPlane++ )125 {126 ppiWidths [uiCurPlane] = m_apcPlanes[uiCurPlane]->getWidth ();127 ppiHeights[uiCurPlane] = m_apcPlanes[uiCurPlane]->getHeight();128 }129 }130 131 template<typename T>132 Void TRenImage<T>::allocatePlanes( UInt uiWidth, UInt uiHeight, UInt uiNumberOfFullPlanes, UInt uiNumberOfQuaterPlanes )133 {134 assert( uiNumberOfFullPlanes + uiNumberOfQuaterPlanes);135 136 UInt uiHalfWidth = uiWidth / 2;137 UInt uiHalfHeight = uiHeight / 2;138 139 uiHalfWidth = (uiHalfWidth == 0) ? 1 : uiHalfWidth ;140 uiHalfHeight = (uiHalfHeight == 0) ? 1 : uiHalfHeight;141 142 m_uiNumberOfPlanes = uiNumberOfFullPlanes + uiNumberOfQuaterPlanes; ;143 m_uiNumberOfFullPlanes = uiNumberOfFullPlanes;144 m_uiNumberOfQuaterPlanes = uiNumberOfQuaterPlanes;145 146 this->m_apcPlanes = new TRenImagePlane<T>*[m_uiNumberOfPlanes];147 148 for (UInt uiCurPlane = 0; uiCurPlane < uiNumberOfFullPlanes; uiCurPlane++)149 {150 this->m_apcPlanes[uiCurPlane] = new TRenImagePlane<T>(uiWidth, uiHeight, REN_LUMA_MARGIN);151 };152 153 for (UInt uiCurPlane = 0; uiCurPlane < uiNumberOfQuaterPlanes; uiCurPlane++)154 {155 this->m_apcPlanes[uiCurPlane+uiNumberOfFullPlanes] = new TRenImagePlane<T>(uiHalfWidth, uiHalfHeight, REN_LUMA_MARGIN >> 1);156 };157 }158 159 160 template<class T>161 Void TRenImage<T>::assign(Int iVal)162 {163 for (UInt uiCurPlane = 0; uiCurPlane < m_uiNumberOfPlanes; uiCurPlane++)164 {165 m_apcPlanes[uiCurPlane]->assign( iVal);166 }167 }168 169 170 template<class T>171 Void TRenImage<T>::devide( Double dDevisor )172 {173 for (UInt uiCurPlane = 0; uiCurPlane < m_uiNumberOfPlanes; uiCurPlane++)174 {175 m_apcPlanes[uiCurPlane]->devide(dDevisor);176 }177 }178 179 180 template<class T> template<class S>181 Void TRenImage<T>::assign( TRenImage<S>* pcSrcImage )182 {183 if (pcSrcImage->getNumberOfPlanes() != m_uiNumberOfPlanes )184 {185 assert(0);186 }187 188 for (UInt uiCurPlane = 0; uiCurPlane < m_uiNumberOfPlanes; uiCurPlane++)189 {190 m_apcPlanes[uiCurPlane]->assign(pcSrcImage->getPlane(uiCurPlane)->getPlaneDataOrg(),pcSrcImage->getPlane(uiCurPlane)->getStride());191 }192 }193 194 195 template<typename T>196 Void TRenImage<T>::setData( TRenImage* pcInputImage, Bool bClean )197 {198 for (UInt uiPlane = 0; uiPlane < m_uiNumberOfPlanes; uiPlane++)199 {200 m_apcPlanes[uiPlane]->setData( pcInputImage->getPlane( uiPlane ), bClean );201 }202 }203 204 template<typename T>205 Void TRenImage<T>::extendMargin()206 {207 for (UInt uiPlane = 0; uiPlane < m_uiNumberOfPlanes; uiPlane++)208 {209 m_apcPlanes[uiPlane]->extendMargin();210 }211 }212 213 template<class T>214 Void TRenImage<T>::xDeletePlanes()215 {216 for (UInt uiCurPlane = 0; uiCurPlane < m_uiNumberOfPlanes; uiCurPlane++)217 {218 if ( m_apcPlanes[uiCurPlane])219 {220 delete m_apcPlanes[uiCurPlane];221 }222 m_apcPlanes[uiCurPlane] = 0;223 }224 }225 226 227 template<class T>228 Void TRenImage<T>::init()229 {230 // YUV-init231 m_apcPlanes[0]->assign((Pel) 0 );232 233 for (UInt uiCurPlane = 1; uiCurPlane < m_uiNumberOfPlanes; uiCurPlane++)234 {235 m_apcPlanes[uiCurPlane]->assign( (Pel) ( 1 << ( g_bitDepthC - 1 ) ) );236 }237 }238 239 240 template<class T>241 TRenImage<T>::~TRenImage() {242 xDeletePlanes();243 delete[] m_apcPlanes;244 }245 246 247 248 template<class T>249 UInt TRenImage<T>::getNumberOfPlanes() const250 {251 return m_uiNumberOfPlanes;252 }253 254 template<class T>255 UInt TRenImage<T>::getNumberOfQuaterPlanes() const256 {257 return m_uiNumberOfQuaterPlanes;258 }259 260 template<class T>261 UInt TRenImage<T>::getNumberOfFullPlanes() const262 {263 return m_uiNumberOfFullPlanes;264 }265 266 template class TRenImage<Pel>;267 template class TRenImage<Int>;268 template class TRenImage<Double>;269 template class TRenImage<Bool>;270 271 272 template Void TRenImage<Pel>::assign<Pel> (TRenImage<Pel>* );273 274 #endif // H_3D
Note: See TracChangeset for help on using the changeset viewer.