From 23c3eac94800badb1015cad6268b57f78ce209df Mon Sep 17 00:00:00 2001
From: Julien Malik <julien.malik@c-s.fr>
Date: Thu, 15 Dec 2011 14:31:40 +0100
Subject: [PATCH] BACKOUT: revert changes in ImageRegionSquareTileSplitter,
 buggy and too much impact

---
 .../Common/otbImageRegionSquareTileSplitter.h |  3 +-
 .../otbImageRegionSquareTileSplitter.txx      | 68 ++++---------------
 2 files changed, 13 insertions(+), 58 deletions(-)

diff --git a/Code/Common/otbImageRegionSquareTileSplitter.h b/Code/Common/otbImageRegionSquareTileSplitter.h
index 637731b23c..10dd5b71e4 100644
--- a/Code/Common/otbImageRegionSquareTileSplitter.h
+++ b/Code/Common/otbImageRegionSquareTileSplitter.h
@@ -124,7 +124,7 @@ public:
   itkGetMacro(TileDimension, unsigned int);
 
 protected:
-  ImageRegionSquareTileSplitter() : m_SplitsPerDimension(0U), m_TileDimension(0), m_TileSizeAlignment(0), m_TileHint(2048) {}
+  ImageRegionSquareTileSplitter() : m_SplitsPerDimension(0U), m_TileDimension(0), m_TileSizeAlignment(16) {}
   virtual ~ImageRegionSquareTileSplitter() {}
   void PrintSelf(std::ostream& os, itk::Indent indent) const;
 
@@ -135,7 +135,6 @@ private:
   itk::FixedArray<unsigned int, VImageDimension> m_SplitsPerDimension;
   unsigned int m_TileDimension;
   unsigned int m_TileSizeAlignment;
-  unsigned int m_TileHint;
 };
 
 } // end namespace otb
diff --git a/Code/Common/otbImageRegionSquareTileSplitter.txx b/Code/Common/otbImageRegionSquareTileSplitter.txx
index 31e5751264..a964c82dd4 100644
--- a/Code/Common/otbImageRegionSquareTileSplitter.txx
+++ b/Code/Common/otbImageRegionSquareTileSplitter.txx
@@ -33,23 +33,8 @@ ImageRegionSquareTileSplitter<VImageDimension>
   unsigned int theoricalNbPixelPerTile = region.GetNumberOfPixels() / requestedNumber;
   unsigned int theoricalTileDimension = static_cast<unsigned int> (vcl_sqrt(static_cast<double>(theoricalNbPixelPerTile)) );
 
-  m_TileDimension = m_TileHint;
-
-  // If we have less than one jpeg 2000 tile, split in sub-tiles
-  if(theoricalTileDimension < m_TileHint)
-    {
-    while(m_TileDimension > theoricalTileDimension)
-      {
-      m_TileDimension/=2;
-      }
-    }
-    else
-      {
-      while(2*m_TileDimension < theoricalTileDimension)
-        {
-        m_TileDimension*=2;
-        }
-      }
+  // Take the next multiple of m_TileSizeAlignment (eventually generate more splits than requested)
+  m_TileDimension = (theoricalTileDimension + m_TileSizeAlignment - 1) / m_TileSizeAlignment * m_TileSizeAlignment;
 
   // Minimal tile size is m_TileSizeAlignment * m_TileSizeAlignment
   if (m_TileDimension < m_TileSizeAlignment)
@@ -93,55 +78,26 @@ ImageRegionSquareTileSplitter<VImageDimension>
     itkExceptionMacro("Asked for split number " << i << " but region contains only " << numPieces << " splits");
     }
 
-  // First, find the megatile index
-
-  unsigned int tilesPerMegaTilesPerDim = m_TileHint / m_TileDimension;
-
-  if(tilesPerMegaTilesPerDim == 0)
-    {
-    tilesPerMegaTilesPerDim = 1;
-    }
-
-  // Can't use more tiles than the number of splits per dim
-  if (tilesPerMegaTilesPerDim > m_SplitsPerDimension[0])
-    tilesPerMegaTilesPerDim = m_SplitsPerDimension[0];
-
-  if (tilesPerMegaTilesPerDim > m_SplitsPerDimension[1])
-    tilesPerMegaTilesPerDim = m_SplitsPerDimension[1];
-
-
-  unsigned int tilesPerMegaTiles = tilesPerMegaTilesPerDim*tilesPerMegaTilesPerDim;
-
-  unsigned int remaining = i / tilesPerMegaTiles;
+  // Compute the split index in the streaming grid
+  unsigned int remaining = i;
   for (unsigned int j = VImageDimension - 1; j > 0; --j)
     {
-    splitIndex[j] = tilesPerMegaTilesPerDim * remaining / (m_SplitsPerDimension[VImageDimension - 1 - j] / tilesPerMegaTilesPerDim);
-    remaining = remaining % (m_SplitsPerDimension[VImageDimension - 1 - j] / tilesPerMegaTilesPerDim);
+    splitIndex[j] = remaining / m_SplitsPerDimension[VImageDimension - 1 - j];
+    remaining = remaining % m_SplitsPerDimension[VImageDimension - 1 - j];
     }
-  splitIndex[0] = tilesPerMegaTilesPerDim * remaining;
+  splitIndex[0] = remaining;
 
-  // Now splitIndex contains the megaTile index
-  remaining = i % tilesPerMegaTiles;
-  for (unsigned int j = VImageDimension - 1; j > 0; --j)
-    {
-    splitIndex[j] += remaining / tilesPerMegaTilesPerDim;
-    remaining = remaining % (tilesPerMegaTilesPerDim);
-    }
-  splitIndex[0]+= remaining;
-  
-  // Now split index contains the tile index
-    
   // Transform the split index to the actual coordinates
   for (unsigned int j = 0; j < VImageDimension; ++j)
     {
     splitRegion.SetIndex(j, region.GetIndex(j) + m_TileDimension * splitIndex[j]);
     splitRegion.SetSize(j, m_TileDimension);
     }
-    
-    // Handle the borders
-    splitRegion.Crop(region);
-    
-    return splitRegion;
+
+  // Handle the borders
+  splitRegion.Crop(region);
+
+  return splitRegion;
 }
 
 /**
-- 
GitLab