cisst-saw
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
svlVideoIO.h
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /* ex: set filetype=cpp softtabstop=4 shiftwidth=4 tabstop=4 cindent expandtab: */
3 
4 /*
5 
6  Author(s): Balazs Vagvolgyi
7  Created on: 2010
8 
9  (C) Copyright 2006-2010 Johns Hopkins University (JHU), All Rights
10  Reserved.
11 
12 --- begin cisst license - do not edit ---
13 
14 This software is provided "as is" under an open source license, with
15 no warranty. The complete license can be found in license.txt and
16 http://www.cisst.org/cisst/license.txt.
17 
18 --- end cisst license ---
19 
20 */
21 
22 #ifndef _svlVideoIO_h
23 #define _svlVideoIO_h
24 
28 #include <string>
29 
30 // Always include last!
32 
33 
34 // Forward declarations
35 struct svlProcInfo;
36 class svlSampleImage;
37 class svlVideoCodecBase;
38 
39 
40 /***********************************/
41 /*** svlVideoIO class **************/
42 /***********************************/
43 
45 {
46  friend void svlInitializeVideoCodecs();
47 
48 public:
49  typedef struct _Compression
50  {
51  unsigned int size;
52  char extension[16];
53  char name[64];
54  unsigned int datasize;
55  unsigned char data[1];
56  } Compression;
57 
58 private:
63 
64  svlVideoIO();
65  svlVideoIO(const svlVideoIO &);
66  static svlVideoIO* GetInstance();
67 
68  _CodecList Codecs;
69  _StringList Names;
70  _StringList Extensions;
74 
75 public:
76  ~svlVideoIO();
77 
78  static int DialogCodec(const std::string &filename, Compression **compression);
79  static int DialogFilePath(bool save, const std::string &title, std::string &filename);
80 
81  static int GetFormatList(std::string &formatlist);
82  static int GetWindowsExtensionFilter(std::string &filter);
83  static int GetExtension(const std::string &filename, std::string &extension);
84 
85  static svlVideoCodecBase* GetCodec(const std::string &filename);
86  static void ReleaseCodec(svlVideoCodecBase* codec);
87  static int ReleaseCompression(Compression *compression);
88 };
89 
90 
91 /*************************************/
92 /*** svlVideoCodecBase class *********/
93 /*************************************/
94 
96 {
98 
99 public:
101  virtual ~svlVideoCodecBase();
102 
103  const std::string& GetEncoderName() const;
104  const std::string& GetExtensions() const;
105  bool IsMultithreaded() const;
106  bool IsVariableFramerate() const;
107 
108  virtual int Open(const std::string &filename, unsigned int &width, unsigned int &height, double &framerate) = 0;
109  virtual int Create(const std::string &filename, const unsigned int width, const unsigned int height, const double framerate) = 0;
110  virtual int Close() = 0;
111 
112  virtual int GetBegPos() const = 0;
113  virtual int GetEndPos() const = 0;
114  virtual int GetPos() const = 0;
115  virtual int SetPos(const int pos);
116 
117  virtual double GetBegTime() const;
118  virtual double GetEndTime() const;
119  virtual double GetTimeAtPos(const int pos) const;
120  virtual int GetPosAtTime(const double time) const;
121 
122  virtual svlVideoIO::Compression* GetCompression() const;
123  virtual int SetCompression(const svlVideoIO::Compression *compression);
124  virtual int DialogCompression();
125  virtual int DialogCompression(const std::string &filename);
126 
127  virtual double GetTimestamp() const = 0;
128  virtual int SetTimestamp(const double timestamp);
129 
130  virtual int Read(svlProcInfo* procInfo, svlSampleImage &image, const unsigned int videoch, const bool noresize = false) = 0;
131  virtual int Write(svlProcInfo* procInfo, const svlSampleImage &image, const unsigned int videoch) = 0;
132 
133 public:
134  virtual void SetExtension(const std::string & extension) = 0;
135  virtual void SetEncoderID(const int & encoder_id) = 0;
136  virtual void SetCompressionLevel(const int & compr_level) = 0;
137  virtual void SetQualityBased(const bool & enabled) = 0;
138  virtual void SetTargetQuantizer(const double & target_quant) = 0;
139  virtual void SetDatarate(const int & datarate) = 0;
140  virtual void SetKeyFrameEvery(const int & key_every) = 0;
141  virtual void IsCompressionLevelEnabled(bool & enabled) const = 0;
142  virtual void IsEncoderListEnabled(bool & enabled) const = 0;
143  virtual void IsTargetQuantizerEnabled(bool & enabled) const = 0;
144  virtual void IsDatarateEnabled(bool & enabled) const = 0;
145  virtual void IsKeyFrameEveryEnabled(bool & enabled) const = 0;
146  virtual void GetCompressionLevel(int & compr_level) const = 0;
147  virtual void GetEncoderList(std::string & encoder_list) const = 0;
148  virtual void GetEncoderID(int & encoder_id) const = 0;
149  virtual void GetQualityBased(bool & enabled) const = 0;
150  virtual void GetTargetQuantizer(double & target_quant) const = 0;
151  virtual void GetDatarate(int & datarate) const = 0;
152  virtual void GetKeyFrameEvery(int & key_every) const = 0;
153 
154 protected:
155  void SetName(const std::string &name);
156  void SetExtensionList(const std::string &list);
157  void SetMultithreaded(bool multithreaded);
158  void SetVariableFramerate(bool variableframerate);
159 
161 
162 private:
163  std::string EncoderName;
164  std::string ExtensionList;
165  bool Multithreaded;
166  bool VariableFramerate;
167 
168  bool ComponentAddedtoLCM;
169  std::string EncoderConnectedComponent;
170  std::string EncoderConnectedInterface;
171  void CreateInterfaces();
172 };
173 
175 
176 #endif // _svlVideoIO_h
177 
#define CISST_EXPORT
Definition: cmnExportMacros.h:50
Typedef for dynamic vectors.
Definition: svlVideoIO.h:44
virtual void Create(void)
Definition: osaCriticalSection.h:36
unsigned int datasize
Definition: svlVideoIO.h:54
svlVideoIO::Compression * Codec
Definition: svlVideoIO.h:160
Declaration of mtsComponent.
void SetName(const std::string &componentName)
Definition: mtsComponent.h:150
Definition: svlVideoIO.h:49
Definition: svlSampleImage.h:35
Macros to export the symbols of cisstStereoVision (in a Dll).
#define CMN_DECLARE_SERVICES(hasDynamicCreation, lod)
Definition: cmnClassRegisterMacros.h:116
Definition: svlVideoIO.h:95
unsigned int size
Definition: svlVideoIO.h:51
Definition: svlProcInfo.h:33
const int CMN_NO_DYNAMIC_CREATION
Definition: cmnClassRegisterMacros.h:328
#define CMN_DECLARE_SERVICES_INSTANTIATION(className)
Definition: cmnClassRegisterMacros.h:202
#define CMN_LOG_ALLOW_DEFAULT
Definition: cmnLogLoD.h:76