00001 00010 #ifndef __VIDEOSOURCE_H 00011 #define __VIDEOSOURCE_H 00012 00013 //#include <cv.h> 00014 //#include <opencv/cv.h> 00015 //#include <cv.h> 00016 #ifdef OPENCV_APPLE_FRAMEWORK 00017 #include <OpenCV/OpenCV.h> 00018 #else 00019 #include <cv.h> 00020 #include <highgui.h> 00021 #endif 00022 #include <vector> 00023 00024 00025 #ifndef DLLEXPORT 00026 #if 0 00027 #ifdef WIN32 00028 #define DLLEXPORT __declspec(dllexport) 00029 #else 00030 #define DLLEXPORT 00031 #endif 00032 #else 00033 #define DLLEXPORT 00034 #endif 00035 #endif 00036 00037 class FptFrame; 00038 class ParamSection; 00039 class IniParser; 00040 00042 00049 class VideoSource 00050 { 00051 public: 00052 00057 virtual bool initialize() =0; 00058 00065 virtual bool getFrame(IplImage *dst)=0; 00066 00069 virtual void getSize(int &width, int &height)=0; 00070 virtual ~VideoSource(){}; 00071 00075 virtual void start()=0; 00076 00079 virtual void stop()=0; 00080 00082 virtual void restart() { start(); } 00083 00086 virtual bool isPlaying()=0; 00087 00092 virtual int getId() { return -1; }; 00093 00097 virtual int getChannels(){return 3;} 00098 00101 virtual void postProcess(FptFrame *) {} 00102 00106 virtual const char *getStreamName() const = 0; 00107 00111 virtual const char *getStreamType() const = 0; 00112 00113 virtual void *getInternalPointer() { return 0; } 00114 }; 00115 00117 00121 class ParticularVSFactory { 00122 public: 00123 virtual ~ParticularVSFactory(){} 00124 const char *name; //< video source name 00125 virtual void registerParameters(ParamSection *sec)=0; 00127 virtual VideoSource *construct()=0; 00128 }; 00129 00130 00132 00153 class VideoSourceFactory { 00154 public: 00155 DLLEXPORT VideoSourceFactory(); 00156 DLLEXPORT ~VideoSourceFactory(); 00157 00161 DLLEXPORT static VideoSourceFactory *instance(); 00162 00168 DLLEXPORT void registerParameters(IniParser *parser); 00169 00171 DLLEXPORT void registerParameters(ParamSection *sec); 00172 00174 00178 DLLEXPORT VideoSource *construct(); 00179 00184 DLLEXPORT void registerFactory(ParticularVSFactory *f) { factories.push_back(f); } 00185 00186 private: 00187 00188 typedef std::vector<ParticularVSFactory *> FactoryVector; 00189 static VideoSourceFactory *factory; 00190 FactoryVector factories; 00191 }; 00192 00194 #endif