Changeset 1390 in 3DVCSoftware for branches/HTM-16.0-MV-draft-5/source/Lib/TLibRenderer/TRenImagePlane.cpp
- Timestamp:
- 13 Nov 2015, 17:00:20 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified branches/HTM-16.0-MV-draft-5/source/Lib/TLibRenderer/TRenImagePlane.cpp ΒΆ
r1386 r1390 36 36 #include "TRenFilter.h" 37 37 #include <string.h> 38 #if NH_3D_VSO39 38 40 /////// TRenImagePlane ///////41 42 template<class T>43 TRenImagePlane<T>::TRenImagePlane() { m_bClean = true; }44 45 template<class T>46 TRenImagePlane<T>::TRenImagePlane(UInt uiWidth, UInt uiHeight, UInt uiPad)47 : m_uiWidth(uiWidth), m_uiHeight(uiHeight), m_uiStride(uiWidth+2*uiPad), m_uiWidthOrg(uiWidth+2*uiPad), m_uiHeightOrg(uiHeight+2*uiPad), m_uiPad(uiPad)48 {49 m_pcDataOrg = new T[ m_uiWidthOrg * m_uiHeightOrg ];50 m_pcData = m_pcDataOrg + m_uiPad * m_uiStride + m_uiPad;51 m_bClean = true;52 }53 54 template<class T>55 TRenImagePlane<T>::TRenImagePlane(TRenImagePlane* pcPlane)56 : m_uiWidth (pcPlane->getWidth ())57 , m_uiHeight (pcPlane->getHeight ())58 , m_uiStride (pcPlane->getStride ())59 , m_uiWidthOrg(pcPlane->getWidthOrg())60 , m_uiHeightOrg(pcPlane->getHeightOrg())61 , m_uiPad (pcPlane->getPad ())62 {63 m_pcData = new T[m_uiWidthOrg*m_uiHeightOrg];64 m_bClean = true;65 assign( pcPlane );66 }67 68 template<typename T>69 TRenImagePlane<T>::TRenImagePlane( T* pcDataOrg, UInt uiWidthOrg, UInt uiHeightOrg, UInt uiStride, UInt uiPad )70 : m_pcData (pcDataOrg + uiStride * uiPad + uiPad )71 , m_uiWidth (uiWidthOrg - 2* uiPad )72 , m_uiHeight (uiHeightOrg - 2* uiPad )73 , m_uiStride (uiStride )74 , m_pcDataOrg (pcDataOrg )75 , m_uiWidthOrg (uiWidthOrg )76 , m_uiHeightOrg(uiHeightOrg)77 , m_uiPad (uiPad )78 , m_bClean (false )79 {80 81 }82 83 template<typename T>84 Void TRenImagePlane<T>::setData( T* pDataOrg, UInt uiWidthOrg, UInt uiHeightOrg, UInt uiStride, UInt uiPad, Bool bClean /*= false*/ )85 {86 deleteData();87 m_uiPad = uiPad;88 m_pcDataOrg = pDataOrg;89 m_uiWidthOrg = uiWidthOrg;90 m_uiHeightOrg = uiHeightOrg;91 m_uiWidth = uiWidthOrg - 2* uiPad;92 m_uiHeight = uiHeightOrg - 2* uiPad;93 m_uiStride = uiStride;94 m_pcData = m_pcDataOrg + uiPad * m_uiStride + uiPad;95 m_bClean = bClean;96 }97 98 template<typename T>99 Void TRenImagePlane<T>::setData( TRenImagePlane<T>* pcInPlane, Bool bClean )100 {101 deleteData();102 m_uiPad = pcInPlane->getPad();103 m_pcDataOrg = pcInPlane->getPlaneDataOrg();104 m_uiWidthOrg = pcInPlane->getWidthOrg();105 m_uiHeightOrg = pcInPlane->getHeightOrg();106 m_uiWidth = pcInPlane->getWidth();107 m_uiHeight = pcInPlane->getHeight();108 m_uiStride = pcInPlane->getStride();109 m_pcData = pcInPlane->getPlaneData();110 m_bClean = bClean;111 pcInPlane->setClean( !m_bClean );112 }113 114 template<typename T>115 Void TRenImagePlane<T>::setClean( Bool bClean )116 {117 m_bClean = bClean;118 }119 120 template<class T>121 T* TRenImagePlane<T>::getPlaneData()122 {123 return m_pcData;124 }125 126 127 template<class T>128 T* TRenImagePlane<T>::getPlaneDataOrg()129 {130 return m_pcDataOrg;131 }132 133 134 template<class T>135 Void TRenImagePlane<T>::assign(Pel* pcSourceData, UInt uiSourceStride )136 {137 T* pcTargetData = m_pcDataOrg;138 for (UInt uiYPos = 0; uiYPos < m_uiHeightOrg; uiYPos++)139 {140 for (UInt uiXPos = 0; uiXPos < m_uiWidthOrg; uiXPos++)141 {142 pcTargetData[uiXPos] = (T) pcSourceData[uiXPos];143 }144 pcTargetData += m_uiStride;145 pcSourceData += uiSourceStride;146 }147 }148 149 template<class T>150 Void TRenImagePlane<T>::assign(Pel cData)151 {152 T* pcTargetData = m_pcDataOrg;153 for (UInt uiYPos = 0; uiYPos < m_uiHeightOrg; uiYPos++)154 {155 for (UInt uiXPos = 0; uiXPos < m_uiWidthOrg; uiXPos++)156 {157 pcTargetData[uiXPos] = (T) cData;158 }159 pcTargetData += m_uiStride;160 }161 }162 163 template<class T>164 Void TRenImagePlane<T>::assign(Double* pdData, UInt uiSourceStride )165 {166 T* pcTargetData = m_pcDataOrg;167 for (UInt uiYPos = 0; uiYPos < m_uiHeightOrg; uiYPos++)168 {169 for (UInt uiXPos = 0; uiXPos < m_uiWidthOrg; uiXPos++)170 {171 pcTargetData[uiXPos] = (T) pdData[uiXPos];172 }173 pcTargetData += m_uiStride;174 pdData += uiSourceStride;175 176 }177 }178 179 template<class T>180 Void TRenImagePlane<T>::assign(Double dData)181 {182 T* pcTargetData = m_pcDataOrg;183 for (UInt uiYPos = 0; uiYPos < m_uiHeightOrg; uiYPos++)184 {185 for (UInt uiXPos = 0; uiXPos < m_uiWidthOrg; uiXPos++)186 {187 pcTargetData[uiXPos] = (T) dData;188 }189 pcTargetData += m_uiStride;190 }191 }192 193 194 template<class T>195 Void TRenImagePlane<T>::assign(Bool* pbData, UInt uiSourceStride )196 {197 T* pcTargetData = m_pcDataOrg;198 for (UInt uiYPos = 0; uiYPos < m_uiHeightOrg; uiYPos++)199 {200 for (UInt uiXPos = 0; uiXPos < m_uiWidthOrg; uiXPos++)201 {202 pcTargetData[uiXPos] = (T) pbData[uiXPos];203 }204 pcTargetData += m_uiStride;205 pbData += uiSourceStride;206 }207 }208 209 template<class T>210 Void TRenImagePlane<T>::assign(Int iData)211 {212 T* pcTargetData = m_pcDataOrg;213 for (UInt uiYPos = 0; uiYPos < m_uiHeightOrg; uiYPos++)214 {215 for (UInt uiXPos = 0; uiXPos < m_uiWidthOrg; uiXPos++)216 {217 pcTargetData[uiXPos] = (T) iData;218 }219 pcTargetData += m_uiStride;220 }221 }222 223 template<class T>224 Void TRenImagePlane<T>::assign(Int* piData, UInt uiSourceStride )225 {226 T* pcTargetData = m_pcDataOrg;227 for (UInt uiYPos = 0; uiYPos < m_uiHeightOrg; uiYPos++)228 {229 for (UInt uiXPos = 0; uiXPos < m_uiWidthOrg; uiXPos++)230 {231 pcTargetData[uiXPos] = (T) piData[uiXPos];232 }233 pcTargetData += m_uiStride;234 piData += uiSourceStride;235 }236 }237 238 template<class T>239 Void TRenImagePlane<T>::assign(Bool data)240 {241 T* pcTargetData = m_pcDataOrg;242 for (UInt uiYPos = 0; uiYPos < m_uiHeightOrg; uiYPos++)243 {244 for (UInt uiXPos = 0; uiXPos < m_uiWidthOrg; uiXPos++)245 {246 pcTargetData[uiXPos] = (T) data;247 }248 pcTargetData += m_uiStride;249 }250 }251 252 // Assignments to Bool253 254 template<>255 Void TRenImagePlane<Bool>::assign(Int* piData, UInt uiSourceStride )256 {257 Bool* pcTargetData = m_pcDataOrg;258 for (UInt uiYPos = 0; uiYPos < m_uiHeightOrg; uiYPos++)259 {260 for (UInt uiXPos = 0; uiXPos < m_uiWidthOrg; uiXPos++)261 {262 pcTargetData[uiXPos] = (piData[uiXPos] == 0);263 }264 pcTargetData += m_uiStride;265 piData += uiSourceStride;266 267 }268 }269 270 template<>271 Void TRenImagePlane<Bool>::assign(Int iData)272 {273 Bool* pcTargetData = m_pcDataOrg;274 for (UInt uiYPos = 0; uiYPos < m_uiHeightOrg; uiYPos++)275 {276 for (UInt uiXPos = 0; uiXPos < m_uiWidthOrg; uiXPos++)277 {278 pcTargetData[uiXPos] = (iData == 0);279 }280 pcTargetData += m_uiStride;281 }282 }283 284 template<>285 Void TRenImagePlane<Bool>::assign(Pel* pcData, UInt uiSourceStride )286 {287 Bool* pcTargetData = m_pcDataOrg;288 for (UInt uiYPos = 0; uiYPos < m_uiHeightOrg; uiYPos++)289 {290 for (UInt uiXPos = 0; uiXPos < m_uiWidthOrg; uiXPos++)291 {292 pcTargetData[uiXPos] = (pcData[uiXPos] == 0);293 }294 pcTargetData += m_uiStride;295 pcData += uiSourceStride;296 297 }298 }299 300 template<>301 Void TRenImagePlane<Bool>::assign(Pel cData)302 {303 Bool* pcTargetData = m_pcDataOrg;304 for (UInt uiYPos = 0; uiYPos < m_uiHeightOrg; uiYPos++)305 {306 for (UInt uiXPos = 0; uiXPos < m_uiWidthOrg; uiXPos++)307 {308 pcTargetData[uiXPos] = (cData == 0);309 }310 pcTargetData += m_uiStride;311 }312 }313 314 template<>315 Void TRenImagePlane<Bool>::assign(Double* pdData, UInt uiSourceStride )316 {317 Bool* pcTargetData = m_pcDataOrg;318 for (UInt uiYPos = 0; uiYPos < m_uiHeightOrg; uiYPos++)319 {320 for (UInt uiXPos = 0; uiXPos < m_uiWidthOrg; uiXPos++)321 {322 pcTargetData[uiXPos] = ( pdData[uiXPos] == 0);323 }324 pcTargetData += m_uiStride;325 pdData += uiSourceStride;326 327 }328 }329 330 331 332 template<>333 Void TRenImagePlane<Bool>::assign(Double dData)334 {335 Bool* pcTargetData = m_pcDataOrg;336 for (UInt uiYPos = 0; uiYPos < m_uiHeightOrg; uiYPos++)337 {338 for (UInt uiXPos = 0; uiXPos < m_uiWidthOrg; uiXPos++)339 {340 pcTargetData [uiXPos] = (dData == 0);341 }342 pcTargetData += m_uiStride;343 }344 }345 346 347 // Assignments to Pel348 template<>349 Void TRenImagePlane<Pel>::assign(Double* pdData, UInt uiSourceStride )350 {351 Pel* pcTargetData = m_pcDataOrg;352 for (UInt uiYPos = 0; uiYPos < m_uiHeightOrg; uiYPos++)353 {354 for (UInt uiXPos = 0; uiXPos < m_uiWidthOrg; uiXPos++)355 {356 pcTargetData[uiXPos] = (Pel) ( pdData[uiXPos] + pdData[uiXPos] < 0 ? -0.5 : 0.5 ) ;357 }358 pcTargetData += m_uiStride;359 pdData += uiSourceStride;360 }361 }362 363 template<class T>364 Void TRenImagePlane<T>::assign(TRenImagePlane<T>* pcPlane)365 {366 assign(pcPlane->getPlaneDataOrg(), pcPlane->getStride());367 }368 369 template<class T>370 Void TRenImagePlane<T>::assign(TRenImagePlane<T>* pcPlane, UInt uiRow, UInt uiStartOffset, UInt uiEndOffset)371 {372 T* pcTargetData = m_pcData + uiRow * m_uiStride;373 T* pcSourceData = pcPlane->getPlaneData() + uiRow * pcPlane->getStride();374 375 for (UInt uiPosX = uiStartOffset; uiPosX <= uiEndOffset; uiPosX++)376 {377 pcTargetData[uiPosX] = pcSourceData[uiPosX];378 }379 380 }381 382 template<class T>383 Void TRenImagePlane<T>::assign(TRenImagePlane<T>* pcSourcePlane, UInt uiSourceRowStart, UInt uiSourceColStart, UInt uiWidth, UInt uiHeight)384 {385 T* acSourceData;386 T* acDestData;387 388 acSourceData = pcSourcePlane->getPlaneData();389 acSourceData += uiSourceRowStart * pcSourcePlane->getStride() + uiSourceColStart;390 acDestData = m_pcData;391 392 for (UInt uiPosY = 0; uiPosY < uiHeight ; uiPosY++)393 {394 for (UInt uiPosX = 0; uiPosX < uiWidth ; uiPosX++)395 {396 acDestData[uiPosX] = acSourceData[uiPosX];397 }398 acSourceData += pcSourcePlane->getStride();399 acDestData += this ->getStride();400 };401 }402 403 404 405 template<class T>406 Void TRenImagePlane<T>::assign( T data , UInt uiRow, UInt uiStartOffset, UInt uiEndOffset)407 {408 T* pcTargetData = m_pcData + uiRow * m_uiStride;409 for (UInt uiPosX = uiStartOffset; uiPosX <= uiEndOffset; uiPosX++)410 {411 pcTargetData[uiPosX] = data;412 }413 }414 415 416 template<class T>417 Void TRenImagePlane<T>::devide( Double dDevisor )418 {419 T* pcTargetData = m_pcDataOrg;420 for (UInt uiPosY = 0; uiPosY < (m_uiHeightOrg); uiPosY++)421 {422 for (UInt uiPosX = 0; uiPosX < m_uiWidthOrg; uiPosX++)423 {424 pcTargetData[uiPosX] = (T) ( ( Double )pcTargetData[uiPosX] / dDevisor );425 }426 pcTargetData += m_uiStride;427 }428 };429 430 template<class T>431 Void TRenImagePlane<T>::multiply( Double dMultiplier ) {432 T* pcTargetData = m_pcDataOrg;433 for (UInt uiPosY = 0; uiPosY < (m_uiHeightOrg); uiPosY++)434 {435 for (UInt uiPosX = 0; uiPosX < m_uiWidthOrg; uiPosX++)436 {437 pcTargetData[uiPosX] = (T) ( ( Double )pcTargetData[uiPosX] * dMultiplier );438 }439 pcTargetData += m_uiStride;440 }441 };442 443 444 template<>445 Void TRenImagePlane<Bool>::devide( Double dDevisor )446 {447 assert(0);448 };449 450 template<>451 Void TRenImagePlane<Bool>::multiply( Double dMultiplier )452 {453 assert(0);454 };455 456 457 template<class T>458 Void TRenImagePlane<T>::deleteData()459 {460 if (m_bClean)461 {462 if (m_pcDataOrg)463 {464 delete[] m_pcDataOrg;465 };466 }467 }468 469 template<class T>470 TRenImagePlane<T>::~TRenImagePlane()471 {472 deleteData();473 }474 475 476 template<typename T>477 Void TRenImagePlane<T>::extendMargin()478 {479 Int iPad = (Int) m_uiPad;480 T* pcData = m_pcData;481 482 for ( Int iPosY = 0; iPosY < (Int) m_uiHeight; iPosY++)483 {484 for ( Int iPosX = 0; iPosX < (Int) iPad; iPosX++ )485 {486 pcData[ -iPad + iPosX ] = pcData[0];487 pcData[m_uiWidth + iPosX ] = pcData[m_uiWidth -1 ];488 }489 pcData += m_uiStride;490 }491 492 493 pcData -= (m_uiStride + iPad);494 for ( Int iPosY = 0; iPosY < iPad; iPosY++ )495 {496 memcpy( pcData + (iPosY+1)*m_uiStride, pcData, sizeof(T)*(m_uiWidth + (iPad<<1)) );497 }498 499 pcData -= ((m_uiHeight-1) * m_uiStride);500 for ( Int iPosY = 0; iPosY < iPad; iPosY++ )501 {502 memcpy( pcData - (iPosY+1)*m_uiStride, pcData, sizeof(T)*(m_uiWidth + (iPad<<1)) );503 }504 }505 506 template class TRenImagePlane<Pel>;507 template class TRenImagePlane<Double>;508 template class TRenImagePlane<Bool>;509 template class TRenImagePlane<Int>;510 511 /////// TRenImagePlanePart ///////512 513 template<typename T>514 TRenImagePlanePart<T>::TRenImagePlanePart( TRenImagePlane<T>* pPlane, UInt uHorOff, UInt uVerOff, UInt uWidth, UInt uHeight )515 : TRenImagePlane<T>( pPlane->getPlaneData() + uHorOff + uVerOff * pPlane->getStride(), uWidth, uHeight, pPlane->getStride(),0)516 {517 518 }519 520 template<typename T>521 TRenImagePlanePart<T>::~TRenImagePlanePart()522 {523 this->m_pcData = NULL;524 }525 526 template class TRenImagePlanePart<Pel>;527 template class TRenImagePlanePart<Double>;528 template class TRenImagePlanePart<Bool>;529 template class TRenImagePlanePart<Int>;530 #endif // NH_3D531
Note: See TracChangeset for help on using the changeset viewer.