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 "vtkMutexLock.h"
00063 #include "vtkMultiThreader.h"
00064 #include "vtkImageSource.h"
00065 #include "vtkScalarsToColors.h"
00066
00067 class VTK_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 Initialize();
00077
00080 virtual void ReleaseSystemResources();
00081
00083 virtual void Grab(int n);
00084 void Grab() { this->Grab(1); }
00085
00088 virtual void Play();
00089
00091 virtual void Stop();
00092
00094 vtkGetMacro(Playing,int);
00095
00098 vtkSetMacro(FrameRate,float);
00099 vtkGetMacro(FrameRate,float);
00100
00106 virtual void SetFrameSize(int dim[3]) {
00107 this->SetFrameSize(dim[0], dim[1], dim[2]); };
00108 virtual void SetFrameSize(int x, int y, int z);
00109 vtkGetVector3Macro(FrameSize,int);
00110
00113 virtual void SetOutputFormat(int format);
00114 void SetOutputFormatToLuminance() { this->SetOutputFormat(VTK_LUMINANCE); };
00115 void SetOutputFormatToRGB() { this->SetOutputFormat(VTK_RGB); };
00116 void SetOutputFormatToRGBA() { this->SetOutputFormat(VTK_RGBA); };
00117 vtkGetMacro(OutputFormat,int);
00118
00120 virtual void SetFrameBufferSize(int FrameBufferSize);
00121 vtkGetMacro(FrameBufferSize,int);
00122
00126 vtkSetMacro(NumberOfOutputFrames,int);
00127 vtkGetMacro(NumberOfOutputFrames,int);
00128
00131 vtkBooleanMacro(AutoAdvance,int);
00132 vtkSetMacro(AutoAdvance,int)
00133 vtkGetMacro(AutoAdvance,int);
00134
00136 virtual void Advance(int n);
00137 virtual void Advance() { this->Advance(-1); };
00138
00140 virtual void Rewind(int n) { this->Advance(-n); };
00141 virtual void Rewind() { this->Advance(-1); };
00142
00147 virtual void SetClipRegion(int r[6]) {
00148 this->SetClipRegion(r[0],r[1],r[2],r[3],r[4],r[5]); };
00149 virtual void SetClipRegion(int x0, int x1, int y0, int y1, int z0, int z1);
00150 vtkGetVector6Macro(ClipRegion,int);
00151
00159 vtkSetVector6Macro(OutputWholeExtent,int);
00160 vtkGetVector6Macro(OutputWholeExtent,int);
00161
00163 vtkSetVector3Macro(DataSpacing,float);
00164 vtkGetVector3Macro(DataSpacing,float);
00165
00168 vtkSetVector3Macro(DataOrigin,float);
00169 vtkGetVector3Macro(DataOrigin,float);
00170
00174 vtkSetMacro(Opacity,float);
00175 vtkGetMacro(Opacity,float);
00176
00178 vtkSetMacro(Preview,int);
00179 vtkBooleanMacro(Preview,int);
00180 vtkGetMacro(Preview,int);
00181
00184 virtual double GetFrameTimeStamp(int frame);
00185 virtual double GetFrameTimeStamp() { return this->GetFrameTimeStamp(0); };
00186
00189 virtual void SetGrabOnUpdate(int yesno);
00190 vtkBooleanMacro(GrabOnUpdate,int);
00191 vtkGetMacro(GrabOnUpdate,int);
00192
00196 virtual void InternalGrab();
00197
00199 void UpdateInformation();
00200
00201 protected:
00202 vtkVideoSource();
00203 ~vtkVideoSource();
00204 vtkVideoSource(const vtkVideoSource&) {};
00205 void operator=(const vtkVideoSource&) {};
00206 void ExecuteInformation();
00207
00208 int Initialized;
00209
00210 int FrameSize[3];
00211 int ClipRegion[6];
00212 int OutputWholeExtent[6];
00213 float DataSpacing[3];
00214 float DataOrigin[3];
00215 int OutputFormat;
00216
00217 int NumberOfScalarComponents;
00218
00219
00220 int FrameOutputExtent[6];
00221
00222
00223
00224 int LastNumberOfScalarComponents;
00225 int LastOutputExtent[6];
00226
00227 int Playing;
00228 float FrameRate;
00229
00230 int AutoAdvance;
00231 int NumberOfOutputFrames;
00232
00233 float Opacity;
00234 int Preview;
00235
00236 int GrabOnUpdate;
00237
00238
00239 int FlipFrames;
00240
00241
00242 int OutputNeedsInitialization;
00243
00244
00245 int FrameGrabbed;
00246
00247
00248 vtkMultiThreader *PlayerThreader;
00249 int PlayerThreadId;
00250
00251
00252
00253
00254 vtkMutexLock *FrameBufferMutex;
00255
00256
00257
00258 int FrameBufferBitsPerPixel;
00259
00260 int FrameBufferRowAlignment;
00261
00262
00263 int FrameBufferExtent[6];
00264
00265 int FrameBufferSize;
00266 int FrameBufferIndex;
00267 void **FrameBuffer;
00268 double *FrameBufferTimeStamps;
00269
00271 virtual void UpdateFrameBuffer();
00272 virtual void AdvanceFrameBuffer(int n);
00273 virtual void Execute(vtkImageData *data);
00274 void Execute() { this->vtkImageSource::Execute(); };
00275
00276 virtual void UnpackRasterLine(char *outPtr, char *rowPtr,
00277 int start, int count);
00278 };
00279
00280 #endif
00281
00282
00283
00284
00285