LTI-Lib latest version v1.9 - last update 10 Apr 2010

ltiMicroEnablePulnix.h

00001 /*
00002  * Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
00003  * Lehrstuhl fuer Technische Informatik, RWTH-Aachen, Germany
00004  *
00005  * This file is part of the LTI-Computer Vision Library (LTI-Lib)
00006  *
00007  * The LTI-Lib is free software; you can redistribute it and/or
00008  * modify it under the terms of the GNU Lesser General Public License (LGPL)
00009  * as published by the Free Software Foundation; either version 2.1 of
00010  * the License, or (at your option) any later version.
00011  *
00012  * The LTI-Lib is distributed in the hope that it will be
00013  * useful, but WITHOUT ANY WARRANTY; without even the implied warranty
00014  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015  * GNU Lesser General Public License for more details.
00016  *
00017  * You should have received a copy of the GNU Lesser General Public
00018  * License along with the LTI-Lib; see the file LICENSE.  If
00019  * not, write to the Free Software Foundation, Inc., 59 Temple Place -
00020  * Suite 330, Boston, MA 02111-1307, USA.
00021  */
00022 
00023 
00024 /*----------------------------------------------------------------
00025  * project ....: LTI Digital Image/Signal Processing Library
00026  * file .......: ltiMicroEnablePulnix.h
00027  * authors ....: Pablo Alvarado
00028  * organization: LTI, RWTH Aachen
00029  * creation ...: 13.08.99
00030  * revisions ..: $Id: ltiMicroEnablePulnix.h,v 1.7 2006/02/08 12:06:52 ltilib Exp $
00031  */
00032 
00033 #ifndef _LTI_MICRO_ENABLE_H_
00034 #define _LTI_MICRO_ENABLE_H_
00035 
00036 
00037 #include "ltiFrameGrabber.h"
00038 #include "ltiSemaphore.h"
00039 #include "ltiSerial.h"
00040 
00041 #ifdef _USE_MICRO_ENABLE_FRAME_GRABBER
00042 
00043 // ------- Silicon Software Includes -------
00044 
00045 #if __linux__
00046 
00047 // this is required by silicon software os_type.h file:
00048 #ifndef LINUX
00049 #define LINUX
00050 #endif
00051 
00052 #endif
00053 
00054 #include <menable.h>
00055 #include <fgrab.h>
00056 
00057 // ----------------------------
00058 
00059 namespace lti {
00060 
00061   /**
00062    * Silicon Software channel link frame grabber (Linux version!).
00063    *
00064    * class for grabbing frames from cameras and converting them to lti::image
00065    * format.
00066    *
00067    * Don't forget to uncomment the line
00068    * "#define _USE_MICRO_ENABLE_FRAME_GRABBER" in the file ltiHardwareConfig.h
00069    * before compiling!
00070    *
00071    * For Linux it is important to use the correct extra-path variables in
00072    * the Makefile.  These variables point to the include files and
00073    * libraries required by the MicroEnable hardware.  The variables are:
00074    * \code
00075    * EXTRAINCLUDEPATH = -I/usr/src/menable/include
00076    * EXTRALIBPATH = -L/usr/src/menable/lib
00077    * EXTRALIBS =  -lpulnixchanneltmc6700 -lmenable
00078    * \endcode
00079    *
00080    * where you should replace <code>/usr/src/menable</code> with the correct
00081    * path to your MicroEnable directory.
00082    *
00083    * Errors:
00084    * The error 2080 usually means that the variable HAP_PATH has not been
00085    * set yet!
00086    *
00087    */
00088   class microEnablePulnix : public frameGrabber {
00089   public:
00090 
00091     class bankType;
00092 
00093     /**
00094      * frameGrabber parameters class
00095      */
00096     class parameters : public frameGrabber::parameters {
00097       friend class microEnablePulnix;
00098     public:
00099       /**
00100        * default constructor
00101        */
00102       parameters();
00103 
00104       /**
00105        * copy constructor
00106        */
00107       parameters( const parameters& other );
00108 
00109       /**
00110        * destructor
00111        */
00112       ~parameters();
00113 
00114       /**
00115        * copy member
00116        */
00117       parameters& copy( const parameters& other );
00118 
00119       /**
00120        * returns a pointer to a clone of the parameters.
00121        */
00122       virtual functor::parameters* clone() const;
00123 
00124       /**
00125        * returns the type name
00126        */
00127       virtual const char* getTypeName() const;
00128 
00129       /**
00130        * read the parameters from the given ioHandler
00131        * @param handler the ioHandler to be used
00132        * @param complete if true (the default) the enclosing begin/end will
00133        *        be also written, otherwise only the data block will be written.
00134        * @return true if write was successful
00135        */
00136       virtual bool write(ioHandler& handler,const bool complete=true) const;
00137 
00138       /**
00139        * read the parameters from the given ioHandler
00140        * @param handler the ioHandler to be used
00141        * @param complete if true (the default) the enclosing begin/end will
00142        *        be also written, otherwise only the data block will be written.
00143        * @return true if write was successful
00144        */
00145       virtual bool read(ioHandler& handler,const bool complete=true);
00146 
00147 
00148 
00149 #     ifdef _LTI_MSC_6
00150       /**
00151        * this function is required by MSVC only, as a workaround for a
00152        * very awful bug, which exists since MSVC V.4.0, and still by
00153        * V.6.0 with all bugfixes (so called "service packs") remains
00154        * there...  This method is also public due to another bug, so please
00155        * NEVER EVER call this method directly: use read() instead
00156        */
00157       bool readMS(ioHandler& handler,const bool complete=true);
00158 
00159       /**
00160        * this function is required by MSVC only, as a workaround for a
00161        * very awful bug, which exists since MSVC V.4.0, and still by
00162        * V.6.0 with all bugfixes (so called "service packs") remains
00163        * there...  This method is also public due to another bug, so please
00164        * NEVER EVER call this method directly: use write() instead
00165        */
00166       bool writeMS(ioHandler& handler,const bool complete=true) const;
00167 #     endif
00168 
00169       /**
00170        * read the parameters from the camera,
00171        * assuming that the serial port of the pulnix camera is
00172        * connected at the given serial port.  This will take a while!
00173        * You can choose if you want to read all parameter sets or the
00174        * current bank only.
00175        *
00176        * To send the parameters to the camera use the method setParameters()
00177        * of the microEnablePulnix functor.
00178        *
00179        * @param serialPort the serial port used to communicate with
00180        * the camera.  (Com1, Com2, ...)
00181        * @param allBanks if true, all parameter banks will be read.  Otherwise
00182        *                 only the current bank will be read.
00183        * @return true if successful, false otherwise
00184        */
00185       virtual bool download(const serial::parameters::ePortType& serialPort,
00186                             const bool& allBanks = true);
00187 
00188 
00189       // ------------- The Parameters ---------------
00190 
00191       /**
00192        * Which serial port should be used to communicate with the camera?
00193        */
00194       serial::parameters::ePortType serialPort;
00195 
00196       /**
00197        * The four parameter banks
00198        */
00199       bankType* bank;
00200 
00201       /**
00202        * The parameter-bank number to be used.
00203        * This must be a value between 0 and 3.  Only the last two bits of
00204        * the given value will be considered.
00205        * Default value: 3
00206        */
00207       int currentBank;
00208 
00209       /**
00210        * Amount of memory in bytes to be allocated on the host to
00211        * communicate with the grabber (Default 8MB=8*1024*1024).
00212        *
00213        * This parameter is consider just once, at the initialization.
00214        * After that, it is not possible to change the buffer size.
00215        */
00216       int bufferSize;
00217 
00218       /**
00219        * dimensions of the grabbed window (default 640x480)
00220        */
00221       point windowSize;
00222 
00223       /**
00224        * offset of the grabbed window (default 104x40)
00225        */
00226       point windowOffset;
00227 
00228       /**
00229        * Possible shutter modes
00230        */
00231       enum eShutterMode {
00232         SMUninitialized = -1, /**< uninitialized shutter mode */
00233         DirectM, /**< Direct shutter specification for the manual mode.
00234                   *   The shutter value to be used is specified in the
00235                   *   parameter <code>shutterSpeed</code>
00236                   */
00237         DirectA, /**< Direct shutter specification for the asynchronous mode.
00238                   *   The shutter value to be used is specified in the
00239                   *   parameter <code>shutterSpeed</code>
00240                   */
00241         Manual,  /**< Use one of the shutter values specified in the
00242                   *   manual shutter table.  The entry in that table is
00243                   *   given in the parameter <code>shutterEntry</code>.
00244                   */
00245         Async,   /**< Use one of the shutter values specified in the
00246                   *   async shutter table.  The entry in that table is
00247                   *   given in the parameter <code>shutterEntry</code>.
00248                   */
00249       };
00250 
00251       /**
00252        * modes for edge enhancement
00253        */
00254       enum eEdgeEnhancement {
00255         EEUninitialized=-1, /**< uninitialized
00256                              */
00257         Off=0x00,           /**< No edge enhancement
00258                              */
00259         Horizontal=0x04,    /**< Horizontal edge enhancement
00260                              */
00261         Vertical=0x08,      /**< Vertical edge enhancement
00262                              */
00263         Both=0x0C           /**< Horizontal and vertical edge enhancement
00264                              */
00265       };
00266 
00267       /**
00268        * white balance mode
00269        */
00270       enum eWhiteBalanceType {
00271         WBUninitialized=-1, /**< uninitialized
00272                              */
00273         WBManual, /**< Manual mode.  You need this mode to adjust the
00274                    *   blue and red gains.
00275                    *   In the Pulnix documentation, this mode is
00276                    *   refered as "External" mode
00277                    */
00278         WBAuto    /**< Automatic White Balance.
00279                    *   In the Pulnix documentation, this mode is
00280                    *   refered as "Internal" mode
00281                    */
00282       };
00283 
00284     protected:
00285 
00286       /**
00287        * send the parameters to the camera,
00288        * assuming that the serial port of the pulnix camera is
00289        * connected to the given serial port.  This will upload only
00290        * those parameter that have changed!
00291        * You can choose if you want to send only the current bank (default) or
00292        * if you want to send all parameters banks.
00293        * @param serialPort the serial port used to communicate with
00294        * the camera.  (Com1, Com2, ...)
00295        * @param allBanks if true, all parameters sets will be send to the
00296        *                 camera.  If false, only the current bank will be send.
00297        * @param force if true, everything will be senden, ignoring the
00298        *              content of the "camera shadow"
00299        * @return true if successful, false otherwise
00300        */
00301       virtual bool upload(const serial::parameters::ePortType& serialPort,
00302                           const bool allBanks = false,
00303                           const bool force = false) const;
00304 
00305       /**
00306        * dimensions of the grabbed window
00307        *
00308        * These are the real values in the camera/frame grabber, used
00309        * to detect if the table needs to be resend.
00310        */
00311       static point camWindowSize;
00312 
00313       /**
00314        * offset of the grabbed window
00315        *
00316        * These are the real values in the camera/frame grabber, used
00317        * to detect if the table needs to be resend.
00318        */
00319       static point camWindowOffset;
00320 
00321       /**
00322        * current bank in the camera
00323        */
00324       static int camCurrentBank;
00325     };
00326 
00327     /**
00328      * The Pulnix Camera TMC6700 can handle up to four parameters sets.
00329      * This class provides the information for one bank.  The parameter class
00330      * contains four of this banks.
00331      */
00332     class bankType : public functor::parameters {
00333     public:
00334       /**
00335        * default constructor.
00336        */
00337       bankType();
00338 
00339       /**
00340        * copy constructor.
00341        *
00342        * This constructor copies everything (including the bankNumber).
00343        */
00344       bankType( const bankType& other );
00345 
00346       /**
00347        * destructor
00348        */
00349       virtual ~bankType();
00350 
00351       /**
00352        * Set the bank identification number for this parameter set
00353        */
00354       void setBankNumber(const int& bank);
00355 
00356       /**
00357        * Get the bank identification number for this parameter set
00358        */
00359       const int& getBankNumber() const;
00360 
00361       /**
00362        * copy member.
00363        *
00364        * Please note that the bankNumber will NOT be copied.  This allows
00365        * to copy one bank into another without needing to reset the bank
00366        * number.
00367        */
00368       bankType& copy( const bankType& other );
00369 
00370       /**
00371        * returns a pointer to a clone of the parameters.
00372        */
00373       virtual functor::parameters* clone() const;
00374 
00375       /**
00376        * returns the type name
00377        */
00378       virtual const char* getTypeName() const;
00379 
00380       /**
00381        * read the parameters from the given ioHandler
00382        * @param handler the ioHandler to be used
00383        * @param complete if true (the default) the enclosing begin/end will
00384        *        be also written, otherwise only the data block will be written.
00385        * @return true if write was successful
00386        */
00387       virtual bool write(ioHandler& handler,const bool complete=true) const;
00388 
00389       /**
00390        * write the parameters in a parameter-bank of the camera,
00391        * assuming that the serial port of the pulnix camera is
00392        * connected to the given serial port.  This will upload only
00393        * those parameter that have changed!
00394        * @param serialPort the serial port used to communicate with
00395        *                   the camera.  (Com1, Com2, ...)
00396        * @param force flag to indicate if everything needs to be send (true)
00397        *        or if only the changed stuff needs to be send (false)
00398        * @return true if successful, false otherwise
00399        */
00400       virtual bool
00401       upload(const serial::parameters::ePortType& serialPort,
00402              const bool force = false) const;
00403 
00404       /**
00405        * activate this bank in the camera
00406        * @param serialPort the serial port used to communicate with
00407        * the camera.  (Com1, Com2, ...)
00408        * @return true if successful, false otherwise
00409        */
00410       virtual bool
00411       activate(const serial::parameters::ePortType& serialPort) const;
00412 
00413       /**
00414        * read the parameters from the given ioHandler
00415        * @param handler the ioHandler to be used
00416        * @param complete if true (the default) the enclosing begin/end will
00417        *        be also written, otherwise only the data block will be written.
00418        * @return true if write was successful
00419        */
00420       virtual bool read(ioHandler& handler,const bool complete=true);
00421 
00422       /**
00423        * read the parameters from the parameter-bank in the camera,
00424        * assuming that the serial port of the pulnix camera is
00425        * connected at the given serial port.  This will take a while!
00426        * @param serialPort the serial port used to communicate with
00427        * the camera.  (Com1, Com2, ...)
00428        * @return true if successful, false otherwise
00429        */
00430       virtual bool download(const serial::parameters::ePortType& serialPort);
00431 
00432 #     ifdef _LTI_MSC_6
00433       /**
00434        * this function is required by MSVC only, as a workaround for a
00435        * very awful bug, which exists since MSVC V.4.0, and still by
00436        * V.6.0 with all bugfixes (so called "service packs") remains
00437        * there...  This method is also public due to another bug, so please
00438        * NEVER EVER call this method directly: use read() instead
00439        */
00440       bool readMS(ioHandler& handler,const bool complete=true);
00441 
00442       /**
00443        * this function is required by MSVC only, as a workaround for a
00444        * very awful bug, which exists since MSVC V.4.0, and still by
00445        * V.6.0 with all bugfixes (so called "service packs") remains
00446        * there...  This method is also public due to another bug, so please
00447        * NEVER EVER call this method directly: use write() instead
00448        */
00449       bool writeMS(ioHandler& handler,const bool complete=true) const;
00450 #     endif
00451 
00452       /**
00453        * return the "real" values in the camera (or values out of range
00454        * if the information is not available).
00455        */
00456       const bankType& getCameraValues() const;
00457 
00458       // ------------- The Parameters ---------------
00459 
00460       /**
00461        * gamma correction (valid values between 0.0 and 1.0)
00462        * Only two values are understand by the Pulnix camera: 0.45f and 1.0f.
00463        * The given value will be rounded to one of these two valid values.
00464        *
00465        * Default value: 0.45f
00466        */
00467       float gamma;
00468 
00469       /**
00470        * gain
00471        * valid values between 0 and 1.0
00472        *
00473        * Default value: 0.3569f
00474        */
00475       float gain;
00476 
00477       /**
00478        * Brightness.
00479        * These "brightness" value is achieved using the
00480        * "advanced DSP gain".  Valid values are from -1.0 to 1.0
00481        * Default value 0.0;
00482        */
00483       float brightness;
00484 
00485       /**
00486        * shutter speed.
00487        * Only used if the shutterMode is DirectM or DirectA.  The value
00488        * has no time units.  It just means a long exposure time (1.0)
00489        * or a very short exposure time (0.0).
00490        *
00491        * HARDWARE NOTES: The values 0.0 - 1.0 will be mapped to the
00492        * from hardware expected values 1024-525 respectively.  If
00493        * other hardware values are required you can give them directly
00494        * here.  I.e. values between 0.0 and 1.0 (inclusive) will be
00495        * mapped to the given hardware values.  Values greater or equal
00496        * 2.0 and less than 65536.0 will be directly sended to the
00497        * camera.  This behaviour is also applied for the values in the
00498        * shutter tables.
00499        *
00500        * Default value: 0.2557f */
00501       float shutterSpeed;
00502 
00503       /**
00504        * shutter mode.
00505        * Specifies which shutter mode should be used (@see eShutterMode)
00506        * Default: DirectM
00507        */
00508       ::lti::microEnablePulnix::parameters::eShutterMode shutterMode;
00509 
00510       /**
00511        * specify which entry of the manual or async shutter tables should
00512        * be used (for the Manual or Async shutter modes).
00513        * The value must be between 0 and 9.
00514        * Default: 0;
00515        */
00516       int shutterEntry;
00517 
00518       /**
00519        * color matrix.  This 3x3 matrix is used internally by the
00520        * Pulnix camera to transform the RGB values readed from the CCD
00521        * chip into another "color space".  The values of the elements
00522        * must be between -2.96875 and 3.96875.  An extra condition is
00523        * that the sum of the elements of one row should add to one.
00524        * Default value: identity matrix */
00525       fmatrix colorMatrix;
00526 
00527       /**
00528        * edgeEnhancement mode
00529        * Default value: off
00530        */
00531       ::lti::microEnablePulnix::parameters::eEdgeEnhancement
00532           edgeEnhancementMode;
00533 
00534       /**
00535        * level of edge enhancement.  It must be 1 or 2.
00536        * Default: Level 1
00537        */
00538       int edgeEnhancementLevel;
00539 
00540 
00541       /**
00542        * white balance
00543        *
00544        * Default value: Manual
00545        */
00546       ::lti::microEnablePulnix::parameters::eWhiteBalanceType whiteBalance;
00547 
00548       /**
00549        * Red gain.
00550        *
00551        * To see the effect of this gain factor you need to set the white
00552        * balance mode into "Manual".
00553        *
00554        * Valid values between  -1.0 and 1.0
00555        *
00556        * Default value: -0.1732
00557        */
00558       float redGain;
00559 
00560       /**
00561        * Blue gain
00562        *
00563        * Valid values between -1.0 and 1.0
00564        *
00565        * To see the effect of this gain factor you need to set the white
00566        * balance mode into "Manual".
00567        *
00568        * Default value: -0.2913
00569        */
00570       float blueGain;
00571 
00572       /**
00573        * offset for the analog to digital converter (ADC)
00574        * Valid values: 200-250
00575        * Default value: 233
00576        */
00577       int adcOffset;
00578 
00579       /**
00580        * reference top value for the analog to digital converter (ADC)
00581        * Valid values: 0-255
00582        * Default value: 225
00583        */
00584       int adcReferenceTop;
00585 
00586       /**
00587        * offset for each color channel.
00588        * The value for each color must be between -128..127
00589        */
00590       trgbPixel<int> rgbOffset;
00591 
00592       /**
00593        * The Manual Shutter Table contains 10 entries, which can be
00594        * used in the shutter Manual Mode giving an entry in
00595        * shutterEntry field of the respective bank.  Each entry of the
00596        * table contains a value between 0.0 and 1.0. The values have
00597        * no time units.  They just means a long exposure time (1.0) or
00598        * a very short exposure time (0.0).  This vector must have 10
00599        * elements
00600        */
00601       fvector manualShutterTable;
00602 
00603       /**
00604        * The Async Shutter Table contains 10 entries, which can be
00605        * used in the shutter Asynchronous Mode giving an entry in
00606        * shutterEntry field of the respective bank.  Each entry of the
00607        * table contains a value between 0.0 and 1.0. The values have
00608        * no time units.  They just means a long exposure time (1.0) or
00609        * a very short exposure time (0.0).  This vector must have 10
00610        * elements
00611        */
00612       fvector asyncShutterTable;
00613 
00614     protected:
00615       /**
00616        * serial parameters.
00617        *
00618        * The Pulnix Camera expects 9600baud, no parity, 1 stop bit and
00619        * 8 bits per char.
00620        */
00621       mutable serial::parameters serialParameters;
00622 
00623       /**
00624        * protected initializer to create an "uninitialized" bank object
00625        */
00626       void uninitialize();
00627 
00628       /**
00629        * the bank number in the camera, which is represented by this bank
00630        * Valid numbers from 0 to 3
00631        */
00632       int bankNumber;
00633 
00634       /**
00635        * this bank contains the values written in the camera, or out-of-range
00636        * values if they are not read/written yet.
00637        */
00638       mutable bankType* cameraValues;
00639 
00640       /**
00641        * LUT for bit reversion
00642        */
00643       static const int* bitReversionLUT;
00644 
00645       /**
00646        * initialize LUT for bit reversion
00647        */
00648       void initBitReversionLUT();
00649 
00650       /**
00651        * revert bits
00652        */
00653       const int& revert(const ubyte& b) const;
00654 
00655     private:
00656       static bankType* allCameraValues;
00657     };
00658 
00659     /**
00660      * default constructor
00661      */
00662     microEnablePulnix(const bool& initialize=true);
00663 
00664     /**
00665      * copy constructor
00666      */
00667     microEnablePulnix(const microEnablePulnix& other);
00668 
00669     /**
00670      * constructor, sets the parameters
00671      */
00672     microEnablePulnix(const parameters& theParam);
00673 
00674     /**
00675      * destructor
00676      */
00677     virtual ~microEnablePulnix( void );
00678 
00679     /**
00680      * returns current parameters.
00681      */
00682     const parameters& getParameters() const;
00683 
00684     /**
00685      * returns the name of this type
00686      */
00687     virtual const char* getTypeName() const;
00688 
00689     /**
00690      * load an (color) image from the grabber
00691      */
00692     virtual bool apply(image& theImage);
00693 
00694     /**
00695      * load a grey value channel from the
00696      */
00697     virtual bool apply(channel8& theChannel);
00698 
00699     /**
00700      * copy member
00701      */
00702     microEnablePulnix& copy(const microEnablePulnix& other);
00703 
00704     /**
00705      * clone member
00706      */
00707     functor* clone() const;
00708 
00709     /**
00710      * check if the frame grabber is active
00711      */
00712     bool isActive() const;
00713 
00714     /**
00715      * initialize frame grabber
00716      */
00717     bool init();
00718 
00719     /**
00720      * set functor's parameters.  This will set the frame grabber parameters
00721      * and will send the wished configuration to the camera.
00722      *
00723      * You can also load the actual parameter sets in the camera with
00724      * the method of the parameters "download".
00725      *
00726      * @return true if successful, false otherwise.
00727      */
00728     virtual bool setParameters(const functor::parameters& theParam);
00729 
00730   protected:
00731     /**
00732      * Return the error message reported by the microEnable hardware.
00733      */
00734     std::string getErrorMessage();
00735 
00736     /**
00737      * the initialized frame grabber object
00738      */
00739     static Fg_Info* fg;
00740 
00741     /**
00742      * memory block reserved for frame-grabber communication
00743      */
00744     static ubyte* frameBuffer;
00745 
00746     /**
00747      * contains the initialization status
00748      */
00749     static bool active;
00750 
00751     /**
00752      * number of existen instances of the grabber
00753      */
00754     static int instances;
00755 
00756     /**
00757      * allocate the buffer memory
00758      */
00759     bool allocMemory();
00760 
00761     /**
00762      * deallocate the buffer memory
00763      */
00764     bool freeMemory();
00765 
00766     /**
00767      * free the frame graber resource
00768      */
00769     bool freeGrabber();
00770 
00771     /**
00772      * activate hardware parameters
00773      */
00774     bool activateParameters();
00775 
00776     /**
00777      * get an image from the frame grabber
00778      */
00779     bool grab(image& theImage);
00780 
00781     /**
00782      * get a channel8 from the frame grabber
00783      */
00784     bool grab(channel8& theChannel);
00785 
00786     /**
00787      * convert the frame buffer into an image.
00788      * theImage MUST have the correct size when this function is called!
00789      */
00790     static void bufferToImage(image& theImage, const bool turnaround);
00791 
00792     /**
00793      * convert the frame buffer into a channel8
00794      * theChannel MUST have the correct size when this function is called!
00795      */
00796     static void bufferToChannel(channel8& theChannel, const bool turnaround);
00797 
00798     /**
00799      * the last grabbed image.
00800      */
00801     static image* lastImage;
00802 
00803   };
00804 }
00805 
00806 #endif // _USE_MICRO_ENABLE_FRAME_GRABBER
00807 #endif // #ifdef _LTI_MICRO_ENABLE_H_

Generated on Sat Apr 10 15:25:51 2010 for LTI-Lib by Doxygen 1.6.1