VTK  9.1.0
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:
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
Generic algorithm superclass for image algs.
a simple class to control print indentation
Definition: vtkIndent.h:34
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
A class for performing multithreaded execution.
Superclass for mapping scalar values to colors.
Timer support and logging.
Definition: vtkTimerLog.h:90
Superclass of video input devices for VTK.
virtual void SetFrameRate(float rate)
Request a particular frame rate (default 30 frames per second).
vtkTypeBool AutoAdvance
void SetStartTimeStamp(double t)
And internal variable which marks the beginning of a Record session.
virtual void Seek(int n)
Seek forwards or backwards by the specified number of frames (positive is forward,...
double * FrameBufferTimeStamps
vtkMultiThreader * PlayerThreader
int LastNumberOfScalarComponents
int NumberOfScalarComponents
virtual int GetInitialized()
Initialize the hardware.
virtual void Stop()
Stop recording or playing.
int RequestInformation(vtkInformation *, vtkInformationVector **, vtkInformationVector *) override
Subclasses can reimplement this method to collect information from their inputs and set information f...
virtual void Rewind()
Rewind to the frame with the earliest timestamp.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
virtual void UnpackRasterLine(char *outPtr, char *rowPtr, int start, int count)
These methods can be overridden in subclasses.
virtual void InternalGrab()
The internal function which actually does the grab.
virtual void SetClipRegion(int x0, int x1, int y0, int y1, int z0, int z1)
Set the clip rectangle for the frames.
virtual void SetClipRegion(int r[6])
Set the clip rectangle for the frames.
static vtkVideoSource * New()
virtual void FastForward()
FastForward to the last frame that was recorded (i.e.
virtual void SetFrameSize(int dim[3])
Set the full-frame size.
virtual void Play()
Play through the 'tape' sequentially at the specified frame rate.
virtual void Record()
Record incoming video at the specified FrameRate.
~vtkVideoSource() override
void SetOutputFormatToRGBA()
Set the output format.
double GetFrameTimeStamp()
Get a time stamp in seconds (resolution of milliseconds) for the Output.
virtual void SetOutputFormat(int format)
Set the output format.
double GetStartTimeStamp()
And internal variable which marks the beginning of a Record session.
int OutputNeedsInitialization
virtual void ReleaseSystemResources()
Release the video driver.
virtual double GetFrameTimeStamp(int frame)
Get a time stamp in seconds (resolution of milliseconds) for a video frame.
virtual void UpdateFrameBuffer()
These methods can be overridden in subclasses.
int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *) override
These methods can be overridden in subclasses.
virtual void SetFrameSize(int x, int y, int z)
Set the full-frame size.
void SetOutputFormatToRGB()
Set the output format.
virtual void SetFrameBufferSize(int FrameBufferSize)
Set size of the frame buffer, i.e.
virtual void Initialize()
Initialize the hardware.
virtual void Grab()
Grab a single video frame.
void SetOutputFormatToLuminance()
Set the output format.
virtual void AdvanceFrameBuffer(int n)
These methods can be overridden in subclasses.
std::mutex FrameBufferMutex
int vtkTypeBool
Definition: vtkABI.h:69
#define VTK_RGBA
#define VTK_RGB
#define VTK_LUMINANCE