/* * vidinput_v4l2.h * * 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 (V4L plugin). * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): Derek Smithies (derek@indranet.co.nz) * Mark Cooke (mpc@star.sr.bham.ac.uk) * Nicola Orru' * * $Log: vidinput_v4l2.h,v $ * Revision 1.5.4.2 2006/11/01 17:59:31 dsandras * Applied patch from Brian Lu to fix V4L2 on OpenSolaris. * * Revision 1.5.4.1 2006/03/12 11:16:58 dsandras * Added multi-buffering support to V4L2 thanks to Luc Saillard. Thanks! * Backport from HEAD. * * Revision 1.5 2006/01/09 18:22:42 dsandras * Use memset before some ioctl() to make valgrind happy. * Create a common function to set and get control information. * Fix range values return by the driver. * Fix setting value to be in the range (>>16 is unsigned). * Add support for YUY2. * Patch from Luc Saillard . Many thanks! * * Revision 1.4 2005/08/09 09:08:10 rjongbloed * Merged new video code from branch back to the trunk. * * Revision 1.3.4.2 2005/07/24 09:01:49 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.3.4.1 2005/07/17 11:30:42 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.3 2004/11/07 22:48:47 dominance * fixed copyright of v4l2 plugin. Last commit's credits go to Nicola Orru' ... * */ #ifndef _PVIDEOIOV4L2 #define _PVIDEOIOV4L2 #include #include #include #include #include #ifdef SOLARIS #include #else #include #endif #ifndef V4L2_PIX_FMT_SBGGR8 #define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B','A','8','1') /* 8 BGBG.. GRGR.. */ #endif class PVideoInputDevice_V4L2: public PVideoInputDevice { PCLASSINFO(PVideoInputDevice_V4L2, PVideoInputDevice); public: PVideoInputDevice_V4L2(); ~PVideoInputDevice_V4L2(); void ReadDeviceDirectory (PDirectory, POrdinalToString &); static PStringList GetInputDeviceNames(); PStringList GetDeviceNames() const { return GetInputDeviceNames(); } BOOL Open(const PString &deviceName, BOOL startImmediate); BOOL IsOpen(); BOOL Close(); BOOL Start(); BOOL Stop(); BOOL IsCapturing(); PINDEX GetMaxFrameBytes(); BOOL GetFrameData(BYTE*, PINDEX*); BOOL GetFrameDataNoDelay(BYTE*, PINDEX*); BOOL GetFrameSizeLimits(unsigned int&, unsigned int&, unsigned int&, unsigned int&); BOOL TestAllFormats(); BOOL SetFrameSize(unsigned int, unsigned int); BOOL SetFrameRate(unsigned int); BOOL VerifyHardwareFrameSize(unsigned int, unsigned int); BOOL GetParameters(int*, int*, int*, int*, int*); BOOL SetColourFormat(const PString&); int GetControlCommon(unsigned int control, int *value); BOOL SetControlCommon(unsigned int control, int newValue); int GetContrast(); BOOL SetContrast(unsigned int); int GetBrightness(); BOOL SetBrightness(unsigned int); int GetWhiteness(); BOOL SetWhiteness(unsigned int); int GetColour(); BOOL SetColour(unsigned int); int GetHue(); BOOL SetHue(unsigned int); BOOL SetVideoChannelFormat(int, PVideoDevice::VideoFormat); BOOL SetVideoFormat(PVideoDevice::VideoFormat); int GetNumChannels(); BOOL SetChannel(int); BOOL NormalReadProcess(BYTE*, PINDEX*); void ClearMapping(); BOOL SetMapping(); struct v4l2_capability videoCapability; struct v4l2_streamparm videoStreamParm; BOOL canRead; BOOL canStream; BOOL canSelect; BOOL canSetFrameRate; BOOL isMapped; #define NUM_VIDBUF 4 BYTE * videoBuffer[NUM_VIDBUF]; uint videoBufferCount; uint currentvideoBuffer; int videoFd; int frameBytes; BOOL started; }; #endif