From f365becdd37f92d0aebeecb90cf09dd39a03f755 Mon Sep 17 00:00:00 2001
From: Mickael Savinaud <mickael.savinaud@c-s.fr>
Date: Tue, 25 Oct 2011 16:43:14 +0200
Subject: [PATCH] ENH: add time information about JPEG2000 reading

---
 Code/IO/otbJPEG2000ImageIO.cxx                |  9 ++-
 .../Code/Common/otbMultiChannelExtractROI.cxx | 59 +++++++++++++------
 Testing/Code/IO/CMakeLists.txt                | 22 ++++---
 3 files changed, 63 insertions(+), 27 deletions(-)

diff --git a/Code/IO/otbJPEG2000ImageIO.cxx b/Code/IO/otbJPEG2000ImageIO.cxx
index 2a1c9e390f..9eecd4ec78 100644
--- a/Code/IO/otbJPEG2000ImageIO.cxx
+++ b/Code/IO/otbJPEG2000ImageIO.cxx
@@ -19,9 +19,10 @@
 
 
 #include "otbMacro.h"
-
 #include "otbSystem.h"
 
+#include "itkTimeProbe.h"
+
 /**
    sample error debug callback expecting no client object
 */
@@ -191,6 +192,9 @@ void JPEG2000ImageIO::Read(void* buffer)
     buffer_size_y - 1);
   otbMsgDevMacro(<< "Component type: " << this->GetComponentTypeAsString(this->GetComponentType()));
 
+  itk::TimeProbe chrono;
+  chrono.Start();
+
   // Creating openjpeg objects
   if (System::SetToLower(System::GetExtension(m_FileName)) == "j2k")
     {
@@ -346,6 +350,9 @@ void JPEG2000ImageIO::Read(void* buffer)
   fclose(m_File);
   otb_openjpeg_opj_destroy_codec(m_Codec);
   otb_openjpeg_opj_image_destroy(m_OpenJpegImage);
+
+  chrono.Stop();
+  otbMsgDevMacro(<< "JPEG2000_IO Read took " << chrono.GetTotal() << " sec")
 }
 
 void JPEG2000ImageIO::ReadImageInformation()
diff --git a/Testing/Code/Common/otbMultiChannelExtractROI.cxx b/Testing/Code/Common/otbMultiChannelExtractROI.cxx
index d4b873549d..0ff185c317 100644
--- a/Testing/Code/Common/otbMultiChannelExtractROI.cxx
+++ b/Testing/Code/Common/otbMultiChannelExtractROI.cxx
@@ -24,12 +24,17 @@
 
 #include "otbImage.h"
 
+#include "itkTimeProbe.h"
+
+
 template <typename  InputPixelType /*= unsigned char */, typename OutputPixelType /*= unsigned char*/>
 int generic_otbMultiChannelExtractROI(int argc, char * argv[], const char * inputFilename, const char * outputFilename)
 {
   typedef otb::MultiChannelExtractROI<InputPixelType,
       OutputPixelType>  ExtractROIFilterType;
 
+  int computeExtractTime = 0;
+
   typename ExtractROIFilterType::Pointer extractROIFilter = ExtractROIFilterType::New();
   int cpt(0), nbcanaux(0);
 
@@ -60,6 +65,12 @@ int generic_otbMultiChannelExtractROI(int argc, char * argv[], const char * inpu
       std::cout << " ->SetSizeY(" << ::atoi(argv[cpt + 1]) << ")" << std::endl;
       cpt += 2;
       }
+    else if (strArgv == "-time")
+    {
+        std::cout << " ->Extract time will be computed" << std::endl;
+        computeExtractTime = 1;
+        cpt += 1;
+    }
     else if (strArgv == "-channels")
       {
       ++cpt;
@@ -71,7 +82,7 @@ int generic_otbMultiChannelExtractROI(int argc, char * argv[], const char * inpu
           searchChannels = false;
           }
         else
-        //Regarde si ce n'est pas une autre otption
+        // Check if we have set another option
           {
           if (argv[cpt][0] == '-')
             {
@@ -89,12 +100,12 @@ int generic_otbMultiChannelExtractROI(int argc, char * argv[], const char * inpu
       }
     }
 
-  // Resume de la ligne de commande
-  std::cout << " ROI selectionnee : startX " << extractROIFilter->GetStartX() << std::endl;
-  std::cout << "                    startY " << extractROIFilter->GetStartY() << std::endl;
-  std::cout << "                    sizeX  " << extractROIFilter->GetSizeX() << std::endl;
-  std::cout << "                    sizeY  " << extractROIFilter->GetSizeY() << std::endl;
-  std::cout << " Canaux selectionnes (" << extractROIFilter->GetNbChannels() << ") : ";
+  // Resume the command line
+  std::cout << " Selected ROI: startX " << extractROIFilter->GetStartX() << std::endl;
+  std::cout << "               startY " << extractROIFilter->GetStartY() << std::endl;
+  std::cout << "               sizeX  " << extractROIFilter->GetSizeX() << std::endl;
+  std::cout << "               sizeY  " << extractROIFilter->GetSizeY() << std::endl;
+  std::cout << " Selected Channels: (" << extractROIFilter->GetNbChannels() << ") : ";
   typename ExtractROIFilterType::ChannelsType lChannels;
   lChannels = extractROIFilter->GetChannels();
   for (unsigned int i = 0; i < lChannels.size(); ++i)
@@ -102,7 +113,7 @@ int generic_otbMultiChannelExtractROI(int argc, char * argv[], const char * inpu
     std::cout << lChannels[i] << " ";
     }
 
-  std::cout << " Extraction de " << nbcanaux << " de l'image source." << std::endl;
+  std::cout << " Extracted " << nbcanaux << " channels from input image." << std::endl;
 
   // OTB-FA-00008-CS
   typedef otb::ImageFileReader<ITK_TYPENAME ExtractROIFilterType::InputImageType>  ReaderType;
@@ -111,16 +122,30 @@ int generic_otbMultiChannelExtractROI(int argc, char * argv[], const char * inpu
   typename WriterType::Pointer writer = WriterType::New();
 
   reader->SetFileName(inputFilename);
-  //THOMAS
-  //        reader->Update(); //Necessaire pour connaitre le nombre de canaux dans l'image
   writer->SetFileName(outputFilename);
+
   extractROIFilter->SetInput(reader->GetOutput());
 
   writer->SetInput(extractROIFilter->GetOutput());
+
+  itk::TimeProbe chrono;
+
+  if (computeExtractTime)
+  {
+	  chrono.Start();
+  }
+
   writer->Update();
-  std::cout << " Nb canaux dans l'image d'entree : " << reader->GetOutput()->GetNumberOfComponentsPerPixel() <<
+
+  if (computeExtractTime)
+  {
+	  chrono.Stop();
+	  std::cout << " Time to compute the extracted image: " << chrono.GetTotal() << " seconds" << std::endl;
+  }
+
+  std::cout << " Number of channels in the input image: " << reader->GetOutput()->GetNumberOfComponentsPerPixel() <<
   std::endl;
-  std::cout << " Nb canaux dans l'image de sortie : " <<
+  std::cout << " Number of channels in the output image: " <<
   extractROIFilter->GetOutput()->GetNumberOfComponentsPerPixel() << std::endl;
 
   return EXIT_SUCCESS;
@@ -163,8 +188,8 @@ int otbMultiChannelExtractROI(int argc, char * argv[])
 
   argc -= cpt;
   argv += cpt;
-  std::cout << " -> " << linputPixelType << " pour " << inputFilename << std::endl;
-  std::cout << " -> " << loutputPixelType << " pour " << outputFilename << std::endl;
+  std::cout << " -> " << linputPixelType << " for " << inputFilename << std::endl;
+  std::cout << " -> " << loutputPixelType << " for " << outputFilename << std::endl;
   std::string pixelType;
   if ((linputPixelType == "-uchar") &&
       (loutputPixelType ==
@@ -225,9 +250,9 @@ int otbMultiChannelExtractROI(int argc, char * argv[])
                                                                      outputFilename));
   else
     {
-    std::cout << " Erreur : le format des images en entree est mal precise dans la ligne de commande !!!" << std::endl;
-    std::cout << "          valeurs autorisees : -uchar, -char, -ushort, -uint, -float, -double" << std::endl;
-    std::cout << "          valeurs par defaut : -uchar" << std::endl;
+    std::cout << " Error : the output image format is not well defined by the command line !!!" << std::endl;
+    std::cout << "          possible values: -uchar, -char, -ushort, -uint, -float, -double" << std::endl;
+    std::cout << "          default value: -uchar" << std::endl;
     return EXIT_FAILURE;
     }
 
diff --git a/Testing/Code/IO/CMakeLists.txt b/Testing/Code/IO/CMakeLists.txt
index 33f72d957a..6b802676eb 100644
--- a/Testing/Code/IO/CMakeLists.txt
+++ b/Testing/Code/IO/CMakeLists.txt
@@ -1961,8 +1961,9 @@ IF(OTB_DATA_USE_LARGEINPUT)
          otbMultiChannelExtractROI
          -ushort ${LARGEDATA}/PLEIADES-PRE/VERSION2/IMG_PHR_001/IMG_R3C1.JP2
          -ushort ${TEMP}/ioTvJP22TIF_Extract_PLEIADES-PRE-R3C1.tif
-         -startX 0 -startY 0 -sizeX 128 -sizeY 128
-         -channels 1
+         -startX 256 -startY 512 -sizeX 256 -sizeY 128
+         -channels 1 2 3 4
+         -time
          )
          
   ADD_TEST(ioTvVectorImageFileReaderWriterJP22TIF_PLEIADES-PRE-R3C1-4tiles ${COMMON_TESTS2}
@@ -1971,8 +1972,9 @@ IF(OTB_DATA_USE_LARGEINPUT)
          otbMultiChannelExtractROI
          -ushort ${LARGEDATA}/PLEIADES-PRE/VERSION2/IMG_PHR_001/IMG_R3C1.JP2
          -ushort ${TEMP}/ioTvJP22TIF_Extract_PLEIADES-PRE-R3C1-4tiles.tif
-         -startX 2000 -startY 2000 -sizeX 128 -sizeY 128
-         -channels 1
+         -startX 2000 -startY 2000 -sizeX 256 -sizeY 128
+         -channels 1 2 3 4
+         -time
          )
 
   ADD_TEST(ioTvVectorImageFileReaderWriterJP22TIF_PLEIADES-PRE-R4C1 ${COMMON_TESTS2}
@@ -1981,8 +1983,9 @@ IF(OTB_DATA_USE_LARGEINPUT)
          otbMultiChannelExtractROI
          -ushort ${LARGEDATA}/PLEIADES-PRE/VERSION2/IMG_PHR_001/IMG_R4C1.JP2
          -ushort ${TEMP}/ioTvJP22TIF_Extract_PLEIADES-PRE-R4C1.tif
-         -startX 0 -startY 0 -sizeX 128 -sizeY 128
-         -channels 3
+         -startX 256 -startY 512 -sizeX 256 -sizeY 128
+         -channels 1 2 3 4
+         -time
          )
          
   ADD_TEST(ioTvVectorImageFileReaderWriterJP22TIF_PLEIADES-PRE-R4C1-4tiles ${COMMON_TESTS2}
@@ -1990,9 +1993,10 @@ IF(OTB_DATA_USE_LARGEINPUT)
                                        ${TEMP}/ioTvJP22TIF_Extract_PLEIADES-PRE-R4C1-4tiles.tif
          otbMultiChannelExtractROI
          -ushort ${LARGEDATA}/PLEIADES-PRE/VERSION2/IMG_PHR_001/IMG_R4C1.JP2
-         -ushort ${TEMP}/ioTvJP22TIF_Extract_PLEIADES-PRE-R3C1-4tiles.tif
-         -startX 2000 -startY 2000 -sizeX 128 -sizeY 128
-         -channels 1
+         -ushort ${TEMP}/ioTvJP22TIF_Extract_PLEIADES-PRE-R4C1-4tiles.tif
+         -startX 2000 -startY 2000 -sizeX 256 -sizeY 128
+         -channels 1 2 3 4
+         -time
          )
 
 ENDIF(OTB_DATA_USE_LARGEINPUT)
-- 
GitLab