/* * videoio1394dc.h * * Copyright: * Copyright (c) 2002 Ryutaroh Matsumoto * * 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. * * * Classes to support streaming video input from IEEE 1394 cameras. * Detailed explanation can be found at src/ptlib/unix/video4dc1394.cxx * * $Log: videoio1394dc.h,v $ * Revision 1.2.2.1 2006/04/30 21:30:56 dsandras * Backport from HEAD. * * Revision 1.3 2006/04/30 21:25:21 dsandras * Fixed resolution detection thanks to Luc Saillard . * Thanks a lot! * * Revision 1.2 2005/08/09 09:08:10 rjongbloed * Merged new video code from branch back to the trunk. * * Revision 1.1.8.2 2005/07/24 09:01:48 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.1.8.1 2005/07/17 09:27:07 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.1 2003/12/17 15:40:56 dominance * Added DC Plugin as provided by Julien Puydt . Needs manual patching of plugins/configure for now though. (i.e. disabled by default, run autoconf in plugins/) * * Revision 1.2 2002/05/30 22:49:35 dereks * correct implementation of GetInputDeviceNames(). * * Revision 1.1 2002/02/20 02:37:26 dereks * Initial release of Firewire camera support for linux. * Many thanks to Ryutaroh Matsumoto . * * */ #ifndef _PVIDEOIO1394DC #define _PVIDEOIO1394DC #ifdef __GNUC__ #pragma interface #endif #include #include /** This class defines a video input device that generates fictitous image data. */ class PVideoInputDevice_1394DC : public PVideoInputDevice { PCLASSINFO(PVideoInputDevice_1394DC, PVideoInputDevice); public: /** Create a new video input device. */ PVideoInputDevice_1394DC(); /**Close the video input device on destruction. */ ~PVideoInputDevice_1394DC(); /**Open the device given the device name. */ BOOL Open( const PString & deviceName, /// Device name to open BOOL startImmediate = TRUE /// Immediately start device ); /**Determine of the device is currently open. */ BOOL IsOpen(); /**Close the device. */ BOOL Close(); /**Start the video device I/O. */ BOOL Start(); /**Stop the video device I/O capture. */ BOOL Stop(); /**Determine if the video device I/O capture is in progress. */ BOOL IsCapturing(); /**Get a list of all of the drivers available. */ static PStringList GetInputDeviceNames(); PStringList GetDeviceNames() const { return GetInputDeviceNames(); } /**Get the maximum frame size in bytes. Note a particular device may be able to provide variable length frames (eg motion JPEG) so will be the maximum size of all frames. */ PINDEX GetMaxFrameBytes(); /**Grab a frame, after a delay as specified by the frame rate. */ BOOL GetFrameData( BYTE * buffer, /// Buffer to receive frame PINDEX * bytesReturned = NULL /// OPtional bytes returned. ); /**Grab a frame. Do not delay according to the current frame rate parameter. */ BOOL GetFrameDataNoDelay( BYTE * buffer, /// Buffer to receive frame PINDEX * bytesReturned = NULL /// OPtional bytes returned. ); /**Get the brightness of the image. 0xffff-Very bright. */ int GetBrightness(); /**Set brightness of the image. 0xffff-Very bright. */ BOOL SetBrightness(unsigned newBrightness); /**Get the whiteness of the image. 0xffff-Very white. */ int GetWhiteness(); /**Set whiteness of the image. 0xffff-Very white. */ BOOL SetWhiteness(unsigned newWhiteness); /**Get the colour of the image. 0xffff-lots of colour. */ int GetColour(); /**Set colour of the image. 0xffff-lots of colour. */ BOOL SetColour(unsigned newColour); /**Get the contrast of the image. 0xffff-High contrast. */ int GetContrast(); /**Set contrast of the image. 0xffff-High contrast. */ BOOL SetContrast(unsigned newContrast); /**Get the hue of the image. 0xffff-High hue. */ int GetHue(); /**Set hue of the image. 0xffff-High hue. */ BOOL SetHue(unsigned newHue); /**Return whiteness, brightness, colour, contrast and hue in one call. */ BOOL GetParameters (int *whiteness, int *brightness, int *colour, int *contrast, int *hue); /**Get the minimum & maximum size of a frame on the device. */ BOOL GetFrameSizeLimits( unsigned & minWidth, /// Variable to receive minimum width unsigned & minHeight, /// Variable to receive minimum height unsigned & maxWidth, /// Variable to receive maximum width unsigned & maxHeight /// Variable to receive maximum height ) ; void ClearMapping(); int GetNumChannels(); BOOL SetChannel( int channelNumber /// New channel number for device. ); BOOL SetFrameRate( unsigned rate /// Frames per second ); BOOL SetVideoFormat( VideoFormat videoFormat /// New video format ); BOOL SetFrameSize( unsigned width, /// New width of frame unsigned height /// New height of frame ); BOOL SetColourFormat( const PString & colourFormat // New colour format for device. ); /**Try all known video formats & see which ones are accepted by the video driver */ BOOL TestAllFormats(); /**Set the frame size to be used, trying converters if available. If the device does not support the size, a set of alternate resolutions are attempted. A converter is setup if possible. */ BOOL SetFrameSizeConverter( unsigned width, /// New width of frame unsigned height, /// New height of frame BOOL bScaleNotCrop /// Scale or crop/pad preference ); /**Set the colour format to be used, trying converters if available. This function will set the colour format on the device to one that is compatible with a registered converter, and install that converter so that the correct format is used. */ BOOL SetColourFormatConverter( const PString & colourFormat // New colour format for device. ); protected: PINDEX frameBytes; raw1394handle_t handle; BOOL is_capturing; BOOL UseDMA; nodeid_t * camera_nodes; int numCameras; dc1394_cameracapture camera; int capturing_duration; PString desiredColourFormat; unsigned desiredFrameWidth; unsigned desiredFrameHeight; int supportedFormat; #define DC1394_FORMAT_160x120 1 #define DC1394_FORMAT_320x240 2 }; #endif // End Of File ///////////////////////////////////////////////////////////////