📄 videoio.h
字号:
/* * videoio.h * * Classes to support streaming video input (grabbing) and output. * * Portable Windows Library * * Copyright (c) 1993-2000 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Portable Windows Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): Mark Cooke (mpc@star.sr.bham.ac.uk) * * $Log: videoio.h,v $ * Revision 1.42 2005/08/09 09:08:09 rjongbloed * Merged new video code from branch back to the trunk. * * Revision 1.41.4.1 2005/07/17 09:27:04 rjongbloed * Major revisions of the PWLib video subsystem including: * removal of F suffix on colour formats for vertical flipping, all done with existing bool * working through use of RGB and BGR formats so now consistent * cleaning up the plug in system to use virtuals instead of pointers to functions. * rewrite of SDL to be a plug in compatible video output device. * extensive enhancement of video test program * * Revision 1.41 2005/01/04 07:44:03 csoutheren * More changes to implement the new configuration methodology, and also to * attack the global static problem * * Revision 1.40 2004/04/18 12:49:22 csoutheren * Patches to video code thanks to Guilhem Tardy (hope I get it right this time :) * * Revision 1.39 2004/01/18 14:23:30 dereksmithies * Add new function to make opening of video input devices easier. * * Revision 1.38 2004/01/02 23:30:18 rjongbloed * Removed extraneous static function for getting input device names that has been deprecated during the plug ins addition. * * Revision 1.37 2003/12/14 10:01:02 rjongbloed * Resolved issue with name space conflict os static and virtual forms of GetDeviceNames() function. * * Revision 1.36 2003/12/03 03:47:56 dereksmithies * Add fix so video output devices compile and run correctly. * Thanks to Craig Southeren. * * Revision 1.35 2003/11/19 04:29:02 csoutheren * Changed to support video output plugins * * Revision 1.34 2003/11/18 10:39:06 csoutheren * Fixed warnings regarding calling virtual Close in destructors * * Revision 1.33 2003/11/18 06:46:15 csoutheren * Changed to support video input plugins * * Revision 1.32 2003/09/17 05:41:59 csoutheren * Removed recursive includes * * Revision 1.31 2003/09/17 01:18:02 csoutheren * Removed recursive include file system and removed all references * to deprecated coooperative threading support * * Revision 1.30 2003/03/17 08:10:00 robertj * Fixed GNU warning * * Revision 1.29 2003/03/17 07:51:07 robertj * Added OpenFull() function to open with all video parameters in one go. * Made sure vflip variable is set in converter even if converter has not * been set yet, should not depend on the order of functions! * Removed canCaptureVideo variable as this is really a virtual function to * distinguish PVideoOutputDevice from PVideoInputDevice, it is not dynamic. * Made significant enhancements to PVideoOutputDevice class. * Added PVideoOutputDevice descendants for NULL and PPM files. * * Revision 1.28 2002/09/16 01:08:59 robertj * Added #define so can select if #pragma interface/implementation is used on * platform basis (eg MacOS) rather than compiler, thanks Robert Monaghan. * * Revision 1.27 2002/04/12 08:25:12 robertj * Added text string output for tracing video format. * * Revision 1.26 2002/04/05 06:41:54 rogerh * Apply video changes from Damien Sandras <dsandras@seconix.com>. * The Video Channel and Format are no longer set in Open(). Instead * call the new SetVideoChannelFormat() method. This makes video capture * and GnomeMeeting more stable with certain Linux video capture devices. * * Revision 1.25 2002/02/20 02:37:26 dereks * Initial release of Firewire camera support for linux. * Many thanks to Ryutaroh Matsumoto <ryutaroh@rmatsumoto.org>. * * Revision 1.24 2002/01/16 07:51:06 robertj * MSVC compatibilty changes * * Revision 1.23 2002/01/16 03:51:20 dereks * Move flip methods in PVideoInputDevice to PVideoDevice * * Revision 1.22 2002/01/14 02:59:54 robertj * Added preferred colour format selection, thanks Walter Whitlock * * Revision 1.21 2002/01/04 04:11:45 dereks * Add video flip code from Walter Whitlock, which flips code at the grabber. * * Revision 1.20 2001/11/28 00:07:32 dereks * Locking added to PVideoChannel, allowing reader/writer to be changed mid call * Enabled adjustment of the video frame rate * New fictitous image, a blank grey area * * Revision 1.19 2001/08/06 06:12:45 rogerh * Fix comments * * Revision 1.18 2001/08/03 04:21:51 dereks * Add colour/size conversion for YUV422->YUV411P * Add Get/Set Brightness,Contrast,Hue,Colour for PVideoDevice, and * Linux PVideoInputDevice. * Add lots of PTRACE statement for debugging colour conversion. * Add support for Sony Vaio laptop under linux. Requires 2.4.7 kernel. * * Revision 1.17 2001/05/22 23:38:45 robertj * Fixed bug in PVideoOutputDevice, removed redundent SetFrameSize. * * Revision 1.16 2001/05/22 12:49:32 robertj * Did some seriously wierd rewrite of platform headers to eliminate the * stupid GNU compiler warning about braces not matching. * * Revision 1.15 2001/03/20 02:21:57 robertj * More enhancements from Mark Cooke * * Revision 1.14 2001/03/08 23:04:19 robertj * Fixed up some documentation. * * Revision 1.13 2001/03/08 08:31:34 robertj * Numerous enhancements to the video grabbing code including resizing * infrastructure to converters. Thanks a LOT, Mark Cooke. * * Revision 1.12 2001/03/07 01:42:59 dereks * miscellaneous video fixes. Works on linux now. Add debug statements * (at PTRACE level of 1) * * Revision 1.11 2001/03/06 23:34:20 robertj * Added static function to get input device names. * Moved some inline virtuals to non-inline. * * Revision 1.10 2001/03/03 05:06:31 robertj * Major upgrade of video conversion and grabbing classes. * * Revision 1.9 2001/02/28 01:47:14 robertj * Removed function from ancestor and is not very useful, thanks Thorsten Westheider. * * Revision 1.8 2000/12/19 22:20:26 dereks * Add video channel classes to connect to the PwLib PVideoInputDevice class. * Add PFakeVideoInput class to generate test images for video. * * Revision 1.7 2000/11/09 00:20:38 robertj * Added qcif size constants * * Revision 1.6 2000/07/30 03:41:31 robertj * Added more colour formats to video device enum. * * Revision 1.5 2000/07/26 03:50:49 robertj * Added last error variable to video device. * * Revision 1.4 2000/07/26 02:13:46 robertj * Added some more "common" bounds checking to video device. * * Revision 1.3 2000/07/25 13:38:25 robertj * Added frame rate parameter to video frame grabber. * * Revision 1.2 2000/07/25 13:14:05 robertj * Got the video capture stuff going! * * Revision 1.1 2000/07/15 09:47:34 robertj * Added video I/O device classes. * */#ifndef _PVIDEOIO#define _PVIDEOIO#ifdef P_USE_PRAGMA#pragma interface#endifclass PColourConverter;/**This class defines a video device. This class is used to abstract the few parameters that are common to both\ input and output devices. Example colour formats are: "Grey" Simple 8 bit linear grey scale "Gray" Synonym for Grey "RGB32" 32 bit RGB "RGB24" 24 bit RGB "RGB565" 16 bit RGB (6 bit green) "RGB555" 15 bit RGB "YUV422" YUV 4:2:2 packed "YUV422P" YUV 4:2:2 planar "YUV411" YUV 4:1:1 packed "YUV411P" YUV 4:1:1 planar "YUV420" YUV 4:2:0 packed "YUV420P" YUV 4:2:0 planar "YUV410" YUV 4:1:0 packed "YUV410P" YUV 4:1:0 planar "MJPEG" Motion JPEG "UYVY422" YUV 4:2:2 packed as U Y V Y U Y V Y ... "UYV444 YUV 4:4:4 packed as U Y V U Y V ... They are used in IEEE 1394 digital cameras. The specification is found athttp://www.1394ta.org/Download/Technology/Specifications/2000/IIDC_Spec_v1_30.pdf */class PVideoDevice : public PObject{ PCLASSINFO(PVideoDevice, PObject); protected: /** Create a new video device (input or output). */ PVideoDevice(); public: /** Delete structures created by PVideoDevice(); */ virtual ~PVideoDevice(); enum VideoFormat { PAL, NTSC, SECAM, Auto, NumVideoFormats }; enum StandardSizes { CIF16Width = 1408, CIF16Height = 1152, CIF4Width = 704, CIF4Height = 576, CIFWidth = 352, CIFHeight = 288, QCIFWidth = 176, QCIFHeight = 144, SQCIFWidth = 144, SQCIFHeight = 96, }; /**Get the device name of the open device. */ const PString & GetDeviceName() const { return deviceName; } /**Get a list of all of the drivers available. */ virtual PStringList GetDeviceNames() const = 0; struct OpenArgs { OpenArgs() : deviceName("#1"), videoFormat(Auto), channelNumber(0), colourFormat("YUV420P"), convertFormat(TRUE), rate(0), width(CIFWidth), height(CIFHeight), convertSize(TRUE), scaleSize(FALSE), flip(FALSE), brightness(-1), whiteness(-1), contrast(-1), colour(-1), hue(-1) { } PString deviceName; VideoFormat videoFormat; int channelNumber; PString colourFormat; bool convertFormat; unsigned rate; unsigned width; unsigned height; bool convertSize; bool scaleSize; bool flip; int brightness; int whiteness; int contrast; int colour; int hue; }; /**Open the device given the device name. */ virtual BOOL OpenFull( const OpenArgs & args, /// Parameters to set on opened device BOOL startImmediate = TRUE /// Immediately start device ); /**Open the device given the device name. */ virtual BOOL Open( const PString & deviceName, /// Device name to open BOOL startImmediate = TRUE /// Immediately start device ) = 0; /**Determine if the device is currently open.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -