Commit ad406284 authored by Antoine Regimbeau's avatar Antoine Regimbeau

MRG: Merge branch 'develop' into app_register_pipeline

parents 01bf91b7 c0a46285
......@@ -88,6 +88,9 @@ public:
* GetNumberOfSplits() returns. */
virtual RegionType GetSplit(unsigned int i);
itkSetMacro(DefaultRAM, MemoryPrintType);
itkGetMacro(DefaultRAM, MemoryPrintType);
protected:
StreamingManager();
~StreamingManager() override;
......@@ -111,11 +114,13 @@ private:
StreamingManager(const StreamingManager &); //purposely not implemented
void operator =(const StreamingManager&); //purposely not implemented
/* Compute the available RAM from configuration settings if the input parameter is 0,
* otherwise, simply returns the input parameter */
/** Compute the available RAM in Bytes from an input value in MByte.
* If the input value is 0, it uses the m_DefaultRAM value.
* If m_DefaultRAM is also 0, it uses the configuration settings */
MemoryPrintType GetActualAvailableRAMInBytes(MemoryPrintType availableRAMInMB);
/** Default available RAM in MB */
MemoryPrintType m_DefaultRAM;
};
} // End namespace otb
......
......@@ -31,6 +31,7 @@ namespace otb
template <class TImage>
StreamingManager<TImage>::StreamingManager()
: m_ComputedNumberOfSplits(0)
, m_DefaultRAM(0)
{
}
......@@ -47,8 +48,15 @@ StreamingManager<TImage>::GetActualAvailableRAMInBytes(MemoryPrintType available
if (availableRAMInBytes == 0)
{
// Retrieve it from the configuration
availableRAMInBytes = 1024*1024*ConfigurationManager::GetMaxRAMHint();
if (m_DefaultRAM != 0)
{
availableRAMInBytes = 1024*1024*m_DefaultRAM;
}
else
{
// Retrieve it from the configuration
availableRAMInBytes = 1024*1024*ConfigurationManager::GetMaxRAMHint();
}
}
return availableRAMInBytes;
}
......
......@@ -294,11 +294,17 @@ ImageFileWriter<TInputImage>
sizemode = m_FilenameHelper->GetStreamingSizeMode();
}
double sizevalue = 0.;
unsigned int sizevalue = 0;
// Save the DefaultRAM value for later
unsigned int oldDefaultRAM = m_StreamingManager->GetDefaultRAM();
if (sizemode == "auto")
{
sizevalue = oldDefaultRAM;
}
if(m_FilenameHelper->StreamingSizeValueIsSet())
{
sizevalue = m_FilenameHelper->GetStreamingSizeValue();
sizevalue = static_cast<unsigned int>(m_FilenameHelper->GetStreamingSizeValue());
}
if(type == "auto")
......@@ -307,7 +313,7 @@ ImageFileWriter<TInputImage>
{
otbLogMacro(Warning,<<"In auto streaming type, the sizemode option will be ignored.");
}
if(sizevalue == 0.)
if(sizevalue == 0)
{
otbLogMacro(Warning,<<"sizemode is auto but sizevalue is 0. Value will be fetched from the OTB_MAX_RAM_HINT environment variable if set, or else use the default value");
}
......@@ -317,7 +323,7 @@ ImageFileWriter<TInputImage>
{
if(sizemode == "auto")
{
if(sizevalue == 0.)
if(sizevalue == 0)
{
otbLogMacro(Warning,<<"sizemode is auto but sizevalue is 0. Value will be fetched from the OTB_MAX_RAM_HINT environment variable if set, or else use the default value");
}
......@@ -325,27 +331,27 @@ ImageFileWriter<TInputImage>
}
else if(sizemode == "nbsplits")
{
if(sizevalue == 0.)
if(sizevalue == 0)
{
otbLogMacro(Warning,<<"Streaming sizemode is set to nbsplits but sizevalue is 0. This will result in upredicted behaviour. Please consider setting the sizevalue by using &streaming:sizevalue=x.");
}
this->SetNumberOfDivisionsTiledStreaming(static_cast<unsigned int>(sizevalue));
this->SetNumberOfDivisionsTiledStreaming(sizevalue);
}
else if(sizemode == "height")
{
if(sizevalue == 0.)
if(sizevalue == 0)
{
otbLogMacro(Warning,<<"Streaming sizemode is set to height but sizevalue is 0. This will result in upredicted behaviour. Please consider setting the sizevalue by using &streaming:sizevalue=x.");
}
this->SetTileDimensionTiledStreaming(static_cast<unsigned int>(sizevalue));
this->SetTileDimensionTiledStreaming(sizevalue);
}
}
else if(type == "stripped")
{
if(sizemode == "auto")
{
if(sizevalue == 0.)
if(sizevalue == 0)
{
otbLogMacro(Warning,<<"sizemode is auto but sizevalue is 0. Value will be fetched from configuration file if any, or from cmake configuration otherwise.");
}
......@@ -354,30 +360,34 @@ ImageFileWriter<TInputImage>
}
else if(sizemode == "nbsplits")
{
if(sizevalue == 0.)
if(sizevalue == 0)
{
otbLogMacro(Warning,<<"Streaming sizemode is set to nbsplits but sizevalue is 0. This will result in upredicted behaviour. Please consider setting the sizevalue by using &streaming:sizevalue=x.");
}
this->SetNumberOfDivisionsStrippedStreaming(static_cast<unsigned int>(sizevalue));
this->SetNumberOfDivisionsStrippedStreaming(sizevalue);
}
else if(sizemode == "height")
{
if(sizevalue == 0.)
if(sizevalue == 0)
{
otbLogMacro(Warning,<<"Streaming sizemode is set to height but sizevalue is 0. This will result in upredicted behaviour. Please consider setting the sizevalue by using &streaming:sizevalue=x.");
}
this->SetNumberOfLinesStrippedStreaming(static_cast<unsigned int>(sizevalue));
this->SetNumberOfLinesStrippedStreaming(sizevalue);
}
}
else if (type == "none")
{
if(sizemode!="" || sizevalue!=0.)
if(sizemode!="" || sizevalue!=0)
{
otbLogMacro(Warning,<<"Streaming is explicitly disabled, sizemode and sizevalue will be ignored.");
}
this->SetNumberOfDivisionsTiledStreaming(0);
}
// since we change the m_StreamingManager under the hood, we copy the DefaultRAM
// value to the new streamingManager.
m_StreamingManager->SetDefaultRAM(oldDefaultRAM);
}
else
{
......@@ -468,7 +478,6 @@ ImageFileWriter<TInputImage>
*/
inputPtr->UpdateOutputInformation();
InputImageRegionType inputRegion = inputPtr->GetLargestPossibleRegion();
typename TInputImage::PointType origin = inputPtr->GetOrigin();
/** Parse region size modes */
if(m_FilenameHelper->BoxIsSet())
......@@ -485,9 +494,7 @@ ImageFileWriter<TInputImage>
size[0] = boxVector[2]; // size along X
size[1] = boxVector[3]; // size along Y
inputRegion.SetSize(size);
m_ShiftOutputIndex = start;
inputRegion.SetIndex(m_ShiftOutputIndex);
inputRegion.SetIndex(start);
if (!inputRegion.Crop(inputPtr->GetLargestPossibleRegion()))
{
......@@ -501,11 +508,9 @@ ImageFileWriter<TInputImage>
e.SetDataObject(inputPtr);
throw e;
}
inputPtr->TransformIndexToPhysicalPoint(inputRegion.GetIndex(), origin);
otbLogMacro(Info,<<"Writing user defined region ["<<start[0]<<", "<<start[0]+size[0]-1<<"]x["<<start[1]<<", "<<start[1]+size[1]<<"]");
}
m_ShiftOutputIndex = inputRegion.GetIndex();
/**
* Determine of number of pieces to divide the input. This will be the
......@@ -544,6 +549,8 @@ ImageFileWriter<TInputImage>
//
// Setup the ImageIO with information from inputPtr
//
typename TInputImage::PointType origin;
inputPtr->TransformIndexToPhysicalPoint(inputRegion.GetIndex(), origin);
const typename TInputImage::SpacingType& spacing = inputPtr->GetSpacing();
const typename TInputImage::DirectionType& direction = inputPtr->GetDirection();
m_ImageIO->SetNumberOfDimensions(TInputImage::ImageDimension);
......@@ -665,7 +672,7 @@ ImageFileWriter<TInputImage>
//Reset global shift on input region (box parameter)
//It allows calling multiple update over the writer
m_ShiftOutputIndex.Fill(0);
m_ShiftOutputIndex = inputPtr->GetLargestPossibleRegion().GetIndex();
}
......@@ -721,10 +728,7 @@ ImageFileWriter<TInputImage>
InputImageRegionType ioRegion;
// No shift of the ioRegion from the buffered region is expected
typename InputImageRegionType::IndexType tmpIndex;
tmpIndex.Fill(0);
itk::ImageIORegionAdaptor<TInputImage::ImageDimension>::
//Convert(m_ImageIO->GetIORegion(), ioRegion, tmpIndex);
Convert(m_ImageIO->GetIORegion(), ioRegion, m_ShiftOutputIndex);
InputImageRegionType bufferedRegion = input->GetBufferedRegion();
......
......@@ -315,11 +315,16 @@ SimpleParallelTiffWriter<TInputImage>
sizemode = m_FilenameHelper->GetStreamingSizeMode();
}
double sizevalue = 0.;
unsigned int sizevalue = 0;
// Save the DefaultRAM value for later
unsigned int oldDefaultRAM = m_StreamingManager->GetDefaultRAM();
if (sizemode == "auto")
{
sizevalue = oldDefaultRAM;
}
if(m_FilenameHelper->StreamingSizeValueIsSet())
{
sizevalue = m_FilenameHelper->GetStreamingSizeValue();
sizevalue = static_cast<unsigned int>(m_FilenameHelper->GetStreamingSizeValue());
}
if(type == "auto")
......@@ -328,7 +333,7 @@ SimpleParallelTiffWriter<TInputImage>
{
itkWarningMacro(<<"In auto streaming type, the sizemode option will be ignored.");
}
if(sizevalue == 0.)
if(sizevalue == 0)
{
itkWarningMacro("sizemode is auto but sizevalue is 0. Value will be fetched from configuration file if any, or from cmake configuration otherwise.");
}
......@@ -338,7 +343,7 @@ SimpleParallelTiffWriter<TInputImage>
{
if(sizemode == "auto")
{
if(sizevalue == 0.)
if(sizevalue == 0)
{
itkWarningMacro("sizemode is auto but sizevalue is 0. Value will be fetched from configuration file if any, or from cmake configuration otherwise.");
}
......@@ -346,27 +351,27 @@ SimpleParallelTiffWriter<TInputImage>
}
else if(sizemode == "nbsplits")
{
if(sizevalue == 0.)
if(sizevalue == 0)
{
itkWarningMacro("Streaming sizemode is set to nbsplits but sizevalue is 0. This will result in upredicted behaviour. Please consider setting the sizevalue by using &streaming:sizevalue=x.");
}
this->SetNumberOfDivisionsTiledStreaming(static_cast<unsigned int>(sizevalue));
this->SetNumberOfDivisionsTiledStreaming(sizevalue);
}
else if(sizemode == "height")
{
if(sizevalue == 0.)
if(sizevalue == 0)
{
itkWarningMacro("Streaming sizemode is set to height but sizevalue is 0. This will result in upredicted behaviour. Please consider setting the sizevalue by using &streaming:sizevalue=x.");
}
this->SetTileDimensionTiledStreaming(static_cast<unsigned int>(sizevalue));
this->SetTileDimensionTiledStreaming(sizevalue);
}
}
else if(type == "stripped")
{
if(sizemode == "auto")
{
if(sizevalue == 0.)
if(sizevalue == 0)
{
itkWarningMacro("sizemode is auto but sizevalue is 0. Value will be fetched from configuration file if any, or from cmake configuration otherwise.");
}
......@@ -375,30 +380,34 @@ SimpleParallelTiffWriter<TInputImage>
}
else if(sizemode == "nbsplits")
{
if(sizevalue == 0.)
if(sizevalue == 0)
{
itkWarningMacro("Streaming sizemode is set to nbsplits but sizevalue is 0. This will result in upredicted behaviour. Please consider setting the sizevalue by using &streaming:sizevalue=x.");
}
this->SetNumberOfDivisionsStrippedStreaming(static_cast<unsigned int>(sizevalue));
this->SetNumberOfDivisionsStrippedStreaming(sizevalue);
}
else if(sizemode == "height")
{
if(sizevalue == 0.)
if(sizevalue == 0)
{
itkWarningMacro("Streaming sizemode is set to height but sizevalue is 0. This will result in upredicted behaviour. Please consider setting the sizevalue by using &streaming:sizevalue=x.");
}
this->SetNumberOfLinesStrippedStreaming(static_cast<unsigned int>(sizevalue));
this->SetNumberOfLinesStrippedStreaming(sizevalue);
}
}
else if (type == "none")
{
if(sizemode!="" || sizevalue!=0.)
if(sizemode!="" || sizevalue!=0)
{
itkWarningMacro("Streaming is explicitly disabled, sizemode and sizevalue will be ignored.");
}
this->SetNumberOfDivisionsTiledStreaming(0);
}
// since we change the m_StreamingManager under the hood, we copy the DefaultRAM
// value to the new streamingManager.
m_StreamingManager->SetDefaultRAM(oldDefaultRAM);
}
else
{
......
......@@ -207,6 +207,7 @@ ClampAndWriteVectorImage( itk::ImageBase<2> * in ,
sptWriter->SetFileName(filename);
sptWriter->SetInput(clampFilter->GetOutput());
sptWriter->SetAutomaticAdaptativeStreaming(ramValue);
sptWriter->GetStreamingManager()->SetDefaultRAM(ramValue);
sptWriter->Update();
}
......@@ -222,10 +223,9 @@ ClampAndWriteVectorImage( itk::ImageBase<2> * in ,
if(useStandardWriter)
{
writer->SetFileName( filename );
writer->SetInput(clampFilter->GetOutput());
writer->SetAutomaticAdaptativeStreaming(ramValue);
writer->SetFileName( filename );
writer->SetInput(clampFilter->GetOutput());
writer->GetStreamingManager()->SetDefaultRAM(ramValue);
writer->Update();
}
}
......@@ -348,7 +348,7 @@ OutputImageParameter::SwitchRGBAImageWrite()
{
m_RGBAUInt8Writer->SetFileName( this->GetFileName() );
m_RGBAUInt8Writer->SetInput(dynamic_cast<UInt8RGBAImageType*>(m_Image.GetPointer()) );
m_RGBAUInt8Writer->SetAutomaticAdaptativeStreaming(m_RAMValue);
m_RGBAUInt8Writer->GetStreamingManager()->SetDefaultRAM(m_RAMValue);
m_RGBAUInt8Writer->Update();
}
else
......@@ -363,7 +363,7 @@ OutputImageParameter::SwitchRGBImageWrite()
{
m_RGBUInt8Writer->SetFileName( this->GetFileName() );
m_RGBUInt8Writer->SetInput(dynamic_cast<UInt8RGBImageType*>(m_Image.GetPointer()) );
m_RGBUInt8Writer->SetAutomaticAdaptativeStreaming(m_RAMValue);
m_RGBUInt8Writer->GetStreamingManager()->SetDefaultRAM(m_RAMValue);
m_RGBUInt8Writer->Update();
}
else
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment