pvfiledev.h

Go to the documentation of this file.
00001 /*
00002  * pvfiledev.cxx
00003  *
00004  * Video file declaration
00005  *
00006  * Portable Windows Library
00007  *
00008  * Copyright (C) 2004 Post Increment
00009  *
00010  * The contents of this file are subject to the Mozilla Public License
00011  * Version 1.0 (the "License"); you may not use this file except in
00012  * compliance with the License. You may obtain a copy of the License at
00013  * http://www.mozilla.org/MPL/
00014  *
00015  * Software distributed under the License is distributed on an "AS IS"
00016  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
00017  * the License for the specific language governing rights and limitations
00018  * under the License.
00019  *
00020  * The Original Code is Portable Windows Library.
00021  *
00022  * The Initial Developer of the Original Code is
00023  * Craig Southeren <craigs@postincrement.com>
00024  *
00025  * All Rights Reserved.
00026  *
00027  * Contributor(s): ______________________________________.
00028  *
00029  * $Revision: 27357 $
00030  * $Author: rjongbloed $
00031  * $Date: 2012-03-28 19:39:08 -0500 (Wed, 28 Mar 2012) $
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 // This class defines a video capture (input) device that reads video from a raw YUV file
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 & /*deviceName*/, 
00117       Capabilities * /*caps*/         
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   // New colour format for device.
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 // This class defines a video display (output) device that writes video to a raw YUV file
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   // New colour format for device.
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 // End Of File ///////////////////////////////////////////////////////////////

Generated on Fri Feb 15 20:58:31 2013 for PTLib by  doxygen 1.4.7