📄 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.43 2005/11/25 03:43:47 csoutheren
* Fixed function argument comments to be compatible with Doxygen
*
* 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
#endif
class 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 at
http://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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -