# 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 ///////////////////////////////////////////////////////////////