00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00058 #ifndef __vtkVideoSource_h
00059 #define __vtkVideoSource_h
00060
00061 #include "vtkTimerLog.h"
00062 #include "vtkCriticalSection.h"
00063 #include "vtkMultiThreader.h"
00064 #include "vtkImageSource.h"
00065 #include "vtkScalarsToColors.h"
00066
00067 class VTK_HYBRID_EXPORT vtkVideoSource : public vtkImageSource
00068 {
00069 public:
00070 static vtkVideoSource *New();
00071 vtkTypeMacro(vtkVideoSource,vtkImageSource);
00072 void PrintSelf(ostream& os, vtkIndent indent);
00073
00076 virtual void Record();
00077
00080 virtual void Play();
00081
00083 virtual void Stop();
00084
00089 virtual void Rewind();
00090
00093 virtual void FastForward();
00094
00097 virtual void Seek(int n);
00098
00100 virtual void Grab();
00101
00103
00105 vtkGetMacro(Recording,int);
00107
00109
00111 vtkGetMacro(Playing,int);
00113
00115
00120 virtual void SetFrameSize(int x, int y, int z);
00121 virtual void SetFrameSize(int dim[3]) {
00122 this->SetFrameSize(dim[0], dim[1], dim[2]); };
00123 vtkGetVector3Macro(FrameSize,int);
00125
00127
00128 virtual void SetFrameRate(float rate);
00129 vtkGetMacro(FrameRate,float);
00131
00133
00135 virtual void SetOutputFormat(int format);
00136 void SetOutputFormatToLuminance() { this->SetOutputFormat(VTK_LUMINANCE); };
00137 void SetOutputFormatToRGB() { this->SetOutputFormat(VTK_RGB); };
00138 void SetOutputFormatToRGBA() { this->SetOutputFormat(VTK_RGBA); };
00139 vtkGetMacro(OutputFormat,int);
00141
00143
00145 virtual void SetFrameBufferSize(int FrameBufferSize);
00146 vtkGetMacro(FrameBufferSize,int);
00148
00150
00153 vtkSetMacro(NumberOfOutputFrames,int);
00154 vtkGetMacro(NumberOfOutputFrames,int);
00156
00158
00160 vtkBooleanMacro(AutoAdvance,int);
00161 vtkSetMacro(AutoAdvance,int)
00162 vtkGetMacro(AutoAdvance,int);
00164
00166
00170 virtual void SetClipRegion(int r[6]) {
00171 this->SetClipRegion(r[0],r[1],r[2],r[3],r[4],r[5]); };
00172 virtual void SetClipRegion(int x0, int x1, int y0, int y1, int z0, int z1);
00173 vtkGetVector6Macro(ClipRegion,int);
00175
00177
00184 vtkSetVector6Macro(OutputWholeExtent,int);
00185 vtkGetVector6Macro(OutputWholeExtent,int);
00187
00189
00190 vtkSetVector3Macro(DataSpacing,float);
00191 vtkGetVector3Macro(DataSpacing,float);
00193
00195
00197 vtkSetVector3Macro(DataOrigin,float);
00198 vtkGetVector3Macro(DataOrigin,float);
00200
00202
00205 vtkSetMacro(Opacity,float);
00206 vtkGetMacro(Opacity,float);
00208
00210
00212 vtkGetMacro(FrameCount, int);
00213 vtkSetMacro(FrameCount, int);
00215
00217
00219 vtkGetMacro(FrameIndex, int);
00221
00223
00227 virtual double GetFrameTimeStamp(int frame);
00228 virtual double GetFrameTimeStamp() { return this->GetFrameTimeStamp(0); };
00230
00232
00234 virtual void Initialize();
00235 virtual int GetInitialized() { return this->Initialized; };
00237
00240 virtual void ReleaseSystemResources();
00241
00245 virtual void InternalGrab();
00246
00248
00250 void SetStartTimeStamp(double t) { this->StartTimeStamp = t; };
00251 double GetStartTimeStamp() { return this->StartTimeStamp; };
00253
00254 protected:
00255 vtkVideoSource();
00256 ~vtkVideoSource();
00257 void ExecuteInformation();
00258
00259 int Initialized;
00260
00261 int FrameSize[3];
00262 int ClipRegion[6];
00263 int OutputWholeExtent[6];
00264 float DataSpacing[3];
00265 float DataOrigin[3];
00266 int OutputFormat;
00267
00268 int NumberOfScalarComponents;
00269
00270
00271 int FrameOutputExtent[6];
00272
00273
00274
00275 int LastNumberOfScalarComponents;
00276 int LastOutputExtent[6];
00277
00278 int Recording;
00279 int Playing;
00280 float FrameRate;
00281 int FrameCount;
00282 int FrameIndex;
00283 double StartTimeStamp;
00284
00285 int AutoAdvance;
00286 int NumberOfOutputFrames;
00287
00288 float Opacity;
00289
00290
00291 int FlipFrames;
00292
00293
00294 int OutputNeedsInitialization;
00295
00296
00297 vtkMultiThreader *PlayerThreader;
00298 int PlayerThreadId;
00299
00300
00301
00302 vtkCriticalSection *FrameBufferMutex;
00303
00304
00305
00306 int FrameBufferBitsPerPixel;
00307
00308 int FrameBufferRowAlignment;
00309
00310
00311 int FrameBufferExtent[6];
00312
00313 int FrameBufferSize;
00314 int FrameBufferIndex;
00315 void **FrameBuffer;
00316 double *FrameBufferTimeStamps;
00317
00319
00320 virtual void UpdateFrameBuffer();
00321 virtual void AdvanceFrameBuffer(int n);
00322 virtual void ExecuteData(vtkDataObject *data);
00323
00324 virtual void UnpackRasterLine(char *outPtr, char *rowPtr,
00325 int start, int count);
00327
00328 private:
00329 vtkVideoSource(const vtkVideoSource&);
00330 void operator=(const vtkVideoSource&);
00331 };
00332
00333 #endif
00334
00335
00336
00337
00338