18 #ifndef __otbStreamingImageVirtualWriter_txx
19 #define __otbStreamingImageVirtualWriter_txx
23 #include "otbConfigure.h"
37 template <
class TInputImage>
40 : m_NumberOfDivisions(0),
42 m_DivisionProgress(0.0),
48 this->SetAutomaticAdaptativeStreaming();
51 template <
class TInputImage>
57 template <
class TInputImage>
62 Superclass::PrintSelf(os, indent);
65 template <
class TInputImage>
71 typename NumberOfDivisionsStrippedStreamingManagerType::Pointer streamingManager = NumberOfDivisionsStrippedStreamingManagerType::New();
72 streamingManager->SetNumberOfDivisions(nbDivisions);
74 m_StreamingManager = streamingManager;
77 template <
class TInputImage>
83 typename NumberOfDivisionsTiledStreamingManagerType::Pointer streamingManager = NumberOfDivisionsTiledStreamingManagerType::New();
84 streamingManager->SetNumberOfDivisions(nbDivisions);
86 m_StreamingManager = streamingManager;
89 template <
class TInputImage>
95 typename NumberOfLinesStrippedStreamingManagerType::Pointer streamingManager = NumberOfLinesStrippedStreamingManagerType::New();
96 streamingManager->SetNumberOfLinesPerStrip(nbLinesPerStrip);
98 m_StreamingManager = streamingManager;
101 template <
class TInputImage>
107 typename RAMDrivenStrippedStreamingManagerType::Pointer streamingManager = RAMDrivenStrippedStreamingManagerType::New();
108 streamingManager->SetAvailableRAMInMB(availableRAM);
109 streamingManager->SetBias(bias);
110 m_StreamingManager = streamingManager;
113 template <
class TInputImage>
119 typename TileDimensionTiledStreamingManagerType::Pointer streamingManager = TileDimensionTiledStreamingManagerType::New();
120 streamingManager->SetTileDimension(tileDimension);
122 m_StreamingManager = streamingManager;
125 template <
class TInputImage>
131 typename RAMDrivenTiledStreamingManagerType::Pointer streamingManager = RAMDrivenTiledStreamingManagerType::New();
132 streamingManager->SetAvailableRAMInMB(availableRAM);
133 streamingManager->SetBias(bias);
134 m_StreamingManager = streamingManager;
137 template <
class TInputImage>
143 typename RAMDrivenAdaptativeStreamingManagerType::Pointer streamingManager = RAMDrivenAdaptativeStreamingManagerType::New();
144 streamingManager->SetAvailableRAMInMB(availableRAM);
145 streamingManager->SetBias(bias);
146 m_StreamingManager = streamingManager;
150 template <
class TInputImage>
158 typename InputImageRegionType::SizeType size;
159 typename InputImageRegionType::IndexType index;
163 region.SetSize(size);
164 region.SetIndex(index);
165 inputPtr->SetRequestedRegion(region);
168 template<
class TInputImage>
176 this->PrepareOutputs();
177 this->SetAbortGenerateData(0);
178 this->SetProgress(0.0);
179 this->m_Updating =
true;
195 m_StreamingManager->PrepareStreaming(inputPtr, outputRegion);
196 m_NumberOfDivisions = m_StreamingManager->GetNumberOfSplits();
203 m_IsObserving =
false;
210 typedef typename CommandType::Pointer CommandPointerType;
212 CommandPointerType command = CommandType::New();
213 command->SetCallbackFunction(
this, &Self::ObserveSourceFilterProgress);
216 m_IsObserving =
true;
220 itkWarningMacro(<<
"Could not get the source process object. Progress report might be buggy");
228 for (m_CurrentDivision = 0;
229 m_CurrentDivision < m_NumberOfDivisions && !this->GetAbortGenerateData();
230 m_CurrentDivision++, m_DivisionProgress = 0, this->UpdateFilterProgress())
232 streamRegion = m_StreamingManager->GetSplit(m_CurrentDivision);
234 inputPtr->ReleaseData();
235 inputPtr->SetRequestedRegion(streamRegion);
243 if (!this->GetAbortGenerateData())
245 this->UpdateProgress(1.0);
253 m_IsObserving =
false;
260 for (
unsigned int idx = 0; idx < this->GetNumberOfOutputs(); ++idx)
262 if (this->GetOutput(idx))
264 this->GetOutput(idx)->DataHasBeenGenerated();
271 this->ReleaseInputs();