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 #ifndef CVD_QTBUFFER_H
00027 #define CVD_QTBUFFER_H
00028
00029 #include <cvd/videobuffer.h>
00030 #include <cvd/OSX/qtframe.h>
00031
00032 #include <cvd/timer.h>
00033 #include <cvd/colourspaces.h>
00034
00035 #include <string>
00036
00037 namespace CVD {
00038 namespace Exceptions {
00041 namespace QTBUFFER {
00044 struct All: public CVD::Exceptions::VideoBuffer::All{};
00047 struct DeviceOpen: public All {DeviceOpen(std::string msg);
00048 };
00049 }
00050 }
00051
00053 namespace QT
00054 {
00055 #ifndef DOXYGEN_IGNORE_INTERNAL
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082 #endif
00083
00085 class RawQTPimpl;
00086
00090 class RawQT
00091 {
00092 public:
00098 RawQT(const ImageRef & size, unsigned int mode, unsigned int num = 0, bool showSettingsDialog=false, bool verbose = false);
00099 virtual ~RawQT();
00100
00102 ImageRef get_size() const;
00103
00105 unsigned char* get_frame();
00107 void put_frame( unsigned char * );
00109 double frame_rate();
00111 bool frame_pending();
00113 std::string get_frame_format_string();
00114
00115 private:
00116 RawQTPimpl * pimpl;
00117 std::string frame_format_string;
00118 };
00119 };
00120
00133 template <class T> class QTBuffer : public VideoBuffer<T>, public QT::RawQT
00134 {
00135 public:
00138 QTBuffer(const ImageRef & size, unsigned int number = 0, bool showSettingsDialog=false, bool verbose = false ) : VideoBuffer<T>(VideoBufferType::Live), RawQT( size, 0, number, showSettingsDialog, verbose ) {}
00139
00140 virtual ImageRef size()
00141 {
00142 return RawQT::get_size();
00143 }
00144 virtual VideoFrame<T> * get_frame()
00145 {
00146 return new QTFrame<T>(timer.get_time(), (T *)RawQT::get_frame(), RawQT::get_size());
00147 }
00148 virtual void put_frame(VideoFrame<T>* f)
00149 {
00150 RawQT::put_frame((unsigned char *)f->data());
00151 delete reinterpret_cast<QTFrame<T> *>(f);
00152 }
00153 virtual bool frame_pending()
00154 {
00155 return RawQT::frame_pending();
00156 }
00157 virtual double frame_rate()
00158 {
00159 return RawQT::frame_rate();
00160 }
00161
00162 private:
00163 QTBuffer( QTBuffer& copyof );
00164 int operator = ( QTBuffer& copyof );
00165 };
00166
00167 };
00168 #endif