videoio.h
上传用户:hzhsqp
上传日期:2007-01-06
资源大小:1600k
文件大小:9k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * videoio.h
  3.  *
  4.  * Classes to support streaming video input (grabbing) and output.
  5.  *
  6.  * Portable Windows Library
  7.  *
  8.  * Copyright (c) 1993-2000 Equivalence Pty. Ltd.
  9.  *
  10.  * The contents of this file are subject to the Mozilla Public License
  11.  * Version 1.0 (the "License"); you may not use this file except in
  12.  * compliance with the License. You may obtain a copy of the License at
  13.  * http://www.mozilla.org/MPL/
  14.  *
  15.  * Software distributed under the License is distributed on an "AS IS"
  16.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  17.  * the License for the specific language governing rights and limitations
  18.  * under the License.
  19.  *
  20.  * The Original Code is Portable Windows Library.
  21.  *
  22.  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
  23.  *
  24.  * Contributor(s): ______________________________________.
  25.  *
  26.  * $Log: videoio.h,v $
  27.  * Revision 1.5  2000/07/26 03:50:49  robertj
  28.  * Added last error variable to video device.
  29.  *
  30.  * Revision 1.4  2000/07/26 02:13:46  robertj
  31.  * Added some more "common" bounds checking to video device.
  32.  *
  33.  * Revision 1.3  2000/07/25 13:38:25  robertj
  34.  * Added frame rate parameter to video frame grabber.
  35.  *
  36.  * Revision 1.2  2000/07/25 13:14:05  robertj
  37.  * Got the video capture stuff going!
  38.  *
  39.  * Revision 1.1  2000/07/15 09:47:34  robertj
  40.  * Added video I/O device classes.
  41.  *
  42.  */
  43. #define _PVIDEOIO
  44. #ifdef __GNUC__
  45. #pragma interface
  46. #endif
  47. /**This class defines a video device.
  48.    This class is used to abstract the few parameters that are common to both
  49.    input and output devices.
  50.  */
  51. class PVideoDevice : public PObject
  52. {
  53.   PCLASSINFO(PVideoDevice, PObject);
  54.   public:
  55.     enum VideoFormat {
  56.       PAL,
  57.       NTSC,
  58.       SECAM,
  59.       Auto,
  60.       NumVideoFormats
  61.     };
  62.     enum ColourFormat {
  63.       Grey,
  64.       Gray = Grey,
  65.       RGB24,
  66.       RGB32,
  67.       YUV422,
  68.       RGB565,
  69.       MJPEG,
  70.       NumColourFormats
  71.     };
  72.     enum StandardSizes {
  73.       CIF_WIDTH = 352,
  74.       CIF_HEIGHT = 288
  75.     };
  76.     /** Create a new video output device.
  77.      */
  78.     PVideoDevice(
  79.       VideoFormat videoformat = PAL,
  80.       unsigned channelNumber = 0,
  81.       ColourFormat colourFormat = RGB24
  82.     );
  83.     /**Open the device given the device name.
  84.       */
  85.     virtual BOOL Open(
  86.       const PString & deviceName,   /// Device name to open
  87.       BOOL startImmediate = TRUE    /// Immediately start device
  88.     ) = 0;
  89.     /**Determine of the device is currently open.
  90.       */
  91.     virtual BOOL IsOpen() const = 0;
  92.     /**Close the device.
  93.       */
  94.     virtual BOOL Close() = 0;
  95.     /**Start the video device I/O capture.
  96.       */
  97.     virtual BOOL Start() = 0;
  98.     /**Stop the video device I/O capture.
  99.       */
  100.     virtual BOOL Stop() = 0;
  101.     /**Determine if the video device I/O capture is in progress.
  102.       */
  103.     virtual BOOL IsCapturing() = 0;
  104.     /**Get the device name of the open device.
  105.       */
  106.     const PString & GetDeviceName() const
  107.       { return deviceName; }
  108.     /**Get a list of all of the drivers available.
  109.       */
  110.     virtual PStringList GetDeviceNames() const = 0;
  111.     /**Set the video format to be used.
  112.        Default behaviour sets the value of the videoFormat variable and then
  113.        returns the IsOpen() status.
  114.     */
  115.     virtual BOOL SetVideoFormat(
  116.       VideoFormat videoFormat   /// New video format
  117.     );
  118.     /**Get the video format being used.
  119.        Default behaviour returns the value of the videoFormat variable.
  120.     */
  121.     virtual VideoFormat GetVideoFormat() const;
  122.     /**Get the number of video channels available on the device.
  123.        Default behaviour returns 1.
  124.     */
  125.     virtual unsigned GetNumChannels() const;
  126.     /**Set the video channel to be used on the device.
  127.        Default behaviour sets the value of the channelNumber variable and then
  128.        returns the IsOpen() status.
  129.     */
  130.     virtual BOOL SetChannel(
  131.       unsigned channelNumber  /// New channel number for device.
  132.     );
  133.     /**Get the video channel to be used on the device.
  134.        Default behaviour returns the value of the channelNumber variable.
  135.     */
  136.     virtual unsigned GetChannel() const;
  137.     /**Set the colour format to be used.
  138.        Default behaviour sets the value of the colourFormat variable and then
  139.        returns the IsOpen() status.
  140.     */
  141.     virtual BOOL SetColourFormat(
  142.       ColourFormat colourFormat   // New colour format for device.
  143.     );
  144.     /**Get the colour format to be used.
  145.        Default behaviour returns the value of the colourFormat variable.
  146.     */
  147.     ColourFormat GetColourFormat() const;
  148.     /**Set the video frame rate to be used on the device.
  149.        Default behaviour sets the value of the frameRate variable and then
  150.        returns the IsOpen() status.
  151.     */
  152.     virtual BOOL SetFrameRate(
  153.       unsigned rate  /// Frames per 100 seconds
  154.     );
  155.     /**Get the video frame rate used on the device.
  156.        Default behaviour returns the value of the frameRate variable.
  157.     */
  158.     virtual unsigned GetFrameRate() const;
  159.     /**Get the minimum & maximum size of a frame on the device.
  160.        Default behaviour returns the value 1 to UINT_MAX for both and returns
  161.        FALSE.
  162.     */
  163.     virtual BOOL GetFrameSizeLimits(
  164.       unsigned & minWidth,   /// Variable to receive minimum width
  165.       unsigned & minHeight,  /// Variable to receive minimum height
  166.       unsigned & maxWidth,   /// Variable to receive maximum width
  167.       unsigned & maxHeight   /// Variable to receive maximum height
  168.     ) const;
  169.     /**Set the frame size to be used.
  170.        Default behaviour sets the frameWidth and frameHeight variables and
  171.        returns the IsOpen() status.
  172.     */
  173.     virtual BOOL SetFrameSize(
  174.       unsigned width,   /// New width of frame
  175.       unsigned height   /// New height of frame
  176.     );
  177.     /**Get the frame size being used.
  178.        Default behaviour returns the value of the frameWidth and frameHeight
  179.        variable and returns the IsOpen() status.
  180.     */
  181.     virtual BOOL GetFrameSize(
  182.       unsigned & width,
  183.       unsigned & height
  184.     ) const;
  185.     /**Get the maximum frame size in bytes.
  186.        Note a particular device may be able to provide variable length
  187.        frames (eg motion JPEG) so will be the maximum size of all frames.
  188.       */
  189.     virtual PINDEX GetMaxFrameBytes() = 0;
  190.     /**Get the last error code. This is a platform dependent number.
  191.       */
  192.     int GetLastError() const { return lastError; }
  193.   protected:
  194.     PString      deviceName;
  195.     int          lastError;
  196.     VideoFormat  videoFormat;
  197.     unsigned     channelNumber;
  198.     ColourFormat colourFormat;
  199.     unsigned     frameRate;
  200.     unsigned     frameWidth;
  201.     unsigned     frameHeight;
  202. };
  203. /**This class defines a video output device.
  204.  */
  205. class PVideoOutputDevice : public PVideoDevice
  206. {
  207.   PCLASSINFO(PVideoOutputDevice, PVideoDevice);
  208.   public:
  209.     /** Create a new video output device.
  210.      */
  211.     PVideoOutputDevice(
  212.       VideoFormat videoformat = PAL,
  213.       int channelNumber = 0,
  214.       ColourFormat colourFormat = RGB24
  215.     );
  216. };
  217. /**This class defines a video input device.
  218.  */
  219. class PVideoInputDevice : public PVideoDevice
  220. {
  221.   PCLASSINFO(PVideoInputDevice, PVideoDevice);
  222.   public:
  223.     /** Create a new video input device.
  224.      */
  225.     PVideoInputDevice(
  226.       VideoFormat videoformat = PAL,
  227.       unsigned channelNumber = 0,
  228.       ColourFormat colourFormat = RGB24
  229.     );
  230.     /**Close the video input device on destruction.
  231.       */
  232.     ~PVideoInputDevice() { Close(); }
  233.     /**Open the device given the device name.
  234.       */
  235.     virtual BOOL Open(
  236.       const PString & deviceName,   /// Device name to open
  237.       BOOL startImmediate = TRUE    /// Immediately start device
  238.     );
  239.     /**Determine of the device is currently open.
  240.       */
  241.     virtual BOOL IsOpen() const;
  242.     /**Close the device.
  243.       */
  244.     virtual BOOL Close();
  245.     /**Start the video device I/O.
  246.       */
  247.     virtual BOOL Start();
  248.     /**Stop the video device I/O capture.
  249.       */
  250.     virtual BOOL Stop();
  251.     /**Determine if the video device I/O capture is in progress.
  252.       */
  253.     virtual BOOL IsCapturing();
  254.     /**Get a list of all of the drivers available.
  255.       */
  256.     virtual PStringList GetDeviceNames() const;
  257.     /**Get the maximum frame size in bytes.
  258.        Note a particular device may be able to provide variable length
  259.        frames (eg motion JPEG) so will be the maximum size of all frames.
  260.       */
  261.     virtual PINDEX GetMaxFrameBytes();
  262.     /**Grab a frame.
  263.       */
  264.     virtual BOOL GetFrame(
  265.       PBYTEArray & frame
  266.     );
  267.     /**Grab a frame.
  268.       */
  269.     virtual BOOL GetFrameData(
  270.       BYTE * buffer,                 /// Buffer to receive frame
  271.       PINDEX * bytesReturned = NULL  /// OPtional bytes returned.
  272.     );
  273. #ifdef DOC_PLUS_PLUS
  274. };
  275. #endif
  276. // Class declaration continued in platform specific header file ///////////////