From e00416f870a8f7a36a9b393aca664737dc6cb02e Mon Sep 17 00:00:00 2001
From: Julien Michel <julien.michel@cnes.fr>
Date: Wed, 4 Nov 2015 11:13:06 +0100
Subject: [PATCH] PERF: Optimize WarpImageFilter by avoiding refcount bouncing

---
 Modules/ThirdParty/ITK/include/otbWarpImageFilter.h   | 2 +-
 Modules/ThirdParty/ITK/include/otbWarpImageFilter.txx | 5 ++---
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/Modules/ThirdParty/ITK/include/otbWarpImageFilter.h b/Modules/ThirdParty/ITK/include/otbWarpImageFilter.h
index 0a2041d60b..19f46d9a65 100644
--- a/Modules/ThirdParty/ITK/include/otbWarpImageFilter.h
+++ b/Modules/ThirdParty/ITK/include/otbWarpImageFilter.h
@@ -257,7 +257,7 @@ private:
   /** This function should be in an interpolator but none of the ITK
    * interpolators at this point handle edge conditions properly
    */
-  DisplacementType EvaluateDisplacementAtPhysicalPoint(const PointType &p);
+  DisplacementType EvaluateDisplacementAtPhysicalPoint(const PointType &p, const DisplacementFieldType *fieldPtr);
 
   PixelType                  m_EdgePaddingValue;
   SpacingType                m_OutputSpacing;
diff --git a/Modules/ThirdParty/ITK/include/otbWarpImageFilter.txx b/Modules/ThirdParty/ITK/include/otbWarpImageFilter.txx
index a57a72f045..7f0719b187 100644
--- a/Modules/ThirdParty/ITK/include/otbWarpImageFilter.txx
+++ b/Modules/ThirdParty/ITK/include/otbWarpImageFilter.txx
@@ -214,9 +214,8 @@ typename WarpImageFilter<TInputImage,
                          TOutputImage,
                          TDisplacementField>::DisplacementType
 WarpImageFilter<TInputImage,TOutputImage,TDisplacementField>
-::EvaluateDisplacementAtPhysicalPoint(const PointType &point)
+::EvaluateDisplacementAtPhysicalPoint(const PointType &point, const DisplacementFieldType *fieldPtr)
 {
-  DisplacementFieldPointer fieldPtr = this->GetDisplacementField();
   itk::ContinuousIndex<double,ImageDimension> index;
   fieldPtr->TransformPhysicalPointToContinuousIndex(point,index);
   unsigned int dim;  // index over dimension
@@ -377,7 +376,7 @@ WarpImageFilter<TInputImage,TOutputImage,TDisplacementField>
       index = outputIt.GetIndex();
       outputPtr->TransformIndexToPhysicalPoint( index, point );
 
-      displacement = this->EvaluateDisplacementAtPhysicalPoint(point);
+      displacement = this->EvaluateDisplacementAtPhysicalPoint( point, fieldPtr );
       // compute the required input image point
       for(unsigned int j = 0; j < ImageDimension; j++ )
         {
-- 
GitLab