MeVisLab Toolbox Reference
mlBackgroundTaskTileProcessor.h
Go to the documentation of this file.
1 /*************************************************************************************
2 **
3 ** Copyright 2009, MeVis Medical Solutions AG
4 **
5 ** The user may use this file in accordance with the license agreement provided with
6 ** the Software or, alternatively, in accordance with the terms contained in a
7 ** written agreement between the user and MeVis Medical Solutions AG.
8 **
9 ** For further information use the contact form at https://www.mevislab.de/contact
10 **
11 **************************************************************************************/
12 
13 #ifndef ML_BACKGROUND_TASK_TILE_PROCESSOR_H
14 #define ML_BACKGROUND_TASK_TILE_PROCESSOR_H
15 
16 // Local includes
18 
20 #include "mlTileIterator.h"
21 
22 #include <ThirdPartyWarningsDisable.h>
23 #include <deque>
24 #include <ThirdPartyWarningsRestore.h>
25 
26 ML_START_NAMESPACE
27 
28 //-----------------------------------------------------------------------
29 
30 class ModuleBackgroundTask;
31 
35 {
36 public:
38 
41 
42  //--------------------------------------------------------------------------------------------
43  //
46  //
47  //--------------------------------------------------------------------------------------------
48 
50  virtual SubImageBox getNextTileBox() = 0;
51 
53  virtual bool processTile(ManagedSubImage& image) = 0;
54 
58 
60 
61  //--------------------------------------------------------------------------------------------
62  //
65  //
66  //--------------------------------------------------------------------------------------------
67 
69  void setDataType(MLDataType dt) { _dataType = dt; }
71  MLDataType getDataType() const { return _dataType; }
72 
74  void setInputImageIndex(int index) { _inputImageIndex = index; }
76  int getInputImageIndex() const { return _inputImageIndex; }
77 
80  void setAllocationPolicy(TileRequest::AllocationPolicy policy) { _allocationPolicy = policy; }
81 
83  void setMaximumQueuedTiles(int size) { _maxQueuedTiles = size; }
84 
86 
87  //--------------------------------------------------------------------------------------------
88  //
91  //
92  //--------------------------------------------------------------------------------------------
93 
95  virtual bool doProcessing(ModuleBackgroundTask& task);
96 
98 
99 protected:
101  virtual bool setupProcessing(ModuleBackgroundTask& /*task*/) { return true; }
102 
104  virtual bool cleanupProcessing(ModuleBackgroundTask& /*task*/) { return true; }
105 
107  void setNumTiles(MLint tiles) { _numTiles = tiles; }
108 
109 private:
110  int _maxQueuedTiles;
111  std::deque<ImagingBackgroundTask::AsyncTileRequest > _queue;
112 
113  int _inputImageIndex;
114  MLDataType _dataType;
115  TileRequest::AllocationPolicy _allocationPolicy;
116 
117  MLint _numTiles;
118 };
119 
120 
121 //----------------------------------------------------------------------------------------------
122 
128 {
129 public:
131 
132  //--------------------------------------------------------------------------------------------
133  //
136  //
137  //--------------------------------------------------------------------------------------------
138 
140  void setRegion(const SubImageBox& box) { _box = box; }
141 
144  void setTileExtent(const ImageVector& extent) { _tileExtent = extent; }
145 
149  void setClipTilesToRegion(bool clip) { _clipTiles = clip; }
150 
152 
155 
157  bool setupProcessing(ModuleBackgroundTask& task) override;
158 
159 private:
160  TileIterator _iterator;
161  SubImageBox _box;
162  ImageVector _tileExtent;
163  bool _clipTiles;
164 };
165 
166 ML_END_NAMESPACE
167 
168 #endif
169 
170 
#define MLBACKGROUNDTASKS_EXPORT
BackgroundTaskTileProcessorBase is the base class for processors that request an input image tile-by-...
virtual ManagedSubImage * createExternalBuffer(const SubImageBox &box)
Only needs to be reimplemented to allocate the memory for your tiles yourself.
MLDataType getDataType() const
Returns the data type.
virtual bool setupProcessing(ModuleBackgroundTask &)
Needs to be reimplemented to set up necessary elements before doProcessing() is called to requests ti...
void setAllocationPolicy(TileRequest::AllocationPolicy policy)
Sets the allocation policy of the tiles that are passed to processTile().
virtual bool doProcessing(ModuleBackgroundTask &task)
Starts the processing and returns true if everything went fine.
void setNumTiles(MLint tiles)
Sets the number of tiles that will be processed.
void setInputImageIndex(int index)
Sets the input image from which data is requested. The default is 0.
int getInputImageIndex() const
Returns the input image index.
virtual SubImageBox getNextTileBox()=0
Reimplement to return the next tile's SubImageBox.
void setDataType(MLDataType dt)
Sets the data type. If it is not set, it will use the input image data type.
virtual bool cleanupProcessing(ModuleBackgroundTask &)
Needs to be reimplemented to clean up elements after doProcessing() is called to finished processing ...
void setMaximumQueuedTiles(int size)
Sets the number of tiles that are allowed to be requested on the request queue.
virtual bool processTile(ManagedSubImage &image)=0
Reimplement to process the given tile. Return true if everything was okay.
A BackgroundTaskTileProcessor can be used as a base class for processing an input image tile-by-tile ...
void setTileExtent(const ImageVector &extent)
Sets the desired extent of the individual tiles A component value of -1 means to use the region's ext...
void setRegion(const SubImageBox &box)
Sets the box that shall be processed tile-by-tile. Default is the complete input image's box.
SubImageBox getNextTileBox() override
Reimplemented to return the next tile's box as given by the iterator.
void setClipTilesToRegion(bool clip)
Sets whether the tiles are clipped to the requested region, which means that the tiles are smaller on...
bool setupProcessing(ModuleBackgroundTask &task) override
Reimplemented to set up necessary elements before doProcessing() is called to requests tiles.
ManagedSubImage is derived from SubImage and frees its allocated memory automatically when it is dest...
ModuleBackgroundTask extends the ImagingBackgroundTask with several useful methods that allow asynchr...
Iterator that takes a region and a tile extent, and returns subsequent tiles that cover the region st...
AllocationPolicy
Defines how the TileRequest will allocate its memory.
Definition: mlTileRequest.h:86
MLint32 MLDataType
MLDataType.
Definition: mlTypeDefs.h:596
MLint64 MLint
A signed ML integer type with at least 64 bits used for index calculations on very large images even ...
Definition: mlTypeDefs.h:490