PlusLib  2.9.0
Software library for tracked ultrasound image acquisition, calibration, and processing.
vtkPlusVirtualCapture.h
Go to the documentation of this file.
1 /*=Plus=header=begin======================================================
2 Program: Plus
3 Copyright (c) Laboratory for Percutaneous Surgery. All rights reserved.
4 See License.txt for details.
5 =========================================================Plus=header=end*/
6 
7 #ifndef __vtkPlusVirtualCapture_h
8 #define __vtkPlusVirtualCapture_h
9 
10 #include "vtkPlusDataCollectionExport.h"
11 #include "vtkPlusDevice.h"
12 #include "vtkIGSIOSequenceIOBase.h"
13 #include <string>
14 
15 //class vtkIGSIOTrackedFrameList;
16 
23 class vtkPlusDataCollectionExport vtkPlusVirtualCapture : public vtkPlusDevice
24 {
25 public:
26  static vtkPlusVirtualCapture* New();
28  void PrintSelf(ostream& os, vtkIndent indent);
29 
31  virtual PlusStatus ReadConfiguration(vtkXMLDataElement*);
32 
34  virtual PlusStatus WriteConfiguration(vtkXMLDataElement*);
35 
36  virtual PlusStatus InternalUpdate();
37 
38  virtual PlusStatus NotifyConfigured();
39 
40  virtual bool HasUnsavedData() const;
41 
43  virtual PlusStatus OpenFile(const char* aFilename = NULL);
44 
50  virtual PlusStatus CloseFile(const char* aFilename = NULL, std::string* resultFilename = NULL);
51 
52  virtual PlusStatus Reset();
53 
54  virtual PlusStatus TakeSnapshot();
55 
56  virtual PlusStatus SetCustomHeaderField(const std::string& fieldName, const std::string& fieldValue);
57 
58  virtual int OutputChannelCount() const;
59 
61  vtkGetMacro(EnableCapturing, bool);
62  void SetEnableCapturing(bool aValue);
63 
67  virtual void InternalWriteOutputChannels(vtkXMLDataElement* rootXMLElement);
68 
69  vtkSetMacro(RequestedFrameRate, double);
70  vtkGetMacro(RequestedFrameRate, double);
71 
72  vtkGetMacro(ActualFrameRate, double);
73  vtkGetMacro(TotalFramesRecorded, long int);
74 
75  vtkGetMacro(BaseFilename, std::string);
76  vtkSetMacro(BaseFilename, std::string);
77 
78  vtkGetMacro(EnableFileCompression, bool);
79  void SetEnableFileCompression(bool aFileCompression);
80 
81  vtkGetStdStringMacro(EncodingFourCC);
82  vtkSetStdStringMacro(EncodingFourCC)
83 
84  vtkSetMacro(EnableCapturingOnStart, bool);
85  vtkGetMacro(EnableCapturingOnStart, bool);
86 
87  vtkGetMacro(IsData3D, bool);
88 
89  vtkSetMacro(FrameBufferSize, unsigned int);
90  vtkGetMacro(FrameBufferSize, unsigned int);
91 
93 
94  virtual bool IsTracker() const { return false; }
95  virtual bool IsVirtual() const { return true; }
96 
97  virtual std::string GetOutputFileName() { return vtkPlusConfig::GetInstance()->GetOutputPath(CurrentFilename); };
98 
99 protected:
101  virtual ~vtkPlusVirtualCapture();
102 
103  virtual PlusStatus ClearRecordedFrames();
104 
105  vtkSetMacro(ActualFrameRate, double);
106  vtkSetMacro(IsData3D, bool);
107 
108  virtual PlusStatus InternalConnect();
109  virtual PlusStatus InternalDisconnect();
110 
111  virtual bool IsFrameBuffered() const;
112 
117  virtual PlusStatus WriteFrames(bool force = false);
118 
119 protected:
121  vtkIGSIOTrackedFrameList* RecordedFrames;
122 
125 
128 
135 
138 
146 
147  /* Time waited in update */
148  double TimeWaited;
150 
152  std::string CurrentFilename;
153  std::string BaseFilename;
154 
156  vtkIGSIOSequenceIOBase* Writer;
157 
160 
162  std::string EncodingFourCC;
163 
166 
168  long int TotalFramesRecorded; // hard drive will probably fill up before a regular int is hit, but still...
169 
172 
175 
176  unsigned int FrameBufferSize;
177 
178  bool IsData3D;
179 
181  vtkSmartPointer<vtkIGSIORecursiveCriticalSection> WriterAccessMutex;
182 
183  vtkPlusLogger::LogLevelType GracePeriodLogLevel;
184 
185  PlusStatus GetInputTrackedFrame(igsioTrackedFrame& aFrame);
186  PlusStatus GetInputTrackedFrameListSampled(double& lastAlreadyRecordedFrameTimestamp, double& nextFrameToBeRecordedTimestamp, vtkIGSIOTrackedFrameList* recordedFrames, double requestedFramePeriodSec, double maxProcessingTimeSec);
187  PlusStatus GetLatestInputItemTimestamp(double& timestamp);
188 
189 private:
190  vtkPlusVirtualCapture(const vtkPlusVirtualCapture&); // Not implemented.
191  void operator=(const vtkPlusVirtualCapture&); // Not implemented.
192 };
193 
194 #endif
virtual void PrintSelf(ostream &os, vtkIndent indent) VTK_OVERRIDE
vtkPlusDataCollector * DataCollector
virtual void InternalWriteOutputChannels(vtkXMLDataElement *rootXMLElement)
std::string GetOutputPath(const std::string &subPath)
Abstract interface for tracker and video devices.
Definition: vtkPlusDevice.h:60
vtkIGSIOSequenceIOBase * Writer
double * timestamp
Definition: phidget22.h:3432
virtual vtkPlusDataCollector * GetDataCollector()
virtual PlusStatus InternalConnect()
igsioStatus PlusStatus
Definition: PlusCommon.h:40
static vtkPlusConfig * GetInstance()
virtual PlusStatus ReadConfiguration(vtkXMLDataElement *)
virtual PlusStatus Reset()
virtual PlusStatus WriteConfiguration(vtkXMLDataElement *)
vtkIGSIOTrackedFrameList * RecordedFrames
Manages devices that record image or positional data.
virtual bool IsVirtual() const
vtkSmartPointer< vtkIGSIORecursiveCriticalSection > WriterAccessMutex
virtual std::string GetOutputFileName()
virtual PlusStatus NotifyConfigured()
virtual PlusStatus InternalDisconnect()
virtual int OutputChannelCount() const
virtual PlusStatus InternalUpdate()
virtual bool IsTracker() const
static vtkPlusDevice * New()
vtkPlusLogger::LogLevelType GracePeriodLogLevel