template<class DstArrayT, class SrcArrayT, class KerArrayT, class PixOpT, class RedOpT>
Definition at line 26 of file PatGenConv2d.h. References ArrayCH(), ArrayCW(), Impala::Core::Array::CheckBorderSize(), FuncGenConv2dDispatch(), Impala::Core::Array::PAR_PART, PatSetBorder(), PxArrayDeletePD(), PxArrayForceNonDistributed(), PxArrayPD(), PxArrayPostStateTrans(), PxArrayPreStateTrans(), PxRunLazyParallel(), PxRunParallel(), STRONG, and WEAK. Referenced by Impala::Core::Array::Dilation(), Impala::Samples::Talk::DoTalkGenConv2d(), Impala::Core::Array::Erosion(), and Impala::Core::Array::GaussDerivative2d(). 00028 { 00029 int numX = ArrayCW(ker) / 2; 00030 int numY = ArrayCH(ker) / 2; 00031 SrcArrayT* checkedSrc = CheckBorderSize(src, numX, numY); 00032 00033 if ((dst == 0) || (dst == checkedSrc)) 00034 dst = ArrayClone<DstArrayT>(checkedSrc); 00035 00036 #ifdef PX_HORUS_USED 00037 if (!PxRunParallel()) { // run sequential 00038 #endif 00039 /* 00040 if (borderType == BORDERCONSTANT) 00041 PatSetBorder(checkedSrc, numX, numY, borderType, 00042 redOp.NeutralElement(), redOp.NeutralElement(), 00043 redOp.NeutralElement(), redOp.NeutralElement(), 00044 redOp.NeutralElement()); 00045 else 00046 */ 00047 PatSetBorder(checkedSrc, numX, numY); 00048 FuncGenConv2dDispatch(dst, checkedSrc, ker, pixOp, redOp); 00049 00050 #ifdef PX_HORUS_USED 00051 } else { // run parallel 00052 PxArrayPreStateTrans(checkedSrc, PAR_PART, STRONG); 00053 PxArrayPreStateTrans(dst, PAR_PART, WEAK); 00054 PatSetBorder(PxArrayPD(checkedSrc), numX, numY); 00055 FuncGenConv2dDispatch(PxArrayPD(dst), 00056 PxArrayPD(checkedSrc), ker, pixOp, redOp); 00057 if (PxArrayPD(checkedSrc) != PxArrayPD(src)) 00058 PxArrayDeletePD(checkedSrc); 00059 PxArrayPostStateTrans(dst); 00060 00061 if (!PxRunLazyParallel()) { 00062 PxArrayForceNonDistributed(src); 00063 PxArrayForceNonDistributed(dst); 00064 } 00065 } 00066 #endif 00067 00068 if (checkedSrc != src) 00069 delete checkedSrc; 00070 }
Here is the call graph for this function:
|