VTK  9.0.2
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 class vtkTimerLog;
39 class vtkCriticalSection;
40 class vtkMultiThreader;
41 class vtkScalarsToColors;
42 
43 class VTKIOVIDEO_EXPORT vtkVideoSource : public vtkImageAlgorithm
44 {
45 public:
46  static vtkVideoSource* New();
48  void PrintSelf(ostream& os, vtkIndent indent) override;
49 
54  virtual void Record();
55 
60  virtual void Play();
61 
65  virtual void Stop();
66 
72  virtual void Rewind();
73 
78  virtual void FastForward();
79 
84  virtual void Seek(int n);
85 
89  virtual void Grab();
90 
92 
96  vtkGetMacro(Recording, int);
98 
100 
104  vtkGetMacro(Playing, int);
106 
108 
116  virtual void SetFrameSize(int x, int y, int z);
117  virtual void SetFrameSize(int dim[3]) { this->SetFrameSize(dim[0], dim[1], dim[2]); }
118  vtkGetVector3Macro(FrameSize, int);
120 
122 
125  virtual void SetFrameRate(float rate);
126  vtkGetMacro(FrameRate, float);
128 
130 
134  virtual void SetOutputFormat(int format);
135  void SetOutputFormatToLuminance() { this->SetOutputFormat(VTK_LUMINANCE); }
136  void SetOutputFormatToRGB() { this->SetOutputFormat(VTK_RGB); }
137  void SetOutputFormatToRGBA() { this->SetOutputFormat(VTK_RGBA); }
138  vtkGetMacro(OutputFormat, int);
140 
142 
146  virtual void SetFrameBufferSize(int FrameBufferSize);
147  vtkGetMacro(FrameBufferSize, int);
149 
151 
157  vtkSetMacro(NumberOfOutputFrames, int);
158  vtkGetMacro(NumberOfOutputFrames, int);
160 
162 
166  vtkBooleanMacro(AutoAdvance, vtkTypeBool);
167  vtkSetMacro(AutoAdvance, vtkTypeBool);
168  vtkGetMacro(AutoAdvance, vtkTypeBool);
170 
172 
178  virtual void SetClipRegion(int r[6]) { this->SetClipRegion(r[0], r[1], r[2], r[3], r[4], r[5]); }
179  virtual void SetClipRegion(int x0, int x1, int y0, int y1, int z0, int z1);
180  vtkGetVector6Macro(ClipRegion, int);
182 
184 
193  vtkSetVector6Macro(OutputWholeExtent, int);
194  vtkGetVector6Macro(OutputWholeExtent, int);
196 
198 
202  vtkSetVector3Macro(DataSpacing, double);
203  vtkGetVector3Macro(DataSpacing, double);
205 
207 
211  vtkSetVector3Macro(DataOrigin, double);
212  vtkGetVector3Macro(DataOrigin, double);
214 
216 
221  vtkSetMacro(Opacity, float);
222  vtkGetMacro(Opacity, float);
224 
226 
230  vtkGetMacro(FrameCount, int);
231  vtkSetMacro(FrameCount, int);
233 
235 
239  vtkGetMacro(FrameIndex, int);
241 
248  virtual double GetFrameTimeStamp(int frame);
249 
255  double GetFrameTimeStamp() { return this->FrameTimeStamp; }
256 
258 
262  virtual void Initialize();
263  virtual int GetInitialized() { return this->Initialized; }
265 
271  virtual void ReleaseSystemResources();
272 
278  virtual void InternalGrab();
279 
281 
285  void SetStartTimeStamp(double t) { this->StartTimeStamp = t; }
286  double GetStartTimeStamp() { return this->StartTimeStamp; }
288 
289 protected:
291  ~vtkVideoSource() override;
293 
295 
296  int FrameSize[3];
297  int ClipRegion[6];
298  int OutputWholeExtent[6];
299  double DataSpacing[3];
300  double DataOrigin[3];
302  // set according to the OutputFormat
304  // The FrameOutputExtent is the WholeExtent for a single output frame.
305  // It is initialized in ExecuteInformation.
306  int FrameOutputExtent[6];
307 
308  // save this information from the output so that we can see if the
309  // output scalars have changed
311  int LastOutputExtent[6];
312 
314  int Playing;
315  float FrameRate;
317 
320 
323 
324  float Opacity;
325 
326  // true if Execute() must apply a vertical flip to each frame
328 
329  // set if output needs to be cleared to be cleared before being written
331 
332  // An example of asynchrony
335 
336  // A mutex for the frame buffer: must be applied when any of the
337  // below data is modified.
339 
340  // set according to the needs of the hardware:
341  // number of bits per framebuffer pixel
343  // byte alignment of each row in the framebuffer
345  // FrameBufferExtent is the extent of frame after it has been clipped
346  // with ClipRegion. It is initialized in CheckBuffer().
347  int FrameBufferExtent[6];
348 
350 
351  // where the current frame is, note this decreases in time
352  // increasing values are older frames
354 
355  // number of frames from the beginning sort of,
356  // it does wrap, sometimes
358 
359  void** FrameBuffer;
361 
363 
366  virtual void UpdateFrameBuffer();
367  virtual void AdvanceFrameBuffer(int n);
369  // if some component conversion is required, it is done here:
370  virtual void UnpackRasterLine(char* outPtr, char* rowPtr, int start, int count);
372 
373 private:
374  vtkVideoSource(const vtkVideoSource&) = delete;
375  void operator=(const vtkVideoSource&) = delete;
376 };
377 
378 #endif
Critical section locking class.
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:91
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.
vtkCriticalSection * FrameBufferMutex
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()
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)
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)
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])
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()
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()
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
This is called in response to a REQUEST_DATA request from the executive.
virtual void SetFrameSize(int x, int y, int z)
Set the full-frame size.
void SetOutputFormatToRGB()
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()
virtual void AdvanceFrameBuffer(int n)
int vtkTypeBool
Definition: vtkABI.h:69
#define VTK_RGBA
#define VTK_RGB
#define VTK_LUMINANCE