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
00151 virtual PBoolean SetVideoFormat(
00152 VideoFormat videoFormat
00153 );
00154
00159 virtual int GetNumChannels() ;
00160
00170 virtual PBoolean SetChannel(
00171 int channelNumber
00172 );
00173
00179 virtual PBoolean SetColourFormat(
00180 const PString & colourFormat
00181 );
00182
00188 virtual PBoolean SetFrameRate(
00189 unsigned rate
00190 );
00191
00197 virtual PBoolean GetFrameSizeLimits(
00198 unsigned & minWidth,
00199 unsigned & minHeight,
00200 unsigned & maxWidth,
00201 unsigned & maxHeight
00202 ) ;
00203
00209 virtual PBoolean SetFrameSize(
00210 unsigned width,
00211 unsigned height
00212 );
00213
00214
00215 protected:
00216 PVideoFile * m_file;
00217 PAdaptiveDelay m_pacing;
00218 unsigned m_frameRateAdjust;
00219 bool m_opened;
00220 };
00221
00222
00224
00225
00226
00227
00228 class PVideoOutputDevice_YUVFile : public PVideoOutputDevice
00229 {
00230 PCLASSINFO(PVideoOutputDevice_YUVFile, PVideoOutputDevice);
00231
00232 public:
00235 PVideoOutputDevice_YUVFile();
00236
00239 virtual ~PVideoOutputDevice_YUVFile();
00240
00243 static PStringArray GetOutputDeviceNames();
00244
00245 virtual PStringArray GetDeviceNames() const
00246 { return GetOutputDeviceNames(); }
00247
00250 virtual PBoolean Open(
00251 const PString & deviceName,
00252 PBoolean startImmediate = true
00253 );
00254
00257 PBoolean Start();
00258
00261 PBoolean Stop();
00262
00265 virtual PBoolean Close();
00266
00269 virtual PBoolean IsOpen();
00270
00276 virtual PBoolean SetColourFormat(
00277 const PString & colourFormat
00278 );
00279
00285 virtual PINDEX GetMaxFrameBytes();
00286
00289 virtual PBoolean SetFrameData(
00290 unsigned x,
00291 unsigned y,
00292 unsigned width,
00293 unsigned height,
00294 const BYTE * data,
00295 PBoolean endFrame = true
00296 );
00297
00298 protected:
00299 PVideoFile * m_file;
00300 bool m_opened;
00301 };
00302
00303
00304 #endif // P_VIDFILE
00305 #endif
00306
00307 #endif // PTLIB_PVFILEDEV_H
00308
00309
00310