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 #ifndef PTLIB_PVFILEDEV_H
00035 #define PTLIB_PVFILEDEV_H
00036
00037 #ifdef P_USE_PRAGMA
00038 #pragma interface
00039 #endif
00040
00041 #include <ptlib.h>
00042
00043 #if P_VIDEO
00044 #if P_VIDFILE
00045
00046 #include <ptlib.h>
00047 #include <ptlib/video.h>
00048 #include <ptlib/vconvert.h>
00049 #include <ptclib/pvidfile.h>
00050 #include <ptclib/delaychan.h>
00051
00052
00054
00055
00056
00057
00058 class PVideoInputDevice_YUVFile : public PVideoInputDevice
00059 {
00060 PCLASSINFO(PVideoInputDevice_YUVFile, PVideoInputDevice);
00061 public:
00062 enum {
00063 Channel_PlayAndClose = 0,
00064 Channel_PlayAndRepeat = 1,
00065 Channel_PlayAndKeepLast = 2,
00066 Channel_PlayAndShowBlack = 3,
00067 ChannelCount = 4
00068 };
00069
00072 PVideoInputDevice_YUVFile();
00073
00076 virtual ~PVideoInputDevice_YUVFile();
00077
00078
00081 PBoolean Open(
00082 const PString & deviceName,
00083 PBoolean startImmediate = true
00084 );
00085
00088 PBoolean IsOpen() ;
00089
00092 PBoolean Close();
00093
00096 PBoolean Start();
00097
00100 PBoolean Stop();
00101
00104 PBoolean IsCapturing();
00105
00108 static PStringArray GetInputDeviceNames();
00109
00110 virtual PStringArray GetDeviceNames() const
00111 { return GetInputDeviceNames(); }
00112
00115 static bool GetDeviceCapabilities(
00116 const PString & ,
00117 Capabilities *
00118 ) { return false; }
00119
00125 virtual PINDEX GetMaxFrameBytes();
00126
00131 virtual PBoolean GetFrameData(
00132 BYTE * buffer,
00133 PINDEX * bytesReturned = NULL
00134 );
00135
00140 virtual PBoolean GetFrameDataNoDelay(
00141 BYTE * buffer,
00142 PINDEX * bytesReturned = NULL
00143 );
00144
00145
00148 void GrabBlankImage(BYTE *resFrame);
00149
00155 virtual PBoolean SetVideoFormat(
00156 VideoFormat videoFormat
00157 );
00158
00163 virtual int GetNumChannels() ;
00164
00174 virtual PBoolean SetChannel(
00175 int channelNumber
00176 );
00177
00183 virtual PBoolean SetColourFormat(
00184 const PString & colourFormat
00185 );
00186
00192 virtual PBoolean SetFrameRate(
00193 unsigned rate
00194 );
00195
00201 virtual PBoolean GetFrameSizeLimits(
00202 unsigned & minWidth,
00203 unsigned & minHeight,
00204 unsigned & maxWidth,
00205 unsigned & maxHeight
00206 ) ;
00207
00213 virtual PBoolean SetFrameSize(
00214 unsigned width,
00215 unsigned height
00216 );
00217
00218 void ClearMapping() { return ; }
00219
00220 void FillRect(BYTE * frame,int xPos, int initialYPos,int rectWidth, int rectHeight,int r, int g, int b);
00221
00222 protected:
00223 unsigned grabCount;
00224 PINDEX videoFrameSize;
00225 PVideoFile * file;
00226 PAdaptiveDelay pacing;
00227 };
00228
00229
00231
00232
00233
00234
00235 class PVideoOutputDevice_YUVFile : public PVideoOutputDevice
00236 {
00237 PCLASSINFO(PVideoOutputDevice_YUVFile, PVideoOutputDevice);
00238
00239 public:
00242 PVideoOutputDevice_YUVFile();
00243
00246 virtual ~PVideoOutputDevice_YUVFile();
00247
00250 static PStringArray GetOutputDeviceNames();
00251
00252 virtual PStringArray GetDeviceNames() const
00253 { return GetOutputDeviceNames(); }
00254
00257 virtual PBoolean Open(
00258 const PString & deviceName,
00259 PBoolean startImmediate = true
00260 );
00261
00264 PBoolean Start();
00265
00268 PBoolean Stop();
00269
00272 virtual PBoolean Close();
00273
00276 virtual PBoolean IsOpen();
00277
00283 virtual PBoolean SetColourFormat(
00284 const PString & colourFormat
00285 );
00286
00292 virtual PINDEX GetMaxFrameBytes();
00293
00296 virtual PBoolean SetFrameData(
00297 unsigned x,
00298 unsigned y,
00299 unsigned width,
00300 unsigned height,
00301 const BYTE * data,
00302 PBoolean endFrame = true
00303 );
00304
00305 protected:
00306 PVideoFile * file;
00307 };
00308
00309
00310 #endif // P_VIDFILE
00311 #endif
00312
00313 #endif // PTLIB_PVFILEDEV_H
00314
00315
00316