VTK  9.2.6
vtkVideoSource.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkVideoSource.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
32 #ifndef vtkVideoSource_h
33 #define vtkVideoSource_h
34 
35 #include "vtkIOVideoModule.h" // For export macro
36 #include "vtkImageAlgorithm.h"
37 
38 #include <mutex> // for std::mutex
39 
40 class vtkTimerLog;
41 class vtkMultiThreader;
42 class vtkScalarsToColors;
43 
44 class VTKIOVIDEO_EXPORT vtkVideoSource : public vtkImageAlgorithm
45 {
46 public:
47  static vtkVideoSource* New();
49  void PrintSelf(ostream& os, vtkIndent indent) override;
50 
55  virtual void Record();
56 
61  virtual void Play();
62 
66  virtual void Stop();
67 
73  virtual void Rewind();
74 
79  virtual void FastForward();
80 
85  virtual void Seek(int n);
86 
90  virtual void Grab();
91 
93 
97  vtkGetMacro(Recording, int);
99 
101 
105  vtkGetMacro(Playing, int);
107 
109 
117  virtual void SetFrameSize(int x, int y, int z);
118  virtual void SetFrameSize(int dim[3]) { this->SetFrameSize(dim[0], dim[1], dim[2]); }
119  vtkGetVector3Macro(FrameSize, int);
121 
123 
126  virtual void SetFrameRate(float rate);
127  vtkGetMacro(FrameRate, float);
129 
131 
135  virtual void SetOutputFormat(int format);
136  void SetOutputFormatToLuminance() { this->SetOutputFormat(VTK_LUMINANCE); }
137  void SetOutputFormatToRGB() { this->SetOutputFormat(VTK_RGB); }
138  void SetOutputFormatToRGBA() { this->SetOutputFormat(VTK_RGBA); }
139  vtkGetMacro(OutputFormat, int);
141 
143 
147  virtual void SetFrameBufferSize(int FrameBufferSize);
148  vtkGetMacro(FrameBufferSize, int);
150 
152 
158  vtkSetMacro(NumberOfOutputFrames, int);
159  vtkGetMacro(NumberOfOutputFrames, int);
161 
163 
167  vtkBooleanMacro(AutoAdvance, vtkTypeBool);
168  vtkSetMacro(AutoAdvance, vtkTypeBool);
169  vtkGetMacro(AutoAdvance, vtkTypeBool);
171 
173 
179  virtual void SetClipRegion(int r[6]) { this->SetClipRegion(r[0], r[1], r[2], r[3], r[4], r[5]); }
180  virtual void SetClipRegion(int x0, int x1, int y0, int y1, int z0, int z1);
181  vtkGetVector6Macro(ClipRegion, int);
183 
185 
194  vtkSetVector6Macro(OutputWholeExtent, int);
195  vtkGetVector6Macro(OutputWholeExtent, int);
197 
199 
203  vtkSetVector3Macro(DataSpacing, double);
204  vtkGetVector3Macro(DataSpacing, double);
206 
208 
212  vtkSetVector3Macro(DataOrigin, double);
213  vtkGetVector3Macro(DataOrigin, double);
215 
217 
222  vtkSetMacro(Opacity, float);
223  vtkGetMacro(Opacity, float);
225 
227 
231  vtkGetMacro(FrameCount, int);
232  vtkSetMacro(FrameCount, int);
234 
236 
240  vtkGetMacro(FrameIndex, int);
242 
249  virtual double GetFrameTimeStamp(int frame);
250 
256  double GetFrameTimeStamp() { return this->FrameTimeStamp; }
257 
259 
263  virtual void Initialize();
264  virtual int GetInitialized() { return this->Initialized; }
266 
272  virtual void ReleaseSystemResources();
273 
279  virtual void InternalGrab();
280 
282 
286  void SetStartTimeStamp(double t) { this->StartTimeStamp = t; }
287  double GetStartTimeStamp() { return this->StartTimeStamp; }
289 
290 protected:
291  vtkVideoSource();
292  ~vtkVideoSource() override;
294 
296 
297  int FrameSize[3];
298  int ClipRegion[6];
299  int OutputWholeExtent[6];
300  double DataSpacing[3];
301  double DataOrigin[3];
303  // set according to the OutputFormat
305  // The FrameOutputExtent is the WholeExtent for a single output frame.
306  // It is initialized in ExecuteInformation.
307  int FrameOutputExtent[6];
308 
309  // save this information from the output so that we can see if the
310  // output scalars have changed
312  int LastOutputExtent[6];
313 
315  int Playing;
316  float FrameRate;
318 
321 
324 
325  float Opacity;
326 
327  // true if Execute() must apply a vertical flip to each frame
329 
330  // set if output needs to be cleared to be cleared before being written
332 
333  // An example of asynchrony
336 
337  // A mutex for the frame buffer: must be applied when any of the
338  // below data is modified.
339  std::mutex FrameBufferMutex;
340 
341  // set according to the needs of the hardware:
342  // number of bits per framebuffer pixel
344  // byte alignment of each row in the framebuffer
346  // FrameBufferExtent is the extent of frame after it has been clipped
347  // with ClipRegion. It is initialized in CheckBuffer().
348  int FrameBufferExtent[6];
349 
351 
352  // where the current frame is, note this decreases in time
353  // increasing values are older frames
355 
356  // number of frames from the beginning sort of,
357  // it does wrap, sometimes
359 
360  void** FrameBuffer;
362 
364 
367  virtual void UpdateFrameBuffer();
368  virtual void AdvanceFrameBuffer(int n);
370  // if some component conversion is required, it is done here:
371  virtual void UnpackRasterLine(char* outPtr, char* rowPtr, int start, int count);
373 
374 private:
375  vtkVideoSource(const vtkVideoSource&) = delete;
376  void operator=(const vtkVideoSource&) = delete;
377 };
378 
379 #endif
virtual int GetInitialized()
Initialize the hardware.
Store vtkAlgorithm input/output information.
virtual void SetClipRegion(int r[6])
Set the clip rectangle for the frames.
void SetOutputFormatToRGB()
Set the output format.
A class for performing multithreaded execution.
int NumberOfScalarComponents
double * FrameBufferTimeStamps
Superclass of video input devices for VTK.
virtual void SetFrameSize(int dim[3])
Set the full-frame size.
void SetOutputFormatToRGBA()
Set the output format.
#define VTK_LUMINANCE
int vtkTypeBool
Definition: vtkABI.h:69
Timer support and logging.
Definition: vtkTimerLog.h:95
Superclass for mapping scalar values to colors.
vtkTypeBool AutoAdvance
a simple class to control print indentation
Definition: vtkIndent.h:39
virtual int RequestInformation(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector)
Subclasses can reimplement this method to collect information from their inputs and set information f...
double GetStartTimeStamp()
And internal variable which marks the beginning of a Record session.
vtkMultiThreader * PlayerThreader
double GetFrameTimeStamp()
Get a time stamp in seconds (resolution of milliseconds) for the Output.
void SetOutputFormatToLuminance()
Set the output format.
#define VTK_RGBA
#define VTK_RGB
int OutputNeedsInitialization
std::mutex FrameBufferMutex
Generic algorithm superclass for image algs.
Store zero or more vtkInformation instances.
static vtkAlgorithm * New()
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void SetStartTimeStamp(double t)
And internal variable which marks the beginning of a Record session.
virtual int RequestData(vtkInformation *request, vtkInformationVector **inputVector, vtkInformationVector *outputVector)
This is called in response to a REQUEST_DATA request from the executive.
int LastNumberOfScalarComponents