You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 lines
2.5 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkThreadedImageWriter.h
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
/**
* @class vtkThreadedImageWriter
* @brief class used to compress/write images using threads to prevent
* locking while encoding data.
*
* @details This writer allow to encode an image data based on its file
* extension: tif, tiff, bpm, png, jpg, jpeg, vti, Z, ppm, raw
*
* @author Patricia Kroll Fasel @ LANL
*/
#ifndef vtkThreadedImageWriter_h
#define vtkThreadedImageWriter_h
#include "vtkIOAsynchronousModule.h" // For export macro
#include "vtkObject.h"
class vtkImageData;
class VTKIOASYNCHRONOUS_EXPORT vtkThreadedImageWriter : public vtkObject
{
public:
static vtkThreadedImageWriter* New();
vtkTypeMacro(vtkThreadedImageWriter, vtkObject);
void PrintSelf(ostream& os, vtkIndent indent) override;
/**
* Need to be called at least once before using the class.
* Then it should be called again after any change on the
* thread count or if Finalize() was called.
*
* This method will wait for any running thread to terminate and start
* a new pool with the given number of threads.
*/
void Initialize();
/**
* Push an image into the threaded writer. It is not safe to modify the image
* after this point.
* You may run into thread safety issues. Typically, the caller code will
* simply release reference to the data and stop using it.
*/
void EncodeAndWrite(vtkImageData* image, const char* fileName);
/**
* Define the number of worker thread to use.
* Initialize() need to be called after any thread count change.
*/
void SetMaxThreads(vtkTypeUInt32);
vtkGetMacro(MaxThreads, vtkTypeUInt32);
/**
* This method will wait for any running thread to terminate.
*/
void Finalize();
protected:
vtkThreadedImageWriter();
~vtkThreadedImageWriter() override;
private:
vtkThreadedImageWriter(const vtkThreadedImageWriter&) = delete;
void operator=(const vtkThreadedImageWriter&) = delete;
class vtkInternals;
vtkInternals* Internals;
vtkTypeUInt32 MaxThreads;
};
#endif