READ ME: README.TXT

-------------------------------------------------------------------------------------------------------------
                  Matrox Imaging Library (8.0) Readme.txt Readme File
                               April 11, 2005
    Copyright© 2005 by Matrox Electronic Systems Ltd. All rights reserved.
-------------------------------------------------------------------------------------------------------------

This document explains MIL's directory structure, and contains some important information that might be
useful to know before using the software. This file also lists and briefly describes other text files that
are included on the CD. Note that these text files are intended to complement your manual and on-line help.
The information found in this file takes precedence over formally documented material.

Contents

1. What is on the MIL 8.0 CD?
2. Notes about the MIL 8.0 installation.
3. Note about installing under Windows XP and 2000.
4. Listing and brief description of the Readme files.
5. Licensing.

1. What is on the MIL 8.0 CD?

   Directory:
               Matrox Imaging\ActiveMil        : ActiveMIL files.
               Matrox Imaging\Drivers          : Board drivers.
               Matrox Imaging\Images           : Image files for examples.
               Matrox Imaging\Intellicam       : Matrox Intellicam files.
               Matrox Imaging\Mil              : The Matrox Imaging Library files.
               Matrox Imaging\Tools            : Tools including MilConfig, the license manager and the vision utilities.
               Matrox Imaging\Drivers\MGADRV   : MGA driver for Windows 2000 and XP.
               Odyssey                         : The Matrox Odyssey Native Library files.
               Genesis                         : The Matrox Genesis Native Library files.

2. Notes about the MIL 8.0 installation.

   - The MIL 8.0 installation program can directly upgrade versions of MIL 6.0
     or higher excluding all ES (Engineering sample) versions.
   - If you plan to install Matrox Genesis, Matrox Meteor-II/Digital, or Matrox Meteor-II/Camera Link
     board driver(s) during installation, MIL 8.0 cannot be installed on top of an existing
     MIL installation. In such cases, to install the new version, you should first uninstall the
     currently installed version of MIL. This problem is due to a Matrox Genesis Native Library limitation.
     Please note that this is the last MIL release to support the Matrox Genesis family.
   - Note that if MIL is installed using an integral hard drive duplication method, the target system
     must be completely identical (PC model and BIOS, memory size, hard drive size, slot
     position for the boards, ...) or MIL might not work properly.

3. Note about installing under Windows XP and 2000.

   - An IEEE 1394 camera must be connected to the Matrox Meteor-II/1394 board
     when installing for this board under Windows XP or Windows 2000. Failure to
     do so will result in the drivers for 1394 NOT being installed.
     Furthermore, an IEEE 1394 camera must be connected to the Matrox
     Meteor-II/1394 before running any application, including Matrox Intellicam,
     which uses the Matrox Meteor-II/1394.

     Initialization of some 1394 cameras may take several seconds.

4. Listing and brief description of the Readme files.

     MATROX IMAGING\MIL\DOC\READ.ME                                    : Info on how to start using MIL.
     MATROX IMAGING\MIL\DOC\WHATSNEW.TXT                               : What's new in MIL.
     MATROX IMAGING\MIL\DOC\LASTMINUTE.TXT                             : Last minute, general information that is not
                                                                         included in the documentation.
     MATROX IMAGING\DRIVERS\CORONA_II\MILCOR_II.TXT (Matrox Corona-II),: Last minute, board-specific information that
     MATROX IMAGING\DRIVERS\GENESIS\MILGEN.TXT (Matrox Genesis),         is not included in the documentation.
     MATROX IMAGING\DRIVERS\METEOR_II\MILMET2.TXT (Matrox Meteor-II),
     MATROX IMAGING\DRIVERS\ORION\MILORION.TXT (Matrox Orion),
     MATROX IMAGING\DRIVERS\CRONOSPLUS\MILCRONOSPLUS.TXT (Matrox CronosPlus),
     MATROX IMAGING\DRIVERS\HELIOS\MILHELIOS.TXT (Matrox Helios),
     MATROX IMAGING\DRIVERS\ODYSSEY\MILODYSSEY.TXT (Matrox Odyssey),
     MATROX IMAGING\DRIVERS\MORPHIS\MILMORPHIS.TXT (Matrox Morphis)

     MATROX IMAGING\MIL\DOC\MMX.TXT                                    : MIL functions that are MMX optimized.
     MATROX IMAGING\MIL\DOC\SSE.TXT                                    : MIL functions that are SSE optimized.
     MATROX IMAGING\MIL\DOC\SSE2.TXT                                   : MIL functions that are SSE2 optimized.
     MATROX IMAGING\MIL\DOC\HELIOSPA.TXT                               : MIL functions that are supported on the
                                                                         Matrox Helios Pixel-Accelerator (PA).
     MATROX IMAGING\MIL\DOC\ODYSSEYPA.TXT                              : MIL functions that are supported on the
                                                                         Matrox Odyssey Pixel-Accelerator (PA).
     Matrox Imaging\mil\examples\mdispmfc\MDispmfcReadMe.txt           : A summary of the files that make up the
                                     MdispMFC application, which demonstrates
                                                                         the basics of using MIL with Microsoft
                                                                         Foundation classes.

5. Licensing

     An IEEE 1394 camera must be connected to the Matrox Meteor-II/1394 when this
     board is used as a System Fingerprint for a software license-key under
     Windows XP or Windows 2000. Failure to do so will result in the software
     license not being recognized.


READ ME: LastMinute.txt

-------------------------------------------------------------------------------
            Matrox Imaging Library (8.0) LastMinute.txt Readme File
                               April 7, 2005
    Copyright© 2005 by Matrox Electronic Systems Ltd. All rights reserved.
-------------------------------------------------------------------------------

This file presents last minute information that did not make it into the
manuals or on-line help, except for last minute board-specific information.
For board-specific information, see the Readme file specific for your driver.
The information found in this file overrides your formally documented material.

Contents

 1. New MIL macro and MIL data types.

 2. Mbuf...() correction.

 3. Mdig...() correction

 4. Mdisp...() correction.

 5. Medge...() addition.

 6. Mim...() addition.

 7. Mcode...() addition.

 8. Mstr...() constants that are only available if MIL 8.0 with Processing Pack 1
    is installed.

 9. Mthr...() correction.

10. User Guide notice.

11. Matrox Odyssey notice.

1. New MIL macro and MIL data types.

   - For portability, when passing a string directly or setting it under a
     predefined constant, you must use the MIL_TEXT macro to cast the string
     to the appropriate type.

2. Mbuf...() correction.

   - MbufControl():
     - Under the ControlTypes M_MIN and M_MAX: Pixel values larger than the
       max value or smaller than the min value will have an undetermined effect
       on display.  Upon display, pixel values between M_MIN and M_MAX are
       remapped linearly to values between the minimum and maximum display
       values possible.

3. Mdig...() correction.

   - MdigControl():
     - Under the ControlTypes M_GRAB_SCALE, M_GRAB_SCALE_X, and M_GRAB_SCALE_Y:
       Arbitrary scaling (n) is supported on Matrox CronosPlus, Matrox Orion
       and Matrox Meteor-II/Standard. This is not reflected in the documentation.
       If the scale entered is not supported - the best match possible is used
       instead. If, however, the scale entered is larger than the maximum value
       supported, an error is returned.

   - MdigProcess():
     - When using MdigProcess() to grab and process a sequence of images
       asynchronously, you must make an additional call to MdigProcess()
       using M_STOP free internally allocated resources.
       This is a known limitation. Note that, if you wish to have
       MdigProcess() wait until all previously queued grabs to finish
       before returning control to the host, use M_STOP+M_WAIT.

4. Mdisp...() correction.

   - MdispControl():
     -	When displaying a 32-bit buffer, to specify M_AUTO_SCALE as the view
         mode (M_VIEW_MODE) of the display, you must have a valid license for
         the Mim functions.

   - MdispHookFunction():
     - The function's prototype is correct. It is still the same as it was
       in MIL 6.0. That is:
       MDISPHOOKFCTPTR MdispHookFunction(DisplayId, HookType, HookHandlerPtr,
                                          UserDataPtr)

     - You are still responsible for tracking the address of the hooked
       function and chaining it if required.

   - MdispInquire():
     - The definition for the InquireTypes M_SIZE_X and M_SIZE_Y are incorrect.
       M_SIZE_X:	Returns the display's width. For windowed displays,
            the returned value is equal to the width of the
            client area of the window. For auxiliary displays,
            the returned width is that specified in the VCF file.
       M_SIZE_Y:	Returns the display's height. For windowed displays,
            the returned value is equal to the height of the
            client area of the window. For auxiliary displays,
            the returned height is that specified in the VCF file.

   - MdispSelectWindow():
     - To use this MIL function, the windows.h files must be included, and it
       must be included before the mil.h file.

5. MedgeControl() M_EXTRACTION_SCALE addition.

   - The ModelFinder control cannot define models from or find model occurrences in
     the results of an edge extraction if the results were obtained using an
     extraction scale other than 1 (default = 1). Note that the extraction scale is
     set using M_EXTRACTION_SCALE in MedgeControl().

6. Mim...() addition.

   - MimMorphic() M_AREA_OPEN and M_AREA_CLOSE operations:
     - The M_AREA_OPEN operation modifies each destination pixel to take the
       maximum possible intensity value such that the associated source pixel is
       part of a connected group of pixels that are at least of this intensity
       value in the source and such that the connected group has an area greater
       or equal to the area threshold.

     - The M_AREA_CLOSE operation modifies each destination pixel to take the
       minimum possible intensity value such that the associated source pixel is
       part of a connected group of pixels that are at most of this intensity
       value in the source and such that the connected group has an area greater
       or equal to the area threshold.

     - The connectivity of the M_AREA_OPEN and M_AREA_CLOSE is defined by the
       structuring element: the center pixel is considered connected with the
       non-zero elements of the structuring element. There are only two structuring
       elements you can use with these two operations: M_3X3_RECT and M_3X3_CROSS.
       You cannot use these predefined structuring elements with the other
       morphological transformations.

     - The area threshold of M_AREA_OPEN and M_AREA_CLOSE is set, in pixels, using
       the NbIteration parameter.

   - MimStat(), MimGetResult(), and MimGetResult1d() M_SUM_SQUARED
     - The value M_SUM_SQUARED is now M_SUM_OF_SQUARES.

   - MimRank() M_5X5_RECT
     - Without Processing Pack 1, this value is not yet supported.

7. Mcode...() addition

   - McodeInquire() M_TIMOEOUT is missing from the current documentation.
     Returns the maximum decoding time for a read operation. The default is
     2000 msec.

8. Mstr...() constants that are only available if MIL 8.0 with Processing Pack 1
   is installed.

   - MstrControl():
     - M_SEARCH_SKEW_ANGLE.
     - M_SEARCH_CHAR_ANGLE.
     - M_FOREGROUND_VALUE set to M_FOREGROUND_BLACK_OR_WHITE.
     - M_STRING_NUMBER set to M_ALL.
     - M_STRING_NUMBER set to any value greater than or equal to 1, for M_CONTEXT.
       Without Processing Pack 1, the only valid value is 1.
     - M_STRING_NUMBER set to any value greater than or equal to 0, for
       M_STRING_INDEX(). Without Processing Pack 1, the only valid values are 0
       and 1.

   - MstrInquire():
     - M_SEARCH_SKEW_ANGLE.
     - M_SEARCH_CHAR_ANGLE.
     - M_SPACE_WIDTH_VALUE.

   - MstrGetResult():
     - M_SKEW_ANGLE.
     - M_CHAR_ANGLE.

9. Mthr...() correction.

   - MthrWait()
     - The M_THREAD_TIMEOUT(n) and M_EVENT_TIMEOUT(n) combination constants can
       only be used if the specified thread or specified event are allocated on
       the Host or an Odyssey board (XA, XCL, XPro, or XPro+).

10. User Guide notice.

   - The String Reader chapter is preliminary.

11. Matrox Odyssey notice.

   - Multiple processing is not supported on Matrox Odyssey with this release.
     Documentation stating otherwise within the online help is in error. See
     the MilOdyssey.txt file for more details.


READ ME: READ.ME

-------------------------------------------------------------------
                         Matrox Imaging Library
-------------------------------------------------------------------

The Matrox Imaging Library (MIL) is a high- level 'C' library with an extensive
set of optimized functions for image processing (point-to-point, statistics,
filtering, morphology and geometric transforms), pattern matching, blob
analysis, gauging, OCR, bar and matrix code recognition, and calibration.
OEMs and integrators use MIL to accelerate the development of machine vision,
medical imaging, and image analysis applications.

Device-independent Matrox Imaging Library (MIL) uses the power of today's Intel
CPUs incorporating MMX technology if present or, if your application requires
dedicated or additional processing power, MIL works with the Matrox Genesis
family of image processors.

To start with MIL:

- Try your target Matrox board:

  Use the INTELLICAM interactive program to grab and experiment with your board
  before compiling the MIL examples.

- Compile and run the MIL examples:

  If you are using VISUAL C++, you can use the Matrox Imaging Library
  examples group and click on the read.me, Compile examples and Run
  examples icons. You can also go in the \MIL\EXAMPLES directory. This
  directory contains everything you need to compile and run the examples.
  Look in this directory and study the examples to get started quickly
  with MIL.

  If you are using VISUAL C++ and MFC, check the MdispMFC project in the
  \MIL\EXAMPLES\MFC directory for a quick start with MFC and MIL.

- Check the MIL documentation:

  For more information on MIL see the MIL manuals (paper or on-line) and
  the MIL on-line help. Note that the MIL on-line help can also be used
  directly inside Visual C++ for context sensitive help on the MIL commands
  (by pressing Ctrl-F1).

- Context-sensitive help under Microsoft Visual C/C++:

  In order to get MIL context-sensitive help using (CTRL-F1) key inside
  Microsoft Visual C/C++, you need to activate the MIL VC++ Add-In.
  This Add-In is automatically installed with the Matrox Imaging Library
  but is not enabled by default. To enable the Matrox MIL VC++ Add-In
  in Visual C/C++, go in the 'Tools\Customize\Add-ins and Macro files' menu.
  When MIL context sensitive help is enabled, simply place your cursor on
  any MIL command in your code and press <CTRL-F1> to get on-line help on
  that command.


READ ME: WHATSNEW.TXT

--------------------------------------------------------------------------------
              Matrox Imaging Library (8.0) Whatsnew.txt Readme File
                                April 06, 2005
     Copyright (c) 2005 by Matrox Electronic Systems Ltd. All rights reserved.
--------------------------------------------------------------------------------

This document is divided in three sections. The first section details the differences
between MIL 8.0 and MIL 7.5. The second section details the differences
between MIL 7.5 and MIL 7.1. The third section details the differences
between MIL 7.1 and MIL 7.0.

--------------------------------------------------------------------------------
Section 1: Differences between MIL 8.0 and 7.5

Table of Contents for Section 1

1. Overview.
2. Support for new Matrox hardware.
3. Operating system information.
4. Board-specific details.
5. New processing functionality.
6. API changes.
7. Commands common to both MIL and MIL-Lite.
   7.1 Control/Inquire types added.
   7.2 Control/Inquire types moved.
   7.3 Control/Inquire constant name changes.
   7.4 Obsolete Control/Inquire types.
   7.5 Others modifications.
8. Directory structure.
9. MilConfig and the Control Center.

1. Overview.

   -MIL 8.0 uses a new installation program, includes new display code
    and new processing functions.

   -This release contains a partial listing of our DCFs.
    For a complete and up-to-date listing, please check our website
    (http://www.matrox.com/imaging).

2. Support for new Matrox hardware.

   - Support for Matrox Helios family has been added. This includes:
     - Matrox Helios XA
     - Matrox Helios XCL dual-Base
     - Matrox Helios XCL single-Full

   - Support for Matrox Iris family has been added. This includes:
     - Matrox Iris P300
     - Matrox Iris P700
     - Matrox Iris P1200

   - Support for Matrox Morphis family has been added. This includes:
     - Matrox Morphis Dual (PCI and PC/104-Plus)
     - Matrox Morphis Quad

   - Support for Matrox Odyssey family has been added. This includes:
     - Matrox Odyssey Xpro
     - Matrox Odyssey Xpro+
     - Matrox Odyssey XA
     - Matrox Odyssey XCL dual-Base
     - Matrox Odyssey XCL single-Full
     - Matrox Odyssey XD

   - Support for Matrox Solios family has been added. This includes:
     - Matrox Solios XA (single and quad)
     - Matrox Solios XCL dual-Base
     - Matrox Solios XCL single-Full

   - This is the last release to support the Matrox Genesis family.

3. Operating system information.

   - MIL 8.0 supports Windows 2000 and XP (Windows 98, ME and NT 4.0 are
     no longer supported).

4. Board-specific details.

   - MdigProcess() is now available on all boards.

5. New processing functionality.

   - Pattern Matching (NGC-based)
     + Speed increase for multiple models and rotation mode search (regular
       and circular overscan)
     + MpatFindOrientation() and M_ORIENTATION models are no longer supported.
       Note that searching with angle (with or without M_CIRCULAR_OVERSCAN) is
       still fully supported.
     + Added two new inquires M_PROC_FIRST_LEVEL and M_PROC_LAST_LEVEL, which
       return the resolution levels for the first and last stages of the search.

   - Geometric Model Finder
     + Support for subpixel drawing with MmodDraw() using subpixel.
     + Support for filtering with recursive kernel (actual method) or with
       conventional convolution kernel (useful for platform with hardware
       accelerator).
     + New control to enable or disable position-range search (using
       M_SEARCH_POSITION_RANGE set to M_ENABLE or M_DISABLE).
       This control is useful, for example, to register a model from a seeded
       position (also disabling the search scale and angular ranges).
     + The search region (M_SEARCH_OFFSET_X, M_SEARCH_OFFSET_Y, M_SEARCH_SIZE_X
       and M_SEARCH_SIZE_Y) is replaced by a position range with nominal
       position and deltas (M_POSITION_X, M_POSITION_Y, M_POSITION_DELTA_NEG_X,
       M_POSITION_DELTA_NEG_Y, M_POSITION_DELTA_POS_X, M_POSITION_DELTA_POS_Y).
       The search region is still supported for compatibility but is no longer
       documented.
     + Timeout status can be checked using MmodGetResult() with M_TIMEOUT_END.
     + Support for a new mask type (Weighted Regions).
       Weighted Regions are used to apply specific weights to a model's edges.
       Weights can be negative. Weighted regions can be drawn like the other
       masks.
     + Support for two new types of synthetic models (Triangle and Diamond).
     + Support in MmodDefine() for a M_MOD_RESULT model type.
       This allows the user to define new model(s) from a previous match
       occurrence(s).
     + Support in MmodDefine() for M_MERGE_MODEL model type.
       This allows the user to define a new model by merging to previously
       existing models.
     + Added MmodInquire() M_ALLOC_SIZE_BAND, M_ALLOC_TYPE, M_ALLOC_SIGN and
       M_ALLOC_SIZE_BIT to enable clone model image allocation.
     + Context M_GEOMETRIC_CONTROL now supports synthetic models.
     + M_CHAIN_ANGLE can now be inquired or obtained as result.
     + Added MmodStream(), which allows you to save, restore, and load both
       to and from file and memory.

   - Code Reader
     + Added support for the RSS code family (RSS-14, RSS-14 Truncated, RSS-14
       Stacked, RSS-14 Staked Omnidirectionnal, RSS Limited, RSS Expanded, and
       RSS Expanded Stacked).
     + Added support for EAN. UCC composite code types.
     + Added support for Ean8 code type.
     + Added support for MicroPDF417 code type.
     + Official support of Pharmacode code type.
     + Added support for barcode print quality estimation (McodeVerify).
     + Added timeout allowing the user to set a maximum read time.
     + Added McodeStream(), which allows you to save, restore, and load both to
       and from file and memory.

   - OCR
     + General speed improvement.
     + Improvements to reading/verifying at an angle and support for full range
       angular search (0 to 360 degrees).
     + OCR GUI: Improved font definition/interactivity.

   - Calibration
     + McalAlloc() and McalRestore() prototypes have changed to accept a
       SystemId.
     + Added McalStream(), which allows you to save, restore, and load both to
       and from file and memory.

   - Measurement
     + Support for variable filter size.
     + Added MmeasStream(), which allows you to save, restore, and load both to
       and from file and memory.

   - Edge Finder
     + General speed improvement.
     + Added MedgeGetNeighbors(), which allows the user to get the nearest
       edgels from an input list of points, under various constraints.
     + Added MedgePut(), which allows user to record user defined edge
       chains into an edge result buffer.
     + MedgeGetResult() now supports retrieval of statistics by allowing the
       user to combine the attribute name with one of the following flags:
       M_MIN, M_MAX, M_MIN_ABS, M_MAX_ABS, M_MEAN, or M_STANDARD_DEVIATION.
     + Added the result of M_VERTICES_INDEX. This returns, for each vertex,
       the index of the corresponding edgel in the edge.
     + Support for advanced filtering modes. The user can control the filtering
       mode (RECURSIVE or KERNEL), the size of the filtering kernel, and the
       depth and the maximum power loss of the kernel.
     + MedgeDraw(): Added the M_DRAW_VALUES combination constant which can be
       added to feature values (like Ferets) to draw the operation's numerical
       value.
     + Defining from an edge result buffer ROI and masking edge result buffer
       based models in Model Finder is fully supported.
     + Added MedgeSelect() M_INSIDE_OR_EQUAL and M_OUTSIDE_OR_EQUAL.
     + MedgeCalculate() now changes threshold values for a post-calculation will
       refine the edge results.
     + Internal compensation now allows MedgeCalculate() to support all source
       image buffer formats.
     + MedgeMask() now supports edge masking in post-calculation. Masked edges
       are excluded from the result buffer and subsequent calculations and
       partially masked edges are cropped.
     + MedgeControl() with M_FILL_GAP_DISTANCE supports M_INFINITE.
     + Added M_SHEN and M_DERICHE filters.
     + Timeout is supported and is controlled using the M_TIMEOUT control.
       The Timeout status can be checked using MedgeGetResult() with M_TIMEOUT_END.
     + MedgeGetResult() properties of the internal buffers, the ids of which are
       returned, can now also be inquired by combining the specified ResultType
       with the appropriate combination constant (for example,
       M_MAGNITUDE_ID+M_SIZE_BAND).
     + New line fit (M_LINE_FIT), circle fit (M_CIRCLE_FIT) and ellipse fit
       (M_ELLIPSE_FIT) edge features.
     + Added MedgeStream(), which allows you to save, restore, and load both to
       and from file and memory.

   - New String Reader module
     + Performs OCR using a feature-based technology.
     + Handles extreme contrast variations (e.g. daylight to nighttime).
     + Added robustness to horizontal and vertical scaling.
     + Tolerates some rotation (+/- 10 degrees).
     + Automatically locates text strings (i.e. no ROI necessary).
     + Supports definition of multiple fonts in a single context.
     + Includes a powerful tool for easy user-defined font definition.
     + Supports direct font definition from TrueType(TM) and PostScript(TM) fonts.
     + Supports multiple user-defined grammar rules.
     + Includes String Reader interactive utility for context definition and
       experimentation.

   - Watershed
     + Uses a new accelerated method.
     + New support for labeled marker. With labeled markers, 2 different markers can
       be touching and/or a single marker can be split in many region.
     + New support for source buffer basin local minima filling.

   - MbufCopy() and MbufClear()
     + Accelerated using SSE2.

   - MimBinarize()
     + Support autothreshold for all buffer types.
       (add support for 1 bit, 32 bit and float buffers)
     + MimBinarize() only returns the calculated autothreshold value when
       ConditionLow is set to M_DEFAULT and when destination buffer
       is set to M_NULL. If the destination buffer is not set to M_NULL,
       ConditionLow is always returned (even if its M_DEFAULT). This is to avoid
       systematic synchronization of the function.
     + Accelerated using SSE2.

   - MimConvolve()
     + Support for recursive Infinite Impulse Response (IIR) filtering as
       predefined kernel.
       M_SHEN_FILTER(FilterOperation, FilterSmoothness) and
       M_DERICHE_FILTER(FilterOperation, FilterSmoothness).
       Operation supported are: M_SMOOTH, M_HORIZ_EDGE, M_VERT_EDGE,
                                M_EDGE_DETECT, M_EDGE_DETECT_SQR,
                                M_LAPLACIAN_EDGE, M_SHARPEN,
                                M_FIRST_DERIVATIVE_X, M_FIRST_DERIVATIVE_Y,
                                M_SECOND_DERIVATIVE_X, M_SECOND_DERIVATIVE_Y,
                                M_SECOND_DERIVATIVE_XY
     + Support for general kernel using IIR filtering or equivalent kernel
       filtering (see MbufControlNeighborhood() for more details).
     + Accelerated using SSE2.

   - MbufControlNeighborhood()
     + Support for filter mode M_KERNEL or M_RECURSIVE.
     + Support for filter types (M_USER_DEFINED, M_SHEN or M_DERICHE),
       smoothness (0.0 - 100.0), and operation (see MimConvolve section).

   - MbufBayer()
     + New adaptive algorithm with M_ADAPTIVE and, optionally, M_COLOR_CORRECTION.

   - Added MimStats().

   - Batch the result retrieval in all high level modules and in MimGetResult()
        by using NULL instead of a pointer to only queue MxxxGetResults()
        in one final call (for acceleration).

   - MbufImport()
     + Added support for the JP2 file format.

   - MbufExport()
     + Added support for the JP2 file format.

   - MimConvert()
     + Buffers passed to this function no longer require the M_PROC attribute.
     + Accelerated case where source format is M_BGR32+M_PACKED (with or
       without M_FLIP), destination format is M_MONO8, conversion type is
       M_RGB_TO_Y using MMX.
     + Accelerated case where source format is M_BGR24+M_PACKED (with or
       without M_FLIP), destination format is M_MONO8, conversion type is
       M_RGB_TO_Y. This conversion is now done without any temporary
       allocations/copies.

   - MimArith(), MimClip(), and MimShift()
     + Accelerated using SSE2.

   - MimMorphic()
     + New functionality M_AREA_OPEN and M_AREA_CLOSE.

   - MimDilate(), MimErode()
     + Accelerated for cases with multiple iterations.

   - MimEdgeDetect()
     + Accelerated angle computation.

   - MimPolarTransform()
     + Accelerated.

   - MimRank() with M_3X3_RECT
     + Accelerated.

   - MimThin() and MimThick()
     + Accelerated using SSE.

   - MimWarp()
     + Accelerated using SSE.

6. API Changes

   Some function prototypes in MIL 8.0 were changed from MIL 7.5. These changes
   will require your programs to be re-compiled and linked with the new
   version. Most of them should not require you to modify your code.

  -MsysAlloc()     : The first parameter is now a MIL_TXT_PTR instead of a
                     void*. If you pass one of the M_SYSTEM_ defines directly
                     to the MIL function, this change will be transparent.

  -MbufAlloc...()  : The Attribute parameter of the MbufAlloc...() functions is
                     now a MIL_INT64 instead of a long. The MIL_INT64 type is a
                     64-bit integer. Note that the MbufInquire M_ATTRIBUTE and
                     M_FORMAT still expect a long* and will only return the 32
                     least-significant bits of the full 64-bit
                     attribute/format.

                     To get the full attribute/format use MbufInquire with
                     M_EXTENDED_ATTRIBUTE and M_EXTENDED_FORMAT, which expect a
                     MIL_INT64*. This change should be transparent as you can
                     still use a variable of type long if you only use attributes
                     that were already present in MIL 7.5.

                     For example,
                     long Attr = M_IMAGE+M_DISP+M_GRAB;
                                          // compiles without warnings

  -MdigReference() : The last parameter was changed from a long to a double.
                     This change should not require any modification to your
                     code unless you want to use non-integer reference levels.
                     Some hardware restrictions may apply.

  -MdispPan()      : The 2 long parameters are now doubles. This change should
                     not require any modification to your code unless you want
                     to use non-integer pan offset. Some
                     hardware restrictions may apply.

  -MdispZoom()     : The 2 long parameters are now doubles. This change should
                     not require any modification to your code unless you want
                     to use non-integer zoom factor.
                     Some hardware restrictions may apply.

  -McalAlloc() and : A SystemId parameter was added to specify on which system
   McalRestore()     to allocate/restore the calibration.
                     This change will require a modification to your code.

  -MpatInquire(), McodeInquire(), MocrInquire(), and MgraInquire()
                   : These functions are no longer void functions but now
                     return a long. This change will be transparent.

  -MpatFindOrientation() and M_ORIENTATION models
                   : MpatFindOrientation() and M_ORIENTATION models are
                     no longer supported.

  -MdispOverlayKey()
                   : MdispOverlayKey() has been removed from the documentation.
                     This function is still available in MIL 8.0 for
                     backward compatibility,but you should use MdispControl()
                     instead to control the overlay keying for a specific
                     display.

7. Commands common to both MIL and MIL-Lite.

   7.1 Control/Inquire types added

   - MdispInquire(..., M_DISPLAY_TYPE, ...)  has been added.
     This inquire returns the display type. Values, other than the ones
     mentioned below, might be added for auxiliary displays. These values
     are for internal use, and you should ignore them. Return values:
       M_AUXILIARY                      Display is auxiliary.
       M_WINDOWED + M_MIL_USER_WINDOW   Display is a user-defined windowed
                                        display, selected using the
                                        MdispSelectWindow() function.
       M_WINDOWED + M_MIL_WINDOW        Display is a windowed MIL display,
                                        selected using the
                                        MdispSelect() function.
       M_WINDOWED                       Display is windowed.
       Note: This inquire replace the old M_DISPLAY_MODE inquire.

   - MdispControl/Inquire(..., M_NO_TEARING, ...) has been added.
     This control sets whether the no-tearing mode is enabled for the selected
     display. This mode requires special hardware. If this control type is
     used and is not supported by your hardware, no error will be produced
     and MIL will compensate with a tearing mode. Note: This new display control
     allows you to grab without tearing to the display, replacing the old
     MsysControl(..., M_LIVE_GRAB_NO_TEARING, ...).

   - MdispControl/Inquire(..., M_FILL_DISPLAY, ...) has been added.
     This control sets whether a selected buffer will be zoomed using a factor
     necessary to fill the display.

   - MdispControl(..., M_OVERLAY_CLEAR, ...)  has been added.
     This control sets the value that the overlay buffer associated with the
     display should be cleared to.

   - MbufInquire(..., M_DIB_HANDLE, ...)  has been added.
     Returns the DIB handle (HBITMAP) of the DIB associated with the MIL
     buffer (if any) or M_NULL. If you want to ensure to have a DIB handle,
     you should allocate the buffer with the following attributes: M_DIB+M_GDI.

   - MdispControl/Inquire(..., M_TRANSPARENT_COLOR, ...) has been added.
     This control sets the transparent (keying) color. To compare overlay
     pixels to the keying color, enable the mask bits in the required range
     and specify an appropriate M_TRANSPARENT_COLOR value.
     Note: This new display control replaces the old MIL MdispOverlayKey()
     function.

   - MdispControl/Inquire(..., M_INTERPOLATION_MODE, ...) has been added.
     This control sets the type of interpolation used to display the selected
     to the display.
     The Control value can be:
       M_DEFAULT             : The default interpolation use is M_FAST.
       M_FAST                : Specifies to use the fasted interpolation mode
                          available to update the display.
       M_NEAREST_NEIGHBOR    : Specifies the nearest neighbor interpolation.

   - MdispControl/Inquire(..., M_CENTER_DISPLAY, ...) has been added.
     This control sets if the image will be in the center of the window, in
     both x and y. (especially useful for user-defined windows).
     ControlValue can be set to:
       M_ENABLE  (Default for MIL windows)
       M_DISABLE (Default for user-defined windows)

   7.2 Control/Inquire types moved

   - MsysControl/Inquire(..., M_LAST_GRAB_IN_TRUE_BUFFER, ...) is now a
        MdigControl(). Using MdigControl() instead of MsysControl() allows
        you to control this behavior for each allocated digitizer.

   - MsysControl/Inquire(..., M_LIVE_GRAB_END_TRIGGER, ...) is now a
     MdigControl(). Using MdigControl() instead of MsysControl() allows
     you to control this behavior for each allocated digitizer.

   - MsysControl/Inquire(..., M_LIVE_GRAB_NO_TEARING, ...) has been
     replaced by the new display control MdispControl(..., M_NO_TEARING, ...).

   7.3 Control/Inquire constant name changes

   - The following buffer control/inquire constant name has changed:
       M_WINDOW_DIB_HEADER     is now known as M_BITMAPINFO.

   - The following display control/inquire constant names have changed:
       M_KEY_COLOR             is now known as M_TRANSPARENT_COLOR
       M_WINDOW_OVR_WRITE      is now known as M_OVERLAY
       M_WINDOW_OVR_BUF_ID     is now known as M_OVERLAY_ID
       M_WINDOW_OVR_SHOW       is now known as M_OVERLAY_SHOW
       M_WINDOW_OVR_LUT        is now known as M_OVERLAY_LUT
       M_WINDOW_DDRAW_SURFACE  is now known as M_DDRAW_SURFACE
       M_VGA_PIXEL_FORMAT      is now known as M_PIXEL_FORMAT

   - The following buffer control/inquire constant names have changed:
       M_WINDOW_DC_ALLOC       is now known as M_DC_ALLOC
       M_WINDOW_DC_FREE        is now known as M_DC_FREE
       M_WINDOW_DC             is now known as M_DC_HANDLE

   7.4 Obsolete Control/Inquire types

   - The following MsysControl/Inquire types are no longer supported:
       M_DISPLAY_DOUBLE_BUFFERING
       M_LIVE_GRAB_MOVE_UPDATE
       M_LIVE_GRAB
       M_PSEUDO_LIVE_GRAB
       M_STOP_LIVE_GRAB_WHEN_DISABLED
       M_STOP_LIVE_GRAB_WHEN_INACTIVE
       M_STOP_LIVE_GRAB_WHEN_MENU
       M_PSEUDO_LIVE_GRAB_WHEN_OVERLAPPED
       M_LAST_GRAB_IN_TRUE_BUFFER (moved to a MdigControl/Inquire)
       M_LIVE_GRAB_END_TRIGGER    (moved to a MdigControl/Inquire)

   - The following MdispControl/Inquire types are no longer supported:
       M_WINDOW_OVR_DISP_ID
       M_WINDOW_DIB_HEADER
       M_KEY_CONDITION
       M_KEY_MODE
       M_DISPLAY_MODE
       M_WINDOW_OVR_DESTRUCTIVE
       M_WINDOW_OVR_FLICKER
       M_DESKTOP_CHANGE
       M_FRAME_START_HANDLER_PTR
       M_FRAME_START_HANDLER_USER_PTR
       M_WINDOW_CLIP_LIST
       M_WINDOW_CLIP_LIST_SIZE

   - The MsysControl/Inquire(..., M_LIVE_GRAB_NO_TEARING, ...) is no longer
        supported. Instead, use the new display control
        MdispControl(..., M_NO_TEARING, ...) that enables or disables tearing
        on a specific display.

   - The MdispInquire(..., M_DISPLAY_MODE, ...) has been removed from the
     documentation. Instead, use the new display inquire
     MdispInquire(..., M_DISPLAY_TYPE, ...) that returns the new display type.

   - The MdispControl(..., M_WINDOW_BUF_WRITE, ...) has been removed from
     the documentation. This control is still available in MIL 8.0 for
     backward compatibility, but should no longer be used. In MIL 8.0, you
     don't have to enable or disable direct access to the copy of the
     buffer stored in the frame buffer. If you inquire (M_WINDOW_BUF_ID)
     the buffer Id stored in the frame buffer and the Id is not M_NULL,
     then you can use the buffer Id.

   7.5 Others modifications

   - Three new attributes have been added for buffer allocation.
     The M_VIDEO_MEMORY and M_HOST_MEMORY attributes specify the location
     of the buffer, and the M_GDI attribute forces the buffer to be compatible
     with GDI.

   - The Overlay buffer behavior has changed.
     In MIL 8.0 when a new image is selected to the display and this image
     has a different format or size from the image currently selected to
     that display, the current overlay buffer is freed, and another
     overlay buffer is created with a different identifier (MIL_ID).
     Therefore, you need to inquire the new overlay identifier because
     the identifier of the old overlay buffer is now obsolete. To inquire the
     identifier of this newly created overlay buffer, use MdispInquire() with
     the M_OVERLAY_ID inquire type.

   - The M_AUTO_SCALE view mode is now available in MIL-Lite.

   - Allocation of a VGA system (M_SYSTEM_VGA) is no longer supported. Use a
     Host system instead.

8. Directory structure

   - The structure of the directories installed of the hard disk has changed.
     The import libraries are located under "installation directory"\mil\lib,
     headers are located in \mil\include and DLLs are copied to \mil\dll.
     The PATH environment variable is updated to include this directory in the
     path to allow DLLs to be
     accessible to programs.

9. MilConfig and the MIL Control Center

   - MilConfig has been improved and now shows the following tabs:
     - Information        : shows details of what has been installed: version number,
                     path, boards, etc.
     - Licensing          : shows the type of license available, the list of all
                     dongles detected (including dongles of older MIL versions)
                     with a status. A status other than "OK" indicates a faulty
                     dongle. The "Last licensing error reported" shows
                     information on the last licensing error, including the list
                     of modules used, modules available, and those used without
                     a valid license. It also shows the name of the function that
                     triggered the error, as well as the error time/date. This info
                     is also included in the sysinfo.txt (see Troubleshooting
                     tab) file.
     - Non-paged memory   : Non-paged memory shows the amount of physical RAM in the PC
                     and the part reserved for MIL non-paged pool. You can also
                     change the size of the non-paged pool. If you change the
                     amount of physical RAM in your PC you must update this tab.
     - Troubleshooting    : Troubleshooting allows the creation of a dump file (text or
                      html format) containing information on your system to help
                      you or a Matrox representative to resolve various potential
                      problems. The available checkboxes can be used to select the
                      required information. Some dump files are interactive and will
                      display a dialog asking you to reproduce your exact problem
                      while MilConfig monitors the activity.
     - Video Hardware Acceleration
                   : Video Hardware acceleration provides a simple slider to
                     progressively disable various video hardware accelerations
                     provided by your video card. Some drivers will wrongly
                     report that they can handle certain operations and then
                     silently fail or behave in an unexpected way when called.
                     To work-around these video hardware or driver problems,
                     slide the cursor progressively towards the left trying to
                     reproduce your problem at each step.
     - Libraries          : Lists all the DLLs that are actually loaded and used by
                     your programs with version number and status.
                    If a DLL was not loaded from the normal installation folder
                    or could not be loaded at all because some dependencies
                    could not be resolved, it will be listed in red and this
                    situation should be fixed as it will probably cause
                    problems when using MIL.
     - Default Values     : Allows you to change default settings for systems, displays,
                     digitizers and images. The MIL examples (and other programs
                     using default values in allocations) will use these settings
                     at run-time.
     - Board-specific pages for some boards (Helios, Odyssey, Morphis, etc.) will
                     also be visible if a board of this type has been installed.
                     They contain board-specific settings and links to external
                     programs.

   Please note that some tabs will require the user to have administrative rights
   to make changes.

   The MIL Control Center becomes the main entry point to MIL services and its icon
   is installed directly on the desktop.
   It contains links to different tools (depending on the options selected
   at installation) like MilConfig, the Example Launcher, the processing utilities,
   the MIL help, demos, etc.

--------------------------------------------------------------------------------
Section 2: Differences between MIL 7.5 and 7.1

Table of Contents for Section 2

1. Support for new Matrox frame grabbers.
2. Operating system information.
3. Board-specific details.
4. New processing functionality.

1. Support for new Matrox frame grabbers.

   - Support for Matrox CronosPlus has been added.

   - Support for Matrox Cronos has been removed.

   - The Meteor-II/1394 driver now supports IIDC Version 1.30 (including
     M_MONO16 format).

2. Operating system information.

   - Matrox CronosPlus is supported under the following operating systems:
     Windows 2000 and Windows XP.

3. Board-specific details.

   - Please refer to the MIL/MIL-Lite Board-Specific Notes manual for
     information on Matrox CronosPlus.

   - Please refer to MilCronosPlus.txt and MilOrion.txt for additional
     information on Matrox CronosPlus and Matrox Orion, respectively.

   - Please refer to milgen.txt for additional information on Matrox
     Genesis.

   - The JPEG hardware module for the Matrox Meteor-II is no longer
     supported. It needs to be removed in order to use the Matrox
     Meteor-II driver.

4. New processing functionality

   - Geometric Model Finder
     + New integrated support for predefined models in the geometric context.
       (M_CIRCLE, M_ELLIPSE, M_RING, M_SQUARE, M_RECTANGLE, M_CROSS)
     + New integrated support for CAD models loaded from a DXF file.
     + Improvements to Geometric Model Finder module. Improvements allow for
       faster matching in complex targets (targets with a lot of edges) when
       few rotation and/or scale variations are present.
     + Target edges of a model occurrence as well as edges of the entire
       target image can now be obtained as a result or drawn. This is an
       option that must be enabled using MmodControl() with M_SAVE_TARGET_EDGES.
     + New option to cache the geometric representation of a target image in
       the result buffer of the model finder. When the result buffer is used
       again with the same target image, the geometric representation kept in
       the cache is used to speed up the process. This option must be enabled
       using MmodControl() with M_TARGET_CACHING.
     + Model definition from an edge result buffer of the new Edge Finder
       module.
     + Match directly in an edge result of the new Edge Finder module.

   - Geometric Model Finder (GUI)
     + Support for multiple calibration.
     + Support for subpixel annotations.
     + Support all the new features of model finder.

   - New Edge Finder Module
     + Allow edge (contour or crest) detection and analysis with subpixel
       accuracy.
     + Advanced post-selection functionality based on edge features (for
       example, length and elongation) and/or edge interrelationships (for
       example, edge inside another).

   - Code
     + Added support new types of barcodes (PostNet, Planet, UPC-A, UPC-E).
     + Added error correction level for Datamatrix codes.
     + Support for obsolete Datamatrix codes.
     + Support for reverse 1D barcode scanning.
     + New Graphical User Interface (GUI).

   - OCR
     + Added improved localization in constrained mode.
     + Added flexibility in classification to support small variations in
       non-uniform spacing.
     + Added support for strings at angles (in this version the angle must be
       between -90 and +90 degrees).
     + Added support for Multiple line mode.
     + Added flexibility in reading (Binary mode segmentation for strings with
       unknown spacing, unknown string length, etc.)
     + Added enhancement modes.
     + Support of single character reading.
     + New OCR GUI.
     + MocrControl() M_SKIP_CONTRAST_ENHANCE is obsolete.

   - NGC Pattern Matching
     + MpatSetAngle() is no longer supported on Matrox Genesis.
     + M_FIND_BEST_MODELS search mode in MpatFindMultipleModels()
       is no longer supported on Matrox Genesis.

   - MbufBayer()
     + The function can now perform gamma correction as a post-processing step.
     + Added direct support for buffers with a size bit different than 8.
     + Optimization: source format M_MONO8, destination format M_MONO8. This
       conversion can now be done in MMX.
     + Optimization: source format M_MONO8, destination format M_YUV16+
       M_PACKED. This conversion can now be done in MMX.
     + Optimization: source format M_MONO16, destination format M_RGB48. This
       conversion can now be done in MMX.

--------------------------------------------------------------------------------
Section 3: Differences between MIL 7.1 and 7.0

Table of Contents for Section 3

1. Support for new Matrox frame grabbers.
2. Operating system information.
3. Compiler information.
4. Board-specific details.

1. Support for new Matrox frame grabbers.

   - Support for Matrox Cronos has been added.

   - Support for Matrox Orion /Dual for 4Sight-II has been added. Now, MIL
     fully supports all three Matrox Orion grab modules for 4Sight-II
     (Standard, RGB, and Dual).

2. Operating system information.

   - All Matrox Imaging boards are now supported under Windows XP.

   - Matrox Cronos is supported under the following operating systems:
     Windows Me, Windows 2000, and Windows XP.

3. Compiler information.

   - MIL now supports the Microsoft Visual .NET C/C++ compiler.

4. Board-specific details.

   - Please refer to the MIL/MIL-Lite Board-Specific Notes manual for
     information on Matrox Cronos.

   - Please refer to milcronos.txt and milorion.txt for additional
     information on Matrox Cronos and Matrox Orion, respectively.


READ ME: HeliosPA.txt

-------------------------------------------------------------------------------
                Matrox Imaging Library (8.0) HeliosPA.txt Readme File
                               September 2, 2004
    Copyright© 2004 by Matrox Electronic Systems Ltd. All rights reserved.
-------------------------------------------------------------------------------

The following file contains a list of all the functions that are supported on the
Matrox Helios Pixel-Accelerator (PA).

Contents

1. Buffer management commands.
2. Image processing commands.

-------------------------------------------------------------------------------
Restrictions for all functions
-------------------------------------------------------------------------------

- All M_IMAGE buffers must be M_ON_BOARD.
- All M_KERNEL, M_LUT, M_ARRAY, M_STRUCT, M_EVENT_LIST and M_COUNT_LIST must be allocated on system but NOT on board.
- No M_IMAGE buffers 32+M_FLOAT supported.
- 1-bit buffers must be byte aligned and SizeX must be a multiple of 8 (ie: OffsetX % 8 and SizeX % 8).

*******************************************************************************
1. Buffer management commands.
*******************************************************************************
1.0  MbufBayer:

      - White Balance Coefficients Array must be allocated 32+M_FLOAT (sizeX of 3) if not M_DEFAULT
      - 8bits, 16bits buffers
      - Minimum buffer size X and Y must be 2.
      - Buffer size X and Y must be multiple of 2.

*******************************************************************************
2. Image processing commands.
*******************************************************************************
2.0  MimArith:

      M_ADD:
      M_ADD_CONST:
      M_SUB:
      M_SUB_CONST:
      - 8bits, 16bits, 32bits buffers
      - If M_SATURATION and source buffers are 32 bits source type must be the same as destination type.

      M_SUB_ABS:
      M_MULT:
      M_MULT_CONST:
      - 8bits, 16bits, 32bits buffers
      - No M_SATURATION

      M_CONST_SUB
      - 8bits, 16bits, 32bits buffers
      - M_SATURATION no 32-bit source buffers and no 32+M_UNSIGNED destination buffers

      M_AND:
      M_NAND:
      M_OR:
      M_XOR:
      M_NOR:
      M_XNOR:
      M_NOT:
      - 8bits, 16bits, 32bits buffers
      - 1-bit buffers if all sources and destination are 1-bit

      M_AND_CONST:
      M_NAND_CONST:
      M_OR_CONST:
      M_XOR_CONST:
      M_NOR_CONST:
      M_XNOR_CONST:
      M_DIV_CONST:
      M_CONST_DIV:
      M_NEG:
      M_ABS:
      - 8bits, 16bits, 32bits buffers

      M_DIV:
      - Sources must be same sign
      - 8bits, 16bits, 32bits buffers

      M_DIV+M_FIXED_POINT:
      - Source buffer 8bits
      - Destination buffer 16bits

      M_MIN:
      M_MIN_CONST:
      M_MAX:
      M_MAX_CONST:
      - 8bits, 16bits, 32bits+M_SIGNED buffers

      M_DIV_CONST+M_FIXED_POINT:
      M_CONST_DIV+M_FIXED_POINT:
      - NOT SUPPORTED

2.1  MimArithMultiple:

      M_OFFSET_GAIN:
      - 8bits, or 16bits UNSIGNED sources buffers
      - Source Size bit smaller or equal Destination Size bit
      - All sources of same size bit
      - Destination buffer 8-bit, 16bit, 32-bit UNSIGNED

      M_WEIGHTED_AVERAGE:
      - 8bits, or 16bits UNSIGNED sources buffers
      - Source Size bit smaller or equal Destination Size bit
      - All sources of same size bit
      - Destination buffer 8-bit, 16bit, 32-bit UNSIGNED if no SATURATION

      M_MULTIPLY_ACCUMULATE_1:
      - 8bits, or 16bits buffers

      M_MULTIPLY_ACCUMULATE_2:
      - Sources must be same sign
      - 8bits, or 16bits buffers

2.2  MimBinarize:

      - 1bit, 8bits, 16bits, 32bits buffers

2.3  MimClip:

      - 8bits, 16bits, 32bits buffers

2.4  MimConnectMap:

      - 1bit, 8bits, 16bits buffers

2.5  MimConvert:

      M_YUV16_TO_RGB:
          - Source YUV16 packed, destination RGB24 planar

      M_RGB_TO_YUV16:
          - Source RGB24 planar, destination YUV16 packed

      M_RGB_TO_L:
      M_L_TO_RGB:
      M_RGB_TO_Y:
          - Only 8-bit buffers

2.6  MimConvolve:

      Custom Kernel:
      - 8bits, 16bits source and kernel buffers
      - 8bits, 16bits, 32 bits destination buffer

      M_SMOOTH:
      M_SHARPEN:
      M_SHARPEN2:
      M_VERT_EDGE:
      M_HORIZ_EDGE:
      M_LAPLACIAN_EDGE:
      M_LAPLACIAN_EDGE2:
      - 8bits, 16bits source buffer
      - 8bits, 16bits, 32 bits destination buffer

      M_EDGE_DETECT:
      - 8bits, 16bits buffers
      - Source and destination buffers must be same type
      - Kernel Value must be 1 or 2.

      M_EDGE_DETECT2:
      - 8bits, 16bits source buffer
      - Kernel Value cannot 2
      - M_USE_RESERVED_ANGLE_VALUE not supported

2.7  MimCountDifference:

      - 8bits, 16 bits buffers of same sign
      - 1bits source 1 and source 2 buffers
      - 32bits source 1 and source 2 buffers

2.8  MimDilate:

      - 8bits, 16bits with mode M_GRAYSCALE
      - 1bit with mode M_BINARY
      - Source type must be the same as destination type.

2.9  MimDistance:

      - 8bits, 16bits buffers

2.10 MimErode:

      - 8bits, 16bits with mode M_GRAYSCALE
      - 1bit with mode M_BINARY
      - Source type must be the same as destination type.

2.11 MimFindExtreme:

      - 8bits, 16 bits, 32bits buffers
      - M_MIN_VALUE, M_MAX_VALUE, M_MIN_VALUE+M_MAX_VALUE
      M_MIN_ABS_VALUE, M_MAX_ABS_VALUE,
      M_MIN_ABS_VALUE+ M_MAX_ABS_VALUE

2.12 MimFlip:

      2.12.1 Source and Destination buffers M_ON_BOARD:
          - Source and destination buffers must be of same type
          - M_FLIP_VERTICAL only

      2.12.2 Source M_ON_BOARD, Destination M_OFF_BOARD:
          - Source planar to destination planar
          - Source planar to destination packed (RGB/BGR)
         - Source and destination buffers must be of same type
          - M_FLIP_VERTICAL, M_FLIP_HORIZONTAL

      2.12.3- Source M_OFF_BOARD, Destination M_ON_BOARD:
         - Source planar to destination planar
          - Source packed (RGB/BGR) to destination planar
          - Source and destination buffers must be of same type
          - M_FLIP_VERTICAL, M_FLIP_HORIZONTAL

2.13 MimLutMap:

      - 8bits, 16bits source buffer
      - 8bits, 16bits, 32bits LUT
      - 8bits, 16bits, 32bits destination buffer
      - LUT and Dest buffer must have same type.
      - Supported LUT are : (max nb elements 4096)
         SRC max nb bits   => Dst bits	Lut Size bits   Lut max Size X
               5           =>  8              8                  32
               6           =>  8              8                  64
               7           =>  8              8                 128
               8           =>  8              8                 256
               8           =>  16            16                 256
               8           =>  32            32                 256
               9           =>  8              8                 512
               9           =>  16            16                 512
               9           =>  32            32                 512
               10           =>  8              8                1024
               10           =>  16            16                1024
               10           =>  32            32                1024
               11           =>  8              8                2048
               11           =>  16            16                2048
               12           =>  8              8                4096

2.14 MimMorphic:

      M_DILATE:
      M_ERODE:
      - 8bits, 16bits with mode M_GRAYSCALE
      - 1bit with mode M_BINARY
      - Source type must be the same as destination type.

      M_THICK:
      M_THIN:
      - 8bits, 16bits with mode M_GRAYSCALE
      - 1bit with mode M_BINARY
      - Source type must be the same as destination type.
      - Kernel center offset X and Y must be centered.

      M_MATCH:
      - 1bit, 8bits, 16bits buffers
      - Mode M_BINARY only

2.15 MimRank:
      - 1bit, 8bits, 16bits source buffer
      - M_3x3_CROSS only with 16bits source buffer
      - 8bits, 16 bits destination buffer
      - Rank M_MEDIAN only

2.16 MimResize:

      2.16.1 Source and Destination buffers M_ON_BOARD:
          - Source and destination buffers must be of same type
          - 8+M_UNSIGNED, 16+M_SIGNED buffers
          - M_NEAREST_NEIGHBOR:
              - Scale X: n, 1.0/n
                        (where n can be 1, 2, 4, 8)

              - Scale Y: n, 1.0/n
                        (where n can be 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)

          - M_ INTERPOLATE, M_AVERAGE:
              - Scale X, Y: 1.0/n
                        (where n can be 1, 2, 4, 8)

          - M_ INTERPOLATE, M_BILINEAR:
              - Scale X, Y: 1, 2, 4, 8

      2.16.2 Source M_ON_BOARD, Destination M_OFF_BOARD:
          - Source planar to destination planar
          - Source planar to destination packed (RGB/BGR)
         - Source and destination buffers must be of same type
          - 8bits, 16bits buffers
          - M_NEAREST_NEIGHBOR:
              - Scale X: 1, 1/2, 1/3, 1/4, 1/5, 1/6, 1/7, 1/8, 1/9, 1/10, 1/11,
          1/12, 1/13, 1/14, 1/15, 1/16
              - Scale Y: 1, 1/2, 1/3, 1/4, 1/5, 1/6, 1/7, 1/8, 1/9, 1/10, 1/11,
          1/12, 1/13, 1/14, 1/15, 1/16

      2.16.3 Source M_OFF_BOARD, Destination M_ON_BOARD:
         - Source planar to destination planar
          - Source packed (RGB/BGR) to destination planar
          - Source and destination buffers must be of same type
          - 8bits, 16bits buffers
          - M_NEAREST_NEIGHBOR:
              - Scale X: 1, 1/2, 1/3, 1/4, 1/5, 1/6, 1/7, 1/8, 1/9, 1/10, 1/11,
          1/12, 1/13, 1/14, 1/15, 1/16
              - Scale Y: 1, 1/2, 1/3, 1/4, 1/5, 1/6, 1/7, 1/8, 1/9, 1/10, 1/11,
          1/12, 1/13, 1/14, 1/15, 1/16

2.17 MimShift:

   - 8bits, 16bits, 32bits buffers
   - Maximum Shift Value 31

2.18 MimThick:

   - 8bits, 16bits with mode M_GRAYSCALE
   - 1bit with mode M_BINARY
   - Source type must be the same as destination type.

2.19 MimThin:

   - 8bits, 16bits with mode M_GRAYSCALE
   - 1bit with mode M_BINARY
   - Source type must be the same as destination type.


READ ME: MILCor.txt

--------------------------------------------------------------------------------
               Matrox Imaging Library (7.0) Milcor.txt Readme File
                                   Sept 28, 2000
     Copyright © 2000 by Matrox Electronic Systems Ltd. All rights reserved.
--------------------------------------------------------------------------------

This document explains the current limitations and particularities when using
MIL with Matrox Corona (subject to change in future releases).

Contents

1. Matrox Corona with MIL/ActiveMIL.
2. Matrox Corona with MIL.
   2.1 Mdig...() additions/modifications.
   2.2 Mdisp...() additions/modifications.
3. Matrox Corona with ActiveMIL.
   3.1 Digitizer control additions/modifications.
   3.2 Display control additions/modifications.

1. Matrox Corona with MIL/ActiveMIL.

   - When enabling the encoder in PAL resolution under Windows 98 in single-
     screen mode, if the Matrox display properties program asks you to reboot,
     you must do it immediately. Afterwards, you should continue at the point
     from which you left.

2. Matrox Corona with MIL.

   2.1 Mdig...() additions/modifications.

       - MdigControl():
         - M_GRAB_EXPOSURE_BYPASS is only supported in the manual exposure model
           (M_ENABLE).

       - MdigGrab():
         - Only supports grabbing from a 2 tap camera, if the camera is in an
           odd-even line configuration. That is, one tap is transmitting the
           odd lines while the other tap is transmitting the even lines.

       - MdispHookFunction():
         - Not supported.

   2.2 Mdisp...() additions/modifications.

       - MdispPan():
         - Not supported in non-windowed mode.

       - MdispZoom():
         - Not supported in non-windowed mode.

       -Important display notice:

        Typically, if you want to display one or many color images in a window
        on the Windows desktop screen (e.g. using the M_WINDOWED display type),
        the display update of these image buffers can be much faster if they are
        allocated in M_RGB24+M_PLANAR format. Note that this depends on your
        VGA(s) configuration, operating system, and the display options that you
        are using (e.g. such as non-destructive overlay).

3. Matrox Corona with ActiveMIL.

   3.1 Digitizer control additions/modifications.

       - The GrabExposureBypass method is only supported when the manual exposure
         model = True.

       - The Grab method only supports grabbing from a 2 tap camera, if the camera
         is in an odd-even line configuration. That is, one tap is transmitting
         the odd lines while the other tap is transmitting the even lines.

   3.2 Display control additions/modifications.

       - The FrameStart event is not supported.

       - The Pan and Zoom methods are not supported.


READ ME: MILCor_II.txt

--------------------------------------------------------------------------------
               Matrox Imaging Library (8.0) MILCOR_II.TXT Readme File
                               May 4th, 2005
    Copyright© 2005 by Matrox Electronic Systems Ltd. All rights reserved.
--------------------------------------------------------------------------------

This document explains the current limitations and particularities when using
MIL with Matrox Corona-II (subject to change in future releases).

It also presents last minute board-specific information that did not make it
into the MIL/MIL-Lite Board-Specific manual or the on-line help. The
information found in this file overrides your formally documented material.

Contents

1. Matrox Corona-II with MIL.
 1.1 Mdisp...() additions/modifications.
2. Matrox Corona-II with ActiveMIL.
 2.1 Display control additions/modifications.
3. Installation notice.

1. Matrox Corona-II with MIL.

1.1 Mdisp...() additions/modifications.

     - The following functions are not supported with auxiliary displays:
         - MdispHookFunction().
        - MdispPan():
         - MdispZoom():

2. Matrox Corona-II with ActiveMIL.

2.1 Display control additions/modifications.

     - The FrameStart event is not supported with auxiliary displays.
     - The Pan and Zoom methods are not supported with auxiliary displays.

3. Installation notice.

   - On page 79 of the Matrox Corona-II Installation and Hardware Reference,
     the location of pin 70 is incorrect on the diagram. The pin labeled 70 is
     actually pin 2. All the odd numbered pins are on one side of the connector
     [2, 4, ...,  70], while all the even numbered pins are on the other [1, 3, ..., 69].


READ ME: MILCronos.txt

--------------------------------------------------------------------------------
              Matrox Imaging Library (7.1ES) milcronos.txt Readme File
                                  January 28th, 2002
     Copyright © 2002 by Matrox Electronic Systems Ltd. All rights reserved.
--------------------------------------------------------------------------------

This document explains the current limitations and particularities when using
MIL with Matrox Cronos.

It also presents last minute information that did not make it into the manual
or on-line help. Note that this text file serves to complement your manual. The
information found in this file overrides your formally documented material.

Contents

1. Matrox Cronos with MIL.
   1.1 Limitations, particularities, and last minute information for Matrox
       Cronos.
2. Matrox Cronos with ActiveMIL.

1. Matrox Cronos with MIL.

1.1 Limitations, particularities, and last minute information for Matrox
    Cronos.

- MdigControl()/MdigInquire() M_UART control type:
   - The UART (serial port) is currently not supported.

2. Matrox Cronos with ActiveMIL.

   - All bug fixes and known bugs discussed in this file apply to Matrox
     Cronos with ActiveMIL as well.


READ ME: MILCronosPlus.txt

--------------------------------------------------------------------------------
              Matrox Imaging Library (8.0) MilCronosPlus.txt Readme File
                               September 2, 2004
    Copyright© 2004 by Matrox Electronic Systems Ltd. All rights reserved.
--------------------------------------------------------------------------------

This document explains the current limitations and particularities when using
MIL with Matrox CronosPlus.

It also presents last minute information that did not make it into the manual
or on-line help. Note that this text file serves to complement your manual. The
information found in this file overrides your formally documented material.

Contents

1. Matrox CronosPlus with MIL.
   1.1 Limitations, particularities, and last minute information for Matrox
       CronosPlus.
2. Matrox CronosPlus with ActiveMIL.

1. Matrox CronosPlus with MIL.

1.1 Limitations, particularities, and last minute information for Matrox
    CronosPlus.

2. Matrox CronosPlus with ActiveMIL.

   - All bug fixes and known bugs discussed in this file apply to Matrox
     CronosPlus with ActiveMIL as well.


READ ME: MILGEN.TXT

--------------------------------------------------------------------------------
               Matrox Imaging Library (8.0) Milgen.txt Readme File
                               May 4th, 2005
    Copyright© 2004 by Matrox Electronic Systems Ltd. All rights reserved.
--------------------------------------------------------------------------------

This document explains the current limitations and particularities when using
MIL with the Matrox Genesis family (subject to change in future releases).

It also presents last minute information that did not make it into the manual
or on-line help. Note that this text file serves to complement your manual. The
information found in this file overrides your formally documented material.
For other important information, please refer to the readme.txt file in the
GENESIS\DOC directory.

Contents

1. Limitations, particularities, and last minute information for Matrox Genesis.
   1.1 Limitations common to both MIL and MIL-Light.
   1.2 Limitations specific to MIL.
   1.3 Interactive utility limitations.
2. Matrox Genesis with ActiveMIL.
3. Matrox Genesis with Matrox Intellicam.

1. Limitations, particularities, and last minute information for Matrox Genesis.

   1.1 Limitations common to both MIL and MIL-Light.

       - MdigGrabWait():
         M_GRAB_NEXT_FIELD is not supported.

       - MdigHookFunction():
         On Matrox Genesis-LC, M_GRAB_FRAME_START and
         M_GRAB_FIELD_END/_ODD/_EVEN are not supported.

       - MsysAlloc():
         When using MIL with a Matrox Genesis system that has more than one node
         (located on the same board, or on multiple boards), you can allocate
         each node as described in the Board-Specific notes, or you can add
         M_NODE# (where # represents the node number) to the system number.  For
         example, to allocate the 2 nodes on a Matrox Genesis processor board
         system use:
               MsysAlloc(...,M_DEV0+M_NODE0,...,...) for the 1st node,
               MsysAlloc(...,M_DEV0+M_NODE1,...,...) for the 2nd node.

   1.2 Limitations specific to MIL.

       - MbufControl():
         M_PREDICTOR can only take the value 0 or 1.

       - MimResize(), MimRotate(), MimWarp():
         M_OVERSCAN_DISABLE is not supported.
         Overscan defaults to M_TRANSPARENT regardless of the interpolation mode
         specified.

       - MimConvolve(), MimDilate(), MimThick():
         M_OVERSCAN_DISABLE is not supported.
         Overscan defaults to M_TRANSPARENT when data is available in the parent
         buffer, otherwise it defaults to M_REPLACE_MIN.

       - MimRank(), MimErode(), MimThin():
         M_OVERSCAN_DISABLE is not supported.
         Overscan defaults to M_TRANSPARENT when data is available in the parent
         buffer, otherwise it defaults to M_REPLACE_MAX.

       - MpatGetResult():
         For time critical applications, it is possible to get the number of
         matches, scores, and positions in one call using Matrox Genesis
         native functions.  For more information, please refer to the
         README.TXT file in the \GENESIS\DOC directory.

       - MpatSetSearchParameter():
         Models allocated and saved on a Matrox Genesis system cannot be
         restored on a Host system. To save a Matrox Genesis model in a Host
         compatible format, issue the MpatSetSearchParameter() command with the
         "Parameter" parameter set to M_MODEL_FILE_TYPE, and the "Value"
         parameter set to M_MODEL_FILE_TYPE_HOST before saving the model. To
         re-enable saving in a Matrox Genesis format, set the "Value"
         parameter to M_MODEL_FILE_TYPE_GENESIS. Note that models saved in a
         Matrox Genesis format have better pixel resolution than those saved in
         a Host format.

   1.3 Interactive utility limitations.

       - The following interactive utilities do not work with Matrox Genesis:

           - CodeReader
           - EdgeFinder
           - ModelFinder
           - OcrReader
           - StringReader

2. Matrox Genesis with ActiveMIL.

   - For the Digitizer control:
     - On Matrox Genesis-LC, the GrabFrameStart, GrabFieldEnd, GrabFieldEndOdd,
       and GrabFieldEndEven events are not supported.
     - The Grab method: On Matrox Genesis and Matrox Genesis-LC, only vertical
       sub-sampling factors that are a multiple of 2 are supported when grabbing
       in a Host image. That is, Digitizer.ScaleY =  1/2,1/4,...,1/16.
     - The GrabWait method: the digGrabNextField setting is not supported.

   - For the System control:
     - Under Windows NT 4.0, the ActiveMIL driver will make use of DirectDraw
       (DDraw). DirectDraw is a DirectX SDK component that allows direct
       manipulation of display memory, hardware blitters, hardware overlays, and
       page flipping. DirectDraw provides this functionality while maintaining
       compatibility with existing Microsoft® Windows® applications and device
       drivers. However, some limitations are associated with its use. In this
       case, a special initialization flag exists to prevent the ActiveMIL
       display driver from using DDraw:
       System.InitializationFlag = sysNoDirectDraw.
       Conversely, to force ActiveMIL to use DDraw, the following initialization
       flag must be specified: System.InitializationFlag = sysUseDirectDraw.

   - In windowed displays, under Microsoft Windows NT 4.0, if problems related
     to the tracking of a window are experienced, that is, if a continuous grab
     operation is occurring at the wrong place on the desktop, or if the
     content of the display window is erratic, then specify the following
     initialization flag to disable the use of DDraw: System.InitializationFlag
     = sysNoDirectDraw. This flag will disable both the enhanced window tracking
     and the fast display update of images.

   - Native board-level programming is not possible under Windows NT using
     Visual Basic.

3. Matrox Genesis with Matrox Intellicam.

   - When selecting Matrox Genesis for the first time in Matrox Intellicam,
     you will be prompted to select the board type. If you check the
     "Save board type" option, you will never be prompted again.
     To undo the "Save board type" option so that you will be prompted again,
     run REGEDIT and delete the
     following key:
     HKEY_CURRENT_USER\Software\Matrox\Intellicam\Settings\GenesisBoardType


READ ME: MILHelios.txt

--------------------------------------------------------------------------------
              Matrox Imaging Library (8.0) MilHelios.txt Readme File
                               May 4th, 2005
    Copyright© 2005 by Matrox Electronic Systems Ltd. All rights reserved.
--------------------------------------------------------------------------------

This document explains the current limitations and particularities when using
MIL with Matrox Helios.

It also presents last minute information that did not make it into the manual
or on-line help. Note that this text file serves to complement your manual. The
information found in this file overrides your formally documented material.

Contents

1. Matrox Helios with MIL.
   1.1 Limitation and particularities.
   1.2 Last minute information.
2. Matrox Helios with ActiveMIL.
3. Matrox Helios Installation and Hardware Reference manual.
   3.1 Errors and omissions.
4. Known bugs.

1. Matrox Helios with MIL.

1.1 Limitations and particularities.

   - For a lists of supported MIL functions accelerated by the pixel-accelerator (PA)
     see HeliosPA.txt.

   - MdigChannel():

      - Changing the synchronisation channel with M_CHn+M_SYNC is not yet supported.

   - MdigControl()/MdigInquire():

      - The following controls/inquires are not yet supported when grabbing into an
        on-board buffer:
        M_GRAB_DIRECTION_X/Y, M_SOURCE_SIZE_X/Y, M_SOURCE_OFFSET_X/Y.

1.2 Last minute information.

   - Msys...() additions:

      - MsysControl(M_UART_FREE+M_UART_NB(M_DEVn)):
        - This stops MIL UART operations and frees UART ressources used by MIL.

2. Matrox Helios with ActiveMIL.

   - All the above information also applies to ActiveMIL.

3. Matrox Helios Installation and Hardware Reference manual.

   3.1 Errors and omissions.

    - Before the synchronization and control signals table in the
      "Matrox Helios XA acquisition section" section of the
      "Matrox Helios hardware reference" chapter, it states that
      TTL/LVDS signals can be set individually to either TTL or
      LVDS. This is incorrect. You can set TTL/LVDS signals
      in pairs to either TTL or LVDS.

4. Known bugs.

    - When grabbing from a line-scan camera, with no frame trigger,
      an error message might appear (for example, "Function MdigGrab()...
      Synchronization lost (Time out)" or "Error in MdigProcess()...
      the command has been aborted"). To resolve this issue, you must
      update your Matrox Helios firmware. Contact your Matrox
      representative for more information.


READ ME: MILIris.txt

--------------------------------------------------------------------------------
              Matrox Imaging Library (8.0) MilIris.txt Readme File
                               May 4th, 2005
    Copyright© 2005 by Matrox Electronic Systems Ltd. All rights reserved.
--------------------------------------------------------------------------------

This document explains the current limitations and particularities when using
MIL with Matrox Iris.

It also presents last minute information that did not make it into the manual
or on-line help. Note that this text file serves to complement your manual. The
information found in this file overrides your formally documented material.

Contents

1. Matrox Iris with MIL.
   1.1 Limitations, particularities, and last minute information for Matrox
       Iris.

1. Matrox Iris with MIL.

1.1 Limitations, particularities, and last minute information for Matrox
    Iris.

    - Use MdigControl() M_EXPOSURE_TIME+M_ARM_CONTINUOUS to set the
        exposure time for Matrox Iris in continuous mode. This value can
        be inquired using MdigInquire() with
        M_EXPOSURE_TIME+M_ARM_CONTINUOUS.

    - To use the predefined input gain levels for indoor and outdoor
        lighting conditions, use MdigControl M_SENSOR_GAIN with
        M_LIGHT_INDOOR and M_LIGHT_OUTDOOR.

    - To give an offset for the gain (positive or negative) use
        MdigControl M_BASE_BLACK_REF.

    - To activate the strobe output on user-defined signal 0,
        use MsysControl M_USER_BIT_MODE+0 set to M_TRIGGER.
        Note that if user-defined signal 0 is activated as
        M_TRIGGER, it cannot be used as a user-defined output
        signal. For more information, refer to the Matrox Iris
        chapter of the Board Specific Notes.

    - To activate user-defined output on user-defined signal
        0, use MsysControl M_USER_BIT_MODE+0 set to M_OUTPUT.
        Note that if user-defined signal 0 is activated as
        M_OUTPUT, it cannot be used as a strobe. For more
        information, refer to the Matrox Iris chapter of the
        Board Specific Notes.

    - To activate the trigger output on user-defined signal
        1,  use MsysControl M_USER_BIT_MODE+1 set to
        M_TRIGGER. Note that if user-defined signal 1 is
        activated as M_TRIGGER, it cannot be used as a user-
        defined output signal. For more information, refer
        to the Matrox Iris chapter of the Board Specific Notes.

    - To activate user-defined output on user-defined signal
        1, use MsysControl M_USER_BIT_MODE+1 set to M_OUTPUT.
        Note that if user-defined signal 0 is activated as
        M_OUTPUT, it cannot be used as a trigger. For more
        information, refer to the Matrox Iris chapter of the
        Board Specific Notes.


READ ME: MILMet2.txt

--------------------------------------------------------------------------------
              Matrox Imaging Library (8.0) Milmet2.txt Readme File
                               May 4th, 2005
    Copyright© 2004 by Matrox Electronic Systems Ltd. All rights reserved.
--------------------------------------------------------------------------------

This document explains the current limitations and particularities when using
MIL with the Matrox Meteor-II series:
- Matrox Meteor-II/Standard
- Matrox Meteor-II/Multi-Channel
- Matrox Meteor-II/Digital
- Matrox Meteor-II/1394
- Matrox Meteor-II/Camera Link

It also presents last minute board-specific information that did not make it
into the MIL/MIL-Lite Board-Specific manual or the on-line help. The
information found in this file overrides your formally documented material.

Contents

1. Matrox Meteor-II with MIL/MIL_Lite.
   1.1 Last minute information.
2. Installation notice.
3. List of cameras supported by MIL with Matrox Meteor-II/1394.
4. Matrox Meteor-II with ActiveMIL.
5. Special notice regarding Matrox Meteor-II/Camera Link.

1. Matrox Meteor-II with MIL/MIL-Lite.

1.1 Last minute information.

- MdispAlloc():
  - DispFormat parameter: since Matrox Meteor-II boards do not have a display
    section, refer to the VGA chapter in the MIL/MIL-Lite Board Specific manual.

1.3 Bug fixes.

1.4 Known bugs.

   - On Matrox Meteor-II/1394, the Sony V-500 camera has a hardware bug
     that prevents the driver from doing a complete reset when the camera is
     allocated or reallocated; therefore, this camera will sometimes stop
     responding to commands. When this happens, the driver will log a MIL
     error stating that the camera is no longer responding.

   - On Matrox Meteor-II/1394, the Sony V-500 camera also has a problem with the
     white balance adjustment. The settings might be lost when the camera is
     disconnected for a while. The white balance settings will be reset to
     U=128 and Y=128. This gives a greenish image that can be fixed using
     MIL MdigControl() with the control types M_WHITE_BALANCE_U and
     M_WHITE_BALANCE_V.

2. Installation notice.

   - In the Matrox Meteor-II /Standard Installation and Hardware Reference, some
     input voltage values (on page 72) for the user input signals are incorrect.
     The values listed are the following:
       Max of low: 1.0 V
       Min of high: 2.3 V
       Max of high: 3.8 V
     The correct values are:
       Max of low: 1.5 V
       Min of high: 3.5 V
       Max of high: 5.5 V

   - Note the following in the Matrox Meteor-II /Camera Link Installation and
     Hardware Reference:
       - On pages 29 and 42, the sampling rate should be 50 MHz.
       - On page 46, The table describing the pinout of the DB9 connector is
         incorrect: the signal for Pin 3 should be "LVDS TRIG-", whereas the
         signal for Pin 9 should be "N/C".

   - In the Matrox Meteor-II /Multi-Channel Installation and Hardware Reference,
     the descriptions for pin 17 and pin 18 are incorrect (p 64). The correct
     descriptions are as follows:
       - Pin17 : USER(2)_OUT,  Auxiliary User Output #2
       - Pin18 : USER(1)_OUT,  Auxiliary User Output #1

   - In the Installation and Hardware Reference manual of
     Matrox Meteor-II /Standard, /Multi-Channel, /Camera Link, /Digital, the
     operating conditions for the opto-isolated trigger are incorrect.
     The values listed are:
       Min of low: 0 V.
       Max of low: 0.8 V.
       Min of high: 2V.
       Max of high: 5V.
     The correct values are:
       Min of low: 0 V.
       Max of low: 0.8 V.
       Min of high: 4.05 V.
       Max of high: 9.16 V.

   - In the Matrox Meteor-II /Digital Installation and Hardware Reference manual
     (10762-101-0102) on page 63, the jumper diagram is backwards.
     It incorrectly states:
       Jumper     Signal
       ---------------------------
       B1 - B2:    TRIG+, TRIG
       B3 - B6:    VSYNC+, VSYNC
       B4 - B5:    HSYNC+, HSYNC
       B7 - B8:    CLKIN+, CLKIN-
     It should state:
       Jumper     Signal
       ---------------------------
       B1 - B2:    CLKIN+, CLKIN-
       B3 - B6:    HSYNC+, HSYNC
       B4 - B5:    VSYNC+, VSYNC
       B7 - B8:    TRIG+, TRIG

3. List of cameras supported by MIL with Matrox Meteor-II/1394.

   All 1394 cameras compliant with version 1.20 of the "1394-based
   Digital Camera Specification" of the 1394 Trade Association should work with
   MIL 8.0.

   The following cameras have been successfully tested with MIL 8.0:

   Allied:
      AVT Dolphin F201C
      AVT Dolphin F145C
      AVT Marlin F131B

   Basler:
      A101f
      A101fc
      A102f
      A301f
      A302f
      A302fs
      A302fc
      A602f

   COHU:
      7700

   JVC:
      KY-F1030
      KY-F75U

   IPS:
      FIXCCD_COLOR
      FIXCCD_MONO
      ASC6200M

   Point Grey Research:
      FireFly
      DragonFly
      Frea

   Prosilica
      Digital_Camera (DCAM 1.30)

   Sony:
      DS-250
      DFW-V300
      DFW-V500
      DFW-VL500
      DFW-X700
      DFW-SX900
      XCD-X700
      XCD-X710
      XCD-SX900
      XCD-SX910

   TELI:
      CSB4000F
      CS3720F

   TI:
      MC680-DCC

   Tokyo Electronic Industry Co:
      CCD Camera CS3720F

   Videre Design
      DCAM

4. Matrox Meteor-II with ActiveMIL.

   All of the above inforamtion also applies to ActiveMIL.

5. Special notice regarding Matrox Meteor-II/Camera Link

   - By default, there are no Windows COM Ports mapped to Matrox
        Meteor-II/Camera Link. To map COM ports to your
        Matrox Meteor-II/Camera Link, download the appropriate
        QFE from the Matrox Imaging website.


READ ME: MILMorphis.txt

--------------------------------------------------------------------------------
              Matrox Imaging Library (8.0) MilMorphis.txt Readme File
                               May 4th, 2005
    Copyright© 2005 by Matrox Electronic Systems Ltd. All rights reserved.
--------------------------------------------------------------------------------

This document explains the current limitations and particularities when using
MIL with Matrox Morphis.

It also presents last minute information that did not make it into the manual
or on-line help. Note that this text file serves to complement your manual. The
information found in this file overrides your formally documented material.

Contents

1. Matrox Morphis with MIL.
   1.1 Limitations and particularities.
   1.2 Last minute information.
2. Matrox Morphis with ActiveMIL.

1. Matrox Morphis with MIL.

1.1 Limitations, particularities, and last minute information for Matrox
    Morphis.

   - The following board types are available for Matrox Morphis PC/104-Plus:
    - M_MORPHIS+M_2VD: Morphis PC/104-Plus with two video decoders.
    - M_MORPHIS+M_2VD+M_J2K: Morphis PC/104-Plus with two video decoders and the JPEG2000 compression accelerator.
    - M_MORPHIS+M_J2K: Morphis PC/104-Plus with the JPEG2000 compression accelerator.

1.2 Last minute information.

   - Msys...() additions:

      - MsysControl(M_UART_FREE+M_UART_NB(M_DEVn)):
        - This stops MIL UART operations and frees UART ressources used by MIL.

2. Matrox Morphis with ActiveMIL.

   - All the above information also applies to ActiveMIL.


READ ME: MILOdyssey.txt

--------------------------------------------------------------------------------
              Matrox Imaging Library (8.0) MilOdyssey.txt Readme File
                               May 4th, 2005
    Copyright© 2004 by Matrox Electronic Systems Ltd. All rights reserved.
--------------------------------------------------------------------------------

This document explains the current limitations and particularities of using
MIL with Matrox Odyssey.

It also presents last minute information that did not make it into the manuals
or on-line help. The information found in this file overrides your formally
documented material.

Contents

1. Matrox Odyssey with MIL.
   1.1 Last minute information for Matrox Odyssey.
2. Matrox Odyssey with ActiveMIL.
3. Matrox Odyssey Installation and Hardware Reference manual.
   3.1 Errors and omissions.
4. Matrox Odyssey Kernel Memory
5. Known bugs.

1. Matrox Odyssey with MIL.

   1.1 Last minute information for Matrox Odyssey.

       - For a list of supported Mil functions accelerated by the pixel-accelerator
         (PA) see OdysseyPA.txt.

          - MdigControl()/MdigInquire():
         - The following controls/inquires are not yet supported:
           M_GRAB_FIELD_NUM, M_GRAB_WINDOW_RANGE, M_CAMERA_PRESENT.

       - MdigHookFunction():
         - The following hooks are not supported:
           M_GRAB_FIELD_END, M_GRAB_FIELD_END_ODD, M_GRAB_FIELD_END_EVEN.

         - The following hooks are only supported on the analog grab module (on the
           Odyssey XA):
           M_FRAME_START, M_FIELD_START, M_FIELD_START_ODD, M_FIELD_START_EVEN.

         - The following hooks are only supported during continuous grab:
           M_GRAB_FRAME_START and M_GRAB_FRAME_END.

       - MdigLut():
         - This feature is not yet fully implemented..

2. Matrox Odyssey with ActiveMIL.

   - All the above information also applies to ActiveMIL.

3. Matrox Odyssey Installation and Hardware Reference manual.

   3.1 Errors and omissions.

       - Before the synchronization and control signals table in the
          "Matrox Odyssey XA acquisition section and the Analog module"
         section of the "Frame grabbers" chapter, it states that TTL/LVDS
         signals can be set individually to either TTL or LVDS. This is
         incorrect. You can TTL/LVDS signals in pairs to either TTL or LVDS.

4. Matrox Odyssey Kernel Memory

   When the Kernel Memory threshold exceeds 90%, a warning appears
   informing you to increase the free heap memory size.
   Occasionaly, an Odyssey Stop screen may appear for the same reason.

   How to increase the kernel memory size with MILCONFIG.

   - Start MILCONFIG.
   - Select the Odyssey tab.
   - Click the 'OdcCfg' button.
   - Select the "View Flash" option from the "Flash Configuration" menu.
   - Select the "Software" tab.
   - Increase the size in the "Minimum Free Heap" field and then click on the OK button.
   - Restart or refresh the OdcMonitor application.

5. Known bugs

   - Multiple processes the same board.
     - This feature is not yet supported.


READ ME: MILOrion.txt

--------------------------------------------------------------------------------
              Matrox Imaging Library (8.0) MilOrion.txt Readme File
                               May 4th, 2005
    Copyright© 2004 by Matrox Electronic Systems Ltd. All rights reserved.
--------------------------------------------------------------------------------

This document explains the current limitations and particularities when using
MIL with Matrox Orion and Matrox Orion grab modules on Matrox 4Sight-II.

It also presents last minute information that did not make it into the manual
or on-line help. Note that this text file serves to complement your manual. The
information found in this file overrides your formally documented material.

Contents

1. Matrox Orion with MIL.
   1.0 Limitations, particularities, and last minute information for Matrox
       Orion and Matrox Orion for 4Sight-II.
   1.1 Known bugs.
2. Matrox Orion with ActiveMIL.

1. Matrox Orion with MIL.

- There are no changes to Natrox Orion with MIL 8.0 from MIL 7.5.

1.0 Limitations, particularities, and last minute information for Matrox
    Orion and Matrox Orion for 4Sight-II.

- MdigGrab():
   - When in an 8-bit display resolution, it is not possible to grab from a
     color camera; an error will be generated if you try to do so.

1.1 Known bugs.

   - A2938: Matrox Orion does not support fast-channel switching between
     cameras of the same type. Channel switching is reliable but the speed is
     not as great as Matrox Meteor-II or Matrox Morphis.
   - With Matrox Orion: The maximum display resolution and refresh rate is
     1280x1024x32bpp@75Hz. Corrupt images and unreliable grabs can occur
     if this is not respected.
   - Changing the display resolution or color depth when a Matrox Orion system
     is allocated will result in error messages and the application will not
     be able to proceed. Pressing <CTRL-ALT-DEL> can cause a change in the
     display resolution and will also result in an error.
   - For Windows 2000/XP, when installing the display driver for Matrox Orion, do
     not check the "add extra DualHead Multi-Display support" checkbox in the
     Matrox PowerDesk Setup dialog box. Otherwise, your Matrox Orion might not
     work. Also, if your Matrox Orion driver does not start, uninstall the
     display driver and reinstall it with respect to the above mentioned
     condition. DO NOT REINSTALL THE DISPLAY DRIVER ON TOP OF THE EXISTING ONE.
     If you wish to add extra DualHead multi-display support, you can do so
     from the Advanced page in the Display Properties dialog box after the
     display driver has been installed.

2. Matrox Orion with ActiveMIL.

   - All bug fixes and known bugs discussed in this file apply to Matrox
     Orion with ActiveMIL as well.


READ ME: MILSolios.txt

--------------------------------------------------------------------------------
              Matrox Imaging Library (8.0) MilSolios.txt Readme File
                               May 4th, 2005
    Copyright© 2005 by Matrox Electronic Systems Ltd. All rights reserved.
--------------------------------------------------------------------------------

This document explains the current limitations and particularities when using
MIL with Matrox Solios.

It also presents last minute information that did not make it into the manual
or on-line help. Note that this text file serves to complement your manual. The
information found in this file overrides your formally documented material.

Contents

1. Matrox Solios with MIL.
   1.1 Limitations and particularities.
   1.2 Last minute information.
2. Matrox Solios with ActiveMIL.
3. Matrox Solios Installation and Hardware Reference manual.
   3.1 Errors and omissions.
4. Known bugs

1. Matrox Solios with MIL.

1.1 Limitations and particularities.

   - MdigAlloc():

      The mode of Matrox Solios can be changed through MILConfig (Solios tab)
      from its factory-default setting of single-Medium to dual-Base. Follow all on-screen
      procedures. Once changed, the PC must be shut-down and then turned back on (perform
      a cold-boot) for changes to take effect. Note that simply restarting your computer
      (using the Start Shut Down Windows Restart command) will not allow the changes to take affect.

      If you change the mode of Matrox Solios, make certain you also change your DCF.
      Using the wrong DCF when performing a digitizer allocation (using MdigAlloc()) will
      result in an error.

   - MdigChannel():

      - Changing the synchronisation channel with M_CHn+M_SYNC is not yet supported.

   - MdigControl()/MdigInquire():

      - The following controls/inquires are not yet supported:
        M_GRAB_DIRECTION_X, M_GRAB_DIRECTION_Y.

1.2 Last minute information.

   - Msys...() additions:

      - MsysControl(M_UART_FREE+M_UART_NB(M_DEVn)):
        - This stops MIL UART operations and frees UART ressources used by MIL.

2. Matrox Solios with ActiveMIL.

   - All the above information also applies to ActiveMIL.

3. Matrox Solios Installation and Hardware Reference manual.

    3.1 Errors and omissions.

    - Before the synchronization and control signals table in the
      "Matrox Solios XA acquisition section and the Analog module"
      section of the "Frame grabbers" chapter, it states that TTL/LVDS
      signals can be set individually to either TTL or LVDS. This is
      incorrect. You can TTL/LVDS signals in pairs to either TTL or LVDS.

4. Known bugs.

    - When grabbing from a line-scan camera, with no frame trigger,
      an error message might appear (for example, "Function MdigGrab()...
      Synchronization lost (Time out)" or "Error in MdigProcess()...
      the command has been aborted"). To resolve this issue, you must
      update your Matrox Solios firmware. Contact your Matrox
      representative for more information.


READ ME: OdysseyPA.txt

-------------------------------------------------------------------------------
                Matrox Imaging Library (8.0) HeliosPA.txt Readme File
                               May 4th, 2005
    Copyright© 2004 by Matrox Electronic Systems Ltd. All rights reserved.
-------------------------------------------------------------------------------

The following file contains a list of all the functions that are supported on the
Matrox Odyssey Pixel-Accelerator (PA).

Contents

1. Buffer management commands.
2. Image processing commands.

-------------------------------------------------------------------------------
Restrictions for all functions
-------------------------------------------------------------------------------

- All M_IMAGE buffers must be M_ON_BOARD.
- All M_KERNEL, M_LUT, M_ARRAY, M_STRUCT, M_EVENT_LIST and M_COUNT_LIST must be allocated on system but NOT on board.
- No M_IMAGE buffers 32+M_FLOAT supported.
- 1-bit buffers must be byte aligned and SizeX must be a multiple of 8 (ie: OffsetX % 8 and SizeX % 8).

*******************************************************************************
1. Buffer management commands.
*******************************************************************************
1.0  MbufBayer:

      - White Balance Coefficients Array must be allocated 32+M_FLOAT (sizeX of 3) if not M_DEFAULT
      - 8bits, 16bits buffers
      - Source and destination must be of the same size bit.
      - Minimum buffer size X and Y must be 2.
      - Buffer size X and Y must be multiple of 2.

*******************************************************************************
2. Image processing commands.
*******************************************************************************
2.0  MimArith:

      M_ADD:
      M_ADD_CONST:
      M_SUB:
      M_SUB_CONST:
      - 1bit, 8bits, 16bits, 32bits buffers
      - Mix of 1 and 32 bit buffer is not supported.
      - If M_SATURATION and source buffers are 32 bits source type must be the same as destination type.

      M_SUB_ABS:
      M_MULT:
      M_MULT_CONST:
      - 1bit, 8bits, 16bits, 32bits buffers
      - Mix of 1 and 32 bit buffer is not supported.
      - No M_SATURATION

      M_CONST_SUB
      - 1bit, 8bits, 16bits, 32bits buffers
      - Mix of 1 and 32 bit buffer is not supported.
      - M_SATURATION no 32-bit source buffers and no 32+M_UNSIGNED destination buffers

      M_AND:
      M_NAND:
      M_OR:
      M_XOR:
      M_NOR:
      M_XNOR:
      M_NOT:
      - 1bit, 8bits, 16bits, 32bits buffers
      - Mix of 1 and 32 bit buffer is not supported.

      M_AND_CONST:
      M_NAND_CONST:
      M_OR_CONST:
      M_XOR_CONST:
      M_NOR_CONST:
      M_XNOR_CONST:
      M_NEG:
      M_ABS:
      - 1bit, 8bits, 16bits, 32bits buffers

      M_DIV_CONST:
      - 1bit, 8bits, 16bits, 32bits buffers
      - Mix of 1 and 32 bit buffer is not supported.
      - When source and destination buffers are unsigned 32 bits, negative constant is not supported.

      M_CONST_DIV:
      - 1bit, 8bits, 16bits, 32bits buffers
      - Mix of 1 and 32 bit buffer is not supported.
      - Source buffer must be unsigned when destinatination buffer is unsigned 32 bits.
      - When source buffer is unsigned 32 bits, destination buffer must be 32 bits (signed or unsigned).

      M_DIV:
      - Sources must be same sign
      - 1bit, 8bits, 16bits, 32bits buffers
      - Mix of 1 and 32 bit buffer is not supported.

      M_DIV+M_FIXED_POINT:
      - NOT SUPPORTED

      M_MIN:
      M_MIN_CONST:
      M_MAX:
      M_MAX_CONST:
      - 1bit, 8bits, 16bits, 32bits buffers
      - Mix of 1 and 32 bit buffer is not supported.

      M_DIV_CONST+M_FIXED_POINT:
      M_CONST_DIV+M_FIXED_POINT:
      - NOT SUPPORTED

2.1  MimArithMultiple:

      M_OFFSET_GAIN:
      - 8bits or 16bits source buffers.
      - Source buffers Src1, Src3 must be unsigned (Src2 can be signed or not).
      - Source Size bit smaller or equal Destination Size bit
      - All sources of same size bit
      - Destination buffer 8bits, 16bits, 32bits UNSIGNED

      M_WEIGHTED_AVERAGE:
      - Source and destination buffers must be UNISGNED.
      - 8bits, or 16bits sources buffers
      - Source Size bit smaller or equal Destination Size bit
      - All sources of same size bit
      - Destination buffer 8-bit, 16bit and 32-bit if no SATURATION

      M_MULTIPLY_ACCUMULATE_1:
      - 8bits, or 16bits buffers

      M_MULTIPLY_ACCUMULATE_2:
      - Sources must be same sign
      - 8bits, or 16bits buffers

2.2  MimBinarize:

      - 1bit, 8bits, 16bits, 32bits buffers

2.3  MimClip:

      - 8bits, 16bits, 32bits buffers

2.4  MimConnectMap:

      - 1bit, 8bits, 16bits buffers

2.5  MimConvert:

      M_YUV16_TO_RGB:
          - Source YUV16 packed (YUYV) , destination RGB24 planar

      M_RGB_TO_YUV16:
          - Source RGB24 planar, destination YUV16 packed (YUYV)

      M_RGB_TO_L:
      M_L_TO_RGB:
      M_RGB_TO_Y:
          - Only 8-bit buffers

      M_RGB_TO_HSL:
      M_HSL_TO_RGB:
      M_RGB_TO_H :
           - only 8-bit buffers.

2.6  MimConvolve:

      Custom Kernel:
      - 8bits, 16bits source and kernel buffers
      - 8bits, 16bits, 32 bits destination buffer
      - Max number of kernel elements is 2048 for 8bits source, and 1024 for 16bits source buffer.

      M_SMOOTH:
      M_SHARPEN:
      M_SHARPEN2:
      M_VERT_EDGE:
      M_HORIZ_EDGE:
      M_LAPLACIAN_EDGE:
      M_LAPLACIAN_EDGE2:
      - 8bits, 16bits source buffer
      - 8bits, 16bits, 32 bits destination buffer

      M_EDGE_DETECT:
      - 8bits, 16bits buffers
      - Source and destination buffers must be same type
      - Kernel Value must be 1 or 2.

      M_EDGE_DETECT2:
      - 8bits, 16bits source buffer
      - Kernel Value cannot be 2
      - M_USE_RESERVED_ANGLE_VALUE not supported

2.7  MimCountDifference:

      - 8bits, 16 bits buffers of same sign
      - 1bits source 1 and source 2 buffers
      - 32bits source 1 and source 2 buffers

2.8  MimDilate:

      - 8bits, 16bits with mode M_GRAYSCALE
      - 1bit with mode M_BINARY
      - Source type must be the same as destination type.

2.9  MimDistance:

      - 8bits, 16bits buffers

2.10 MimErode:

      - 8bits, 16bits with mode M_GRAYSCALE
      - 1bit with mode M_BINARY
      - Source type must be the same as destination type.

2.11 MimFindExtreme:

      - 1bit, 8bits, 16 bits, 32bits buffers
      - M_MIN_VALUE, M_MAX_VALUE, M_MIN_VALUE+M_MAX_VALUE
        M_MIN_ABS_VALUE, M_MAX_ABS_VALUE,
        M_MIN_ABS_VALUE+ M_MAX_ABS_VALUE

2.12 MimFlip:

      2.12.1 Source and Destination buffers M_ON_BOARD:
          - Source and destination buffers must be of same type
          - M_FLIP_VERTICAL only

      2.12.2 Source M_ON_BOARD, Destination M_OFF_BOARD (Helios Only) :
          - Source planar to destination planar
          - Source planar to destination packed (RGB/BGR)
         - Source and destination buffers must be of same type
          - M_FLIP_VERTICAL, M_FLIP_HORIZONTAL

      2.12.3- Source M_OFF_BOARD, Destination M_ON_BOARD (Helios only) :
         - Source planar to destination planar
          - Source packed (RGB/BGR) to destination planar
          - Source and destination buffers must be of same type
          - M_FLIP_VERTICAL, M_FLIP_HORIZONTAL

2.13 MimLutMap:

      - 8bits, 16bits source buffer (can be 32 bit on the Odyssey).
      - 8bits, 16bits, 32bits LUT
      - 8bits, 16bits, 32bits destination buffer
      - LUT and Dest buffer must have same type.
      - Supported LUT are : (max nb elements 4096)
         SRC max nb bits   => Dst bits	Lut Size bits   Lut max Size X
               5           =>  8              8                  32
               6           =>  8              8                  64
               7           =>  8              8                 128
               8           =>  8              8                 256
               8           =>  16            16                 256
               8           =>  32            32                 256
               9           =>  8              8                 512
               9           =>  16            16                 512
               9           =>  32            32                 512
              10           =>  8              8                1024
              10           =>  16            16                1024
              10           =>  32            32                1024 <== Not supported on the Odyssey
              11           =>  8              8                2048 <== Not supported on the Odyssey
              11           =>  16            16                2048 <== Not supported on the Odyssey
              12           =>  8              8                4096 <== Not supported on the Odyssey

2.14 MimMorphic:

      M_DILATE:
      M_ERODE:
      - 8bits, 16bits with mode M_GRAYSCALE
      - 1bit with mode M_BINARY
      - Source type must be the same as destination type.

      M_THICK:
      M_THIN:
      - 8bits, 16bits with mode M_GRAYSCALE
      - 1bit with mode M_BINARY
      - Source type must be the same as destination type.
      - Kernel center offset X and Y must be centered.

      M_MATCH:
      - 1bit, 8bits, 16bits buffers
      - Mode M_BINARY only

2.15 MimProject:

     - ProjAngle = 0 (vertical projection only).
     - 8bits and 16bits source buffer
     - 1bit buffer is supported.
     - 16bits and 32bits destination buffer.

2.16 MimRank:

      - 1bit, 8bits, 16bits source buffer
      - M_3x3_CROSS only with 16bits source buffer
      - 8bits, 16 bits destination buffer
      - Rank M_MEDIAN only

2.17 MimResize:

      2.16.1 Source and Destination buffers M_ON_BOARD:
          - Source and destination buffers must be of same type
          - 8+M_UNSIGNED, 16+M_SIGNED buffers
          - M_NEAREST_NEIGHBOR:
              - Scale X: n, 1.0/n
                        (where n can be 1, 2, 4, 8)

              - Scale Y: n, 1.0/n where n=1 to 16

          - M_ INTERPOLATE, M_AVERAGE:
              - Scale X, Y: 1.0/n
                        (where n can be 1, 2, 4, 8)

          - M_ INTERPOLATE, M_BILINEAR:
              - Scale X, Y: 1, 2, 4, 8

      2.16.2 Source M_ON_BOARD, Destination M_OFF_BOARD (Helios only):
          - Source planar to destination planar
          - Source planar to destination packed (RGB/BGR)
         - Source and destination buffers must be of same type
          - 8bits, 16bits buffers
          - M_NEAREST_NEIGHBOR:
              - Scale X: 1/n where n=1 to 16
              - Scale Y: 1/n where n=1 to 16

      2.16.3 Source M_OFF_BOARD, Destination M_ON_BOARD (Helios only):
         - Source planar to destination planar
          - Source packed (RGB/BGR) to destination planar
          - Source and destination buffers must be of same type
          - 8bits, 16bits buffers
          - M_NEAREST_NEIGHBOR:
              - Scale X: 1/n where n=1 to 16
              - Scale Y: 1/n where n=1 to 16

2.18 MimShift:

   - 8bits, 16bits, 32bits buffers
   - Maximum Shift Value 31

2.19 MimStat :

   - 1bit, 8bits, 16 bits, 32bits buffers
   - Statistics :
     M_MIN, M_MAX, M_MIN+M_MAX, M_MIN_ABS, M_MAX_ABS, M_NUMBER
     M_MIN_ABS+ M_MAX_ABS, M_SUM, M_SUM_ABS, M_MEAN, M_SUM_SQAURED, M_STANDARD_DEVIATION
   - Conditions :
     M_IN_RANGE, M_OUT_RANGE, M_EQUAL, M_NOT_EQUAL, M_GREATER, M_GREATER_OR_EQUAL,
     M_LESS, M_LESS_OR_EQUAL, M_MASK, M_NULL.

2.20 MimThick:

   - 8bits, 16bits with mode M_GRAYSCALE
   - 1bit with mode M_BINARY
   - Source type must be the same as destination type.

2.21 MimThin:

   - 8bits, 16bits with mode M_GRAYSCALE
   - 1bit with mode M_BINARY
   - Source type must be the same as destination type.

2.22 MimTranslate:

   - 1bit, 8bits, 16bits, 32bits for integer displacement in X and Y
   - 8bits, 16bits : otherwise.


READ ME: MDispMFCReadme.txt

--------------------------------------------------------------------------------
               Matrox Imaging Library MDispMFC.txt Readme File
                                  November 1, 2003
     Copyright © 2003 by Matrox Electronic Systems Ltd. All rights reserved.
--------------------------------------------------------------------------------

This document explains the current limitations and particularities when using
the AppWizard application (see your MdispMFC example). This application, which
is accessed in Visual C++, not only demonstrates the basics of using the
Microsoft Foundation classes, but is also a starting point for writing your MIL
applications. This document contains a summary of what you will find in each of
the files that make up your MdispMFC application.

Contents

1. Important Files.
2. For the main frame window.
3. AppWizard: one document type and one view.
4. Other standard files.
5. Other notes.

1. Important Files.

   - MdispMFC.h:
     This is the main header file for the application. It includes other
     project specific headers (including Resource.h) and declares the
     CMdispMFCApp application class.

   - MdispMFC.cpp:
     This is the main application source file that contains the application
     class CMdispMFCApp.

   - MdispMFC.rc:
     This is a listing of all of the Microsoft Windows resources that the
     program uses.  It includes the icons, bitmaps, and cursors that are stored
     in the RES subdirectory.  This file can be directly edited in the Microsoft
     Developer Studio.

   - res\MdispMFC.ico:
     This is an icon file, which is used for the application's icon. This icon
     is included by the main resource file MdispMFC.rc.

   - res\MdispMFC.rc2:
     This file contains resources that are not edited by Microsoft Developer
     Studio. You should place all resources that can not be edited by the
     resource editor in this file.

   - MdispMFC.clw:
     This file contains information used by ClassWizard to edit existing
     classes or to add new classes.  ClassWizard also uses this file to store
     information needed to create and edit message maps, dialog data maps and
     to create prototype member functions.

2. For the main frame window.

   - MainFrm.h, MainFrm.cpp:
     These files contain the frame class CMainFrame, which is derived from
     CMDIFrameWnd, and controls all MDI frame features.

   - res\Toolbar.bmp:
     This bitmap file is used to create tiled images for the toolbar.
     The initial toolbar and status bar are constructed in the CMainFrame class.
     Edit this toolbar bitmap along with the array in MainFrm.cpp to add more
     toolbar buttons.

3. AppWizard: one document type and one view.

   - MdispMFCDoc.h, MdispMFCDoc.cpp (the document):
     These files contain your CMdispMFCDoc class. Edit these files to add your
     special document data and to implement file saving and loading (via
     CMdispMFCDoc::Serialize).

   - MdispMFCView.h, MdispMFCView.cpp (the view of the document):
     These files contain your CMdispMFCView class. CMdispMFCView objects are
     used to view CMdispMFCDoc objects.

   - res\MdispMFCDoc.ico:
     This is an icon file that is used for the icon regarding MDI child windows
     for the CMdispMFCDoc class.  This icon is included by the main resource
     file MdispMFC.rc.

4. Other standard files.

   - StdAfx.h, StdAfx.cpp:
     These files are used to build a precompiled header (PCH), with the file
     name MdispMFC.pch, and precompiled types, with the file named StdAfx.obj.

   - Resource.h:
     This is the standard header file that defines new resource IDs. Microsoft
     Developer Studio reads and updates this file.

5. Other notes.

   - AppWizard uses "TODO:" to indicate parts of the source code you should add
     to or customize.

   - If your application uses MFC for a shared DLL, and your application is
     in a language other than the operating system's current language, you
     will need to copy the corresponding localized resources MFC40XXX.DLL
     from the Microsoft Visual C++ CD-ROM onto the system or system32 directory,
     and rename it to be MFCLOC.DLL.  ("XXX" stands for the language
     abbreviation. For example, MFC40DEU.DLL contains resources translated to
     German.)  If you don't do this, some of the UI elements of your application
     will remain in the language of the operating system.


READ ME: mmx.txt

-------------------------------------------------------------------------------
                Matrox Imaging Library (7.0) mmx.txt Readme File
                                  June 29, 2001
    Copyright © 2000 by Matrox Electronic Systems Ltd. All rights reserved.
-------------------------------------------------------------------------------

The following file contains a list of all the functions that have been
optimized with MMX code. A supplementary section also suggests the data
alignment to obtain the best performance with MMX when a buffer is created
with the MbufCreate2d()/MbufCreateColor() function. Another section indicates
how MIL can enable/disable the use of MMX optimization.

Contents

1. Image processing commands.
2. Buffer management commands.
3. Measurements commands.
4. Pattern matching commands.
5. Blob analysis commands.
6. Graphics command.
7. Data alignment.

-------------------------------------------------------------------------------
Symbols used in the file
-------------------------------------------------------------------------------

Buffers:    Dst   : Destination
            Src   : Source
            Cnd   : Condition

Data type   UChar : unsigned char
            Char  : signed char
            UShort: unsigned short
            Short : signed short
            ULong : unsigned long
            Long  : signed long
            Float : float
            Bin   : binary

The buffer bit and sign refers to all buffers except floating point.

*******************************************************************************
1. Image processing commands.
*******************************************************************************

1.1   MimArith().

      1.1.1 Optimized versions:

         Dst     Src1     Src2
         ------  ------   ------
         UChar   UChar    UChar
         Char    Char     Char
         UChar   UShort   UChar
         Char    Short    Char
         UChar   UChar    UShort
         Char    Char     Short
         UShort  UChar    UChar
         Short   Char     Char
         UShort  UShort   UChar
         Short   Short    Char
         UShort  UChar    UShort
         Short   Char     Short
         UShort  UShort   UShort
         Short   Short    Short
         ULong   ULong    ULong
         Long    Long     Long

      1.1.2 Notes.

         - Saturation is not optimized for 32-bit src buffers.

         - M_MULT / M_MULT_CONST is not optimized for 32-bit src buffers.

         - Saturation is not optimized for unsigned mixes with an 8-bit destination.

      1.1.3 Options optimized.

         1.1.3.1 Operations where saturation is optimized.

                 M_ADD_CONST     M_ADD
                 M_SUB_CONST     M_SUB
                 M_CONST_SUB

         1.1.3.2 Operations without saturation (optimized).

                 M_AND           M_AND_CONST
                 M_OR            M_OR_CONST
                 M_XOR           M_XOR_CONST
                 M_NAND          M_NAND_CONST
                 M_NOR           M_NOR_CONST
                 M_XNOR          M_XNOR_CONST
                 M_MAX           M_MAX_CONST
                 M_MIN           M_MIN_CONST
                 M_MULT          M_MULT_CONST
                 M_ABS           M_SUB_ABS
                 M_NOT           M_NEG

          1.1.3.3 Operations not optimized.

                 M_PASS          M_CONST_PASS
                 M_DIV           M_DIV+M_FIXED_POINT
                 M_DIV_CONST     M_DIV_CONST+M_FIXED_POINT
                 M_CONST_DIV     M_CONST_DIV+M_FIXED_POINT

          1.1.3.4 Particular cases optimized.

           M_MULT+M_SATURATION               8,8->8       SIGNED
           M_MULT_CONST+M_SATURATION  8,Constant->8       SIGNED

          1.1.3.5 Mixed sign cases optimized.

          - M_ABS: All mixes are optimized (size & sign).

          - Logical (M_AND, M_NOR, etc.) operations on mixed types are
            optimized only when the size of all buffers is the same.

          - M_NEG operation is optimized on mixed types only when the size
            of all buffers is the same.

1.2   MimArithMultiple().

      1.2.1 M_OFFSET_GAIN.

            Optimized versions:

            Buffers UChar
            Buffers UChar + M_SATURATION
            Buffers Char
            Buffers Char + M_SATURATION
            Buffers Short
            Buffers Short + M_SATURATION

            Buffers UShort + M_SATURATION
            Buffers UShort

            Dst     Src1    Src2     Src3
            ------  ------  ------   ------
            UChar   UChar   Short    Short + M_SATURATION
            UChar   UChar   Char     UChar + M_SATURATION
            UChar   UChar   Char     Char + M_SATURATION

            NOTE: For in place operation, the SizeX * data size in
                  byte must be multiple of 8.

      1.2.2 M_WEIGHTED_AVERAGE.

            Optimized versions:

            Buffers UChar
            Buffers UChar + M_SATURATION
            Buffers Char
            Buffers Char + M_SATURATION
            Buffers Short
            Buffers Short + M_SATURATION
            Buffers UShort
            Buffers UShort + M_SATURATION

      1.2.3 M_MULTIPLY_ACCUMULATE_1.

            Optimized versions:

            Buffers UChar
            Buffers Char
            Buffers Char + M_SATURATION
            Buffers Short
            Buffers Short + M_SATURATION

            Buffers UChar + M_SATURATION (*)
            Buffers UShort + M_SATURATION (*)
            Buffers UShort (*)

            (*) For these versions to be optimized by MMX, the values in
                the source buffer cannot exceed the maximum value
                of a corresponding signed buffer (ex: 127 for an 8-bit buffer).

            NOTE: For in place operation, the SizeX * data size in
                  byte must be multiple of 8.

      1.2.4 M_MULTIPLY_ACCUMULATE_2.

            Optimized versions:

            Buffers UChar
            Buffers Char
            Buffers Char + M_SATURATION
            Buffers Short
            Buffers Short + M_SATURATION

            Buffers UChar + M_SATURATION (*)
            Buffers UShort + M_SATURATION (*)
            Buffers UShort (*)

            (*) For these versions to be optimized by MMX, the values in
                the source buffer cannot exceed the maximum value
                of a corresponding signed buffer (ex: 127 for an 8-bit buffer).

            NOTE: For in place operation, the SizeX * data size in
                  byte must be multiple of 8.

1.3   MimBinarize().

      Only the following versions of the function are optimized with MMX:

      Dst     Src
      ------  ------
      UChar   UChar
      UChar   Char
      Char    UChar
      Char    Char

      UShort  UShort
      UShort  Short
      Short   UShort
      Short   Short

      ULong   ULong
      ULong   Long
      Long    ULong
      Long    Long

      UShort  UChar
      UShort  Char
      Short   UChar
      Short   Char

      UChar   UShort
      UChar   Short
      Char    UShort
      Char    Short

      Binary   UChar
      Binary   Char
      Binary   UShort
      Binary   Short

1.4   MimClip().

      All integer versions for which source and destination are of the same size are
      optimized with MMX.

      Dst     Src
      ------  ------
      UChar   UChar
      Char    UChar
      UChar   Char
      Char    Char

      UShort  UShort
      Short   UShort
      UShort  Short
      Short   Short

      ULong   ULong
      Long    ULong
      ULong   Long
      Long    Long

1.5   MimClose().

      M_GRAYSCALE operation:
         All the buffer depths and sign combinations are optimized in MMX.

      M_BINARY operation:
         Not optimized in MMX.

1.6   MimConnectMap().
         Not optimized with MMX.

1.7   MimConvert().

      Only the following versions of the function are optimized with MMX:

      Dst     Src
      ------  ------
      UChar   UChar
      UChar   Char
      Char    UChar
      Char    Char

      Src                  Dst                   Restriction
      ------               ------                -----------
      M_RGB24+M_PLANAR     HLS (8-bit)           DstSizeX > 7
      M_RGB24+M_PLANAR     H (8-bit)             DstSizeX > 7
      M_RGB24+M_PLANAR     L (8-bit)             DstSizeX > 7
      HLS                  M_RGB24+M_PLANAR      DstSizeX > 7

      For other conversions, see MbufCopy() and MbufBayer().

1.8   MimConvolve().

      1.8.1 Custom kernels.

         Only the following versions of the function are optimized with MMX:

         Dst     Src     Kernel
         ------  ------  ------
         Char    Char    Char          (*) (128, -128, 128, -128)
         Char    Char    UChar         (*) (256,     , 256,     )
         Char    UChar   Char          (*) (128, -128, 128, -128)
         Char    UChar   UChar         (*) (256,     , 128,     )
         UChar   Char    Char          (*) (128, -128, 128, -128)
         UChar   Char    UChar         (*) (256,     , 256,     )
         UChar   UChar   Char          (*) (128, -128, 128, -128)
         UChar   UChar   UChar         (*) (256,     , 128,     )

         Short   Char    Char          (**) (128, -128, 128, -128)
         Short   Char    UChar         (**) (256,     , 256,     )
         Short   UChar   Char          (**) (128, -128, 128, -128)
         Short   UChar   UChar         (**) (256,     , 128,     )
         UShort  Char    Char          (**) (128, -128, 128, -128)
         UShort  Char    UChar         (**) (256,     , 256,     )
         UShort  UChar   Char          (**) (128, -128, 128, -128)
         UShort  UChar   UChar         (**) (256,     , 128,     )

         Short   Char    Short         (**) (128, -128, 128, -128)
         Short   Char    UShort        (**) (256,     , 256,     )
         Short   UChar   Short         (**) (128, -128, 128, -128)
         Short   UChar   UShort        (**) (256,     , 128,     )
         UShort  Char    Short         (**) (128, -128, 128, -128)
         UShort  Char    UShort        (**) (256,     , 256,     )
         UShort  UChar   Short         (**) (128, -128, 128, -128)
         UShort  UChar   UShort        (**) (256,     , 128,     )

         Short   Short   Char          (***) (32768, -32768, 32768, -32768)
         Short   Short   UChar         (***) (65536,       , 65536,       )
         Short   UShort  Char          (***) (32768, -32768, 32768, -32768)
         Short   UShort  UChar         (***) (65536,       , 32768,       )
         UShort  Short   Char          (***) (32768, -32768, 32768, -32768)
         UShort  Short   UChar         (***) (65536,       , 65536,       )
         UShort  UShort  Char          (***) (32768, -32768, 32768, -32768)
         UShort  UShort  UChar         (***) (65536,       , 32768,       )

         Short   Short   Short         (***) (32768, -32768, 32768, -32768)
         Short   Short   UShort        (***) (65536,       , 65536,       )
         Short   UShort  Short         (***) (32768, -32768, 32768, -32768)
         Short   UShort  UShort        (***) (65536,       , 32768,       )
         UShort  Short   Short         (***) (32768, -32768, 32768, -32768)
         UShort  Short   UShort        (***) (65536,       , 65536,       )
         UShort  UShort  Short         (***) (32768, -32768, 32768, -32768)
         UShort  UShort  UShort        (***) (65536,       , 32768,       )

         (*)  For these versions, the sum of the kernel values is verified to be
              below or equal (greater or equal for negative values) to the values
              specified in parenthesis. The first value is the sum of the positive
              values in the kernel, the second is the sum of the negative values
              in the kernel, the third is the sum of the positive values divided by
              the normalization factor, and the fourth is the sum of the negative
              values divided by the normalization factor. If these conditions are
              respected, the MMX version with a 16-bit accumulator is called.
              If these conditions are not respected and the number of elements
              in the kernel is smaller than 32025, the MMX function with a 32-bit
              accumulator is called. If the number of elements in the kernel is greater
              or equal to 32025 the non-MMX version is called.

              The internal accumulator contains the sum of the products of kernel
              elements by image values before normalization.

         (**) Note that for these versions, the internal accumulator is 16-bit
              unsigned when the source AND the kernel are unsigned. It is
              16-bit signed in all other cases.

              To ensure that an overflow did not occur, the sum of the kernel values
              is verified to be below or equal (greater or equal for negative values)
              to the values specified in parenthesis. The first value is the sum
              of the positive values in the kernel, the second is the sum of the
              negative values in the kernel, the third is the sum of the positive
              values divided by the normalization factor, and the fourth is the sum
              of the negative values divided by the normalization factor. If these
              conditions are not respected, we resort to the non-MMX function.

              The internal accumulator contains the sum of the products of kernel
              elements by image values before normalization.

         (***)For these versions to be optimized by MMX, the values in
              UNSIGNED source and UNSIGNED kernel buffers should not exceed
              the maximum value of a corresponding signed buffer.
              (ex: 127 for an 8-bit buffer)

              For these versions, the accumulator is 32-bit signed. We have a
              similar verification on the kernel's sum that the previous
              versions.

              Note that for a 5x5 convolution, the MMX version of the operations called
              only on a Pentium processor or when saturation is needed. On a Pentium Pro and
              Pentium II, the C++ version is faster when saturation is not needed.

              If these conditions are not met, no MMX optimization will be used.

      1.8.2 Predefined MIL kernels.

            Optimized with MMX in the following cases:

            All platforms:
               8 bits source buffers with 8- or 16-bit designations.

            Pentium Pro (Pentium-II) and subsequent versions only:
               8-bit and 16-bit source buffers with 8- or 16-bit designations.

1.9   MimCountDifference().

      General guideline: source and destination buffers must be
                         of the same sign.

      Src1    Src2
      ------  ------

      UChar   UChar
      Char    Char

      UChar   UShort
      Char    Short

      UShort  UChar
      Short   Char

      UShort  UShort
      Short   Short

      ULong   ULong

1.10  MimDilate().

      M_GRAYSCALE operation:
         All the buffer depths and sign combinations are optimized with MMX.

      M_BINARY operation:
         Not optimized in MMX.

1.11  MimDistance().

      CHAMFER_3_4 8-bit and 16-bit signed and unsigned are optimized with MMX.
      CHESSBOARD 8-bit signed and unsigned is optimized with MMX.
      All version of CITY_BLOCK aren't optimized with MMX

1.12  MimEdgeDetect().

      Only the following versions of the function are optimized with MMX

      Angle   Gradient   Source
      ------  --------   ------

      UChar   UChar      UChar
      UChar   UChar      Char
      Char    UChar      UChar
      Char    UChar      Char

      UShort  UChar      UChar
      UShort  UChar      Char
      Short   UChar      UChar
      Short   UChar      Char

      UChar   Char       UChar
      UChar   Char       Char
      UShort  Char       UChar
      UShort  Char       Char

      Char    Char       UChar
      Char    Char       Char
      Short   Char       UChar
      Short   Char       Char

      UChar   UShort     UChar
      UChar   UShort     Char
      UShort  UShort     UChar
      UShort  UShort     Char

      Char    UShort     UChar
      Char    UShort     Char
      Short   UShort     UChar
      Short   UShort     Char

      UChar   Short      UChar
      UChar   Short      Char
      UShort  Short      UChar
      UShort  Short      Char

      Char    Short      UChar
      Char    Short      Char
      Short   Short      UChar
      Short   Short      Char

1.13  MimErode.

      M_GRAYSCALE operation:
         All the buffer depths and sign combinations are optimized in MMX.

      M_BINARY operation:
         Not optimized in MMX.

1.14  MimFindExtreme().

        All 8-bit and 16-bit integer buffer combinations are optimized with MMX.

1.15  MimFlip().

      M_FLIP_VERTICAL      : Optimized (8 and 16-bit versions)
      M_FLIP_HORIZONTAL    : Optimized (8 and 16-bit versions)

1.16  MimHistogram().
         Not optimized with MMX.

1.17  MimHistogramEqualize().
         Not optimized with MMX.

1.18  MimLabel().
         Not optimized with MMX.

1.19  MimLocateEvent().

      Only the following versions of the function are optimized with MMX.

      Src
      ------

      UChar
      Char
      UShort
      Short

1.20  MimLutMap().
         Not optimized with MMX.

1.21  MimMorphic().

         M_ERODE, M_DILATE, M_THIN, M_THICK, M_HIT_OR_MISS, M_MATCH:

         M_GRAYSCALE operation:
            All the integer buffer depths and sign combinations are optimized with MMX.
            EXCEPTION: M_ERODE with a 32-bit + M_UNSIGNED source buffer is not optimized.

         M_BINARY operation:
            Not optimized with MMX.

1.22  MimOpen().

      M_GRAYSCALE operation:
         All the integer buffer depths and sign combinations are optimized with MMX.

      M_BINARY operation:
         Not optimized with MMX.

1.23  MimPolarTransform().

      M_RECTANGULAR_TO_POLAR():
         Not optimized with MMX.

      M_POLAR_TO_RECTANGULAR:
         Not optimized with MMX.

1.24  MimProject().

      Only the following versions of the function are optimized with MMX
      for M_0_DEGREE and M_90_DEGREE:

      Src
      ------
      UChar
      Char
      UShort
      Short

1.25  MimRank().

      All the integer buffer depths and sign combinations are optimized with MMX.

      The 3x3 median structuring element has been further optimized.

1.26  MimResize().

      Only the following versions of the function are optimized with MMX
      (with M_NEAREST_NEIGHBOR interpolation only):

      Dst     Src
      ------  ------
      Char    Char
      UChar   UChar
      Char    UChar
      Char    UChar

      UShort  UShort
      UShort  Short
      Short   UShort
      Short   Short

      Special Notes:

      To Zoom in X with 8-bit buffers:
            1. The width (SizeX) of the source buffer must be a multiple of 4.
            2. The zooming factor must be 2 or 4.

      To Zoom in X with 16-bit buffers:
            1. The width (SizeX) of the source buffer must be a multiple of 2.
            2. The width (SizeX) of the destination buffer must be a multiple of 8.
            3. The zooming factor must be 2 or 4.

      To Zoom out in X with 8-bit buffers:
            1. The width (SizeX) of the source buffer must be a multiple of 8.
            2. The zooming factor must be 1/2 or 1/4.

      Zooming out in X with 16-bit buffers is not optimized.

      To Zoom in Y, the factor must be an integer value.

      To Zoom out in Y, the factor must be (1/integer value).

      New version:

      Resize M_AVERAGE, 1/2 x 1/2 with unsigned char buffers only.
      No restrictions on the size of the buffers.

1.27  MimRotate().

      Not optimized with MMX, although greatly accelerated by the
      addition of fixed point in calculations.

1.28  MimShift().

      Only the following versions of the function are optimized with MMX:

      Dst     Src
      ------  ------
      Char    Char
      UChar   UChar

      UChar   UShort
      Char    Short

      UShort  UChar
      Short   Char

      UShort  UShort
      Short   Short

1.29  MimThick().

      M_GRAYSCALE operation:
         All the buffer depth and sign combinations are optimized with MMX.

      M_BINARY operation:
         Not optimized with MMX.

1.30  MimThin().

      M_GRAYSCALE operation:
         All the buffer depth and sign combinations are optimized with MMX.

      M_BINARY operation:
         Not optimized with MMX.

1.31  MimTransform().

      M_FFT:

         This function supports only fixed-point versions of the transform. For
         the forward transform, the sources must be 8-bit signed or unsigned
         and the destination must be long. The M_NORMALIZE flag must be set to
         avoid internal overflows in the fixed-point computations.

         For the reverse transform, the restrictions are the same but the source
         and destination are swapped.

      M_DCT8x8:

         Not optimized with MMX.

1.32  MimTranslate().

      Optimization for translations by fractional factors are optimized with MMX
      in the same way as MimConvolve, where 'Src' and 'Dst' are both the
      destination type of the MimTranslate operation and 'Kernel' is always Char.

1.33  MimWarp():
         Not optimized with MMX.

1.34  MimZoneOfInfluence().
         Not optimized with MMX.

*******************************************************************************
2. Buffer management commands.
*******************************************************************************

2.1   MbufCopy().

      Only the following versions of the function are optimized with MMX:

      Src                  Dst                                                   Restriction
      ------               ------                                                -----------
      M_MONO8              M_YUV16_YUYV                                          DstSizeX multiple of 2
      M_MONO8              M_YUV16_UYVY                                          DstSizeX multiple of 2
      M_MONO8              M_YUV16+M_PACKED                                      DstSizeX multiple of 2
      M_RGB24+M_PLANAR     M_YUV24+PLANAR                                        DstSizeX > 4
      M_RGB24+M_PLANAR     M_YUV16_YUYV                                          DstSizeX multiple of 8
      M_RGB24+M_PLANAR     M_YUV16_UYVY                                          DstSizeX multiple of 8
      M_RGB24+M_PLANAR     M_YUV16                                               DstSizeX multiple of 8
      M_RGB24+M_PLANAR     M_YUV12+M_PLANAR                                      DstSizeX multiple of 8 and DstSizeY multiple of 2
      M_RGB24+M_PLANAR     M_YUV9+M_PLANAR                                       DstSizeX multiple of 16 and DstSizeY multiple of 4
      M_BGR24+M_PACKED     M_YUV16_YUYV                                          DstSizeX multiple of 8
      M_BGR24+M_PACKED     M_YUV16+M_PACKED                                      DstSizeX multiple of 8
      M_YUV16_YUYV         M_MONO8                                               DstSizeX multiple of 2
      M_YUV16_UYVY         M_MONO8                                               DstSizeX multiple of 2
      M_YUV16+M_PACKED     M_MONO8                                               DstSizeX multiple of 2
      M_YUV24+M_PLANAR     M_RGB24+M_PLANAR                                      SrcSizeX > 4
      M_YUV16+M_PLANAR     M_RGB24+M_PLANAR                                      SrcSizeX multiple of 8
      M_YUV16_YUYV         M_BGR24+M_PACKED                                      SrcSizeX multiple of 8
      M_YUV16_UYVY         M_BGR24+M_PACKED                                      SrcSizeX multiple of 8
      M_YUV16+M_PACKED     M_BGR24+M_PACKED                                      SrcSizeX multiple of 8
      M_MONO8              M_COMPRESS+M_MONO8+M_JPEG_LOSSLESS                    DstSizeX multiple of 4
      M_RGB24+M_PLANAR     M_COMPRESS+M_RGB24+M_JPEG_LOSSLESS+M_PLANAR           DstSizeX multiple of 4
      M_MONO8              M_COMPRESS+M_MONO8+M_JPEG_LOSSLESS_INTERLACED         DstSizeX multiple of 4
      M_MONO8              M_COMPRESS+M_JPEG_LOSSY+M_MONO8                       DstSizeY multiple of 8
      M_RGB24+M_PLANAR     M_COMPRESS+M_JPEG_LOSSY+M_RGB24+M_PLANAR              DstSizeY multiple of 8
      M_RGB24+M_PLANAR     M_COMPRESS+M_JPEG_LOSSY+M_YUV24+M_PLANAR              DstSizeY multiple of 8
      M_RGB24+M_PLANAR     M_COMPRESS+M_JPEG_LOSSY+M_YUV16+M_PLANAR              DstSizeY multiple of 8
      M_RGB24+M_PLANAR     M_COMPRESS+M_JPEG_LOSSY+M_YUV16+M_PACKED              DstSizeX multiple of 16 and DstSizeY multiple of 8
      M_RGB24+M_PLANAR     M_COMPRESS+M_JPEG_LOSSY+M_YUV12+M_PLANAR              DstSizeY multiple of 16
      M_RGB24+M_PLANAR     M_COMPRESS+M_JPEG_LOSSY+M_YUV9+M_PLANAR               DstSizeY multiple of 32
      M_BGR24+M_PACKED     M_COMPRESS+M_JPEG_LOSSY+M_YUV16+M_PACKED              DstSizeX multiple of 16 and DstSizeY multiple of 8
      M_BGR32+M_PACKED     M_COMPRESS+M_JPEG_LOSSY+M_YUV16+M_PACKED              DstSizeX multiple of 16 and DstSizeY multiple of 8
      M_YUV24+M_PLANAR     M_COMPRESS+M_JPEG_LOSSY+M_YUV24+M_PLANAR              DstSizeY multiple of 8
      M_YUV16+M_PLANAR     M_COMPRESS+M_JPEG_LOSSY+M_YUV16+M_PLANAR              DstSizeY multiple of 8
      M_YUV16              M_COMPRESS+M_JPEG_LOSSY+M_YUV16+M_PACKED              DstSizeX multiple of 16 and DstSizeY multiple of 8
      M_YUV12+M_PLANAR     M_COMPRESS+M_JPEG_LOSSY+M_YUV12+M_PLANAR              DstSizeY multiple of 16
      M_YUV9+M_PLANAR      M_COMPRESS+M_JPEG_LOSSY+M_YUV9+M_PLANAR               DstSizeY multiple of 32
      M_YUV16_YUYV         M_COMPRESS+M_JPEG_LOSSY+M_YUV16+M_PACKED              DstSizeX multiple of 16 and DstSizeY multiple of 8
      M_YUV16_UYVY         M_COMPRESS+M_JPEG_LOSSY+M_YUV16+M_PACKED              DstSizeX multiple of 16 and DstSizeY multiple of 8
      M_MONO8              M_COMPRESS+M_JPEG_LOSSY_INTERLACED+M_MONO             DstSizeY multiple of 16
      M_RGB24+M_PLANAR     M_COMPRESS+M_JPEG_LOSSY_INTERLACED+M_YUV16+M_PACKED   DstSizeX multiple of 16 and DstSizeY multiple of 16
      M_BGR24+M_PACKED     M_COMPRESS+M_JPEG_LOSSY_INTERLACED+M_YUV16+M_PACKED   DstSizeX multiple of 16 and DstSizeY multiple of 16
      M_BGR32+M_PACKED     M_COMPRESS+M_JPEG_LOSSY_INTERLACED+M_YUV16+M_PACKED   DstSizeX multiple of 16 and DstSizeY multiple of 16
      M_YUV16              M_COMPRESS+M_JPEG_LOSSY_INTERLACED+M_YUV16+M_PACKED   DstSizeX multiple of 16 and DstSizeY multiple of 16
      M_YUV16_YUYV         M_COMPRESS+M_JPEG_LOSSY_INTERLACED+M_YUV16+M_PACKED   DstSizeX multiple of 16 and DstSizeY multiple of 16
      M_YUV16_UYVY         M_COMPRESS+M_JPEG_LOSSY_INTERLACED+M_YUV16+M_PACKED   DstSizeX multiple of 16 and DstSizeY multiple of 16

      Src                                                     Dst                Restriction
      ------                                                  ------             -----------
      M_COMPRESS+M_JPEG_LOSSY+M_MONO8                         M_MONO8            SrcSizeY multiple of 8
      M_COMPRESS+M_JPEG_LOSSY+M_RGB24+M_PLANAR                M_RGB24+M_PLANAR   SrcSizeY multiple of 8
      M_COMPRESS+M_JPEG_LOSSY+M_YUV24+M_PLANAR                M_RGB24+M_PLANAR   SrcSizeY multiple of 8
      M_COMPRESS+M_JPEG_LOSSY+M_YUV16                         M_RGB24+M_PLANAR   SrcSizeY multiple of 8
      M_COMPRESS+M_JPEG_LOSSY+M_YUV12+M_PLANAR                M_RGB24+M_PLANAR   SrcSizeY multiple of 16
      M_COMPRESS+M_JPEG_LOSSY+M_YUV9+M_PLANAR                 M_RGB24+M_PLANAR   SrcSizeY multiple of 32
      M_COMPRESS+M_JPEG_LOSSY+M_YUV16+M_PACKED                M_BGR24+M_PACKED   SrcSizeX multiple of 16 and SrcSizeY multiple of 8
      M_COMPRESS+M_JPEG_LOSSY+M_YUV16+M_PACKED                M_BGR32+M_PACKED   SrcSizeX multiple of 16 and SrcSizeY multiple of 8
      M_COMPRESS+M_JPEG_LOSSY+M_YUV24+M_PLANAR                M_YUV24+M_PLANAR   SrcSizeY multiple of 8
      M_COMPRESS+M_JPEG_LOSSY+M_YUV16                         M_YUV16+M_PLANAR   SrcSizeY multiple of 8
      M_COMPRESS+M_JPEG_LOSSY+M_YUV16+M_PACKED                M_YUV16+M_PACKED   SrcSizeX multiple of 16 and SrcSizeY multiple of 8
      M_COMPRESS+M_JPEG_LOSSY+M_YUV12+M_PLANAR                M_YUV12+M_PLANAR   SrcSizeY multiple of 16
      M_COMPRESS+M_JPEG_LOSSY+M_YUV9+M_PLANAR                 M_YUV9+M_PLANAR    SrcSizeY multiple of 32
      M_COMPRESS+M_JPEG_LOSSY+M_YUV16+M_PACKED                M_YUV16_YUYV       SrcSizeX multiple of 16 and SrcSizeY multiple of 8
      M_COMPRESS+M_JPEG_LOSSY+M_YUV16+M_PACKED                M_YUV16_UYVY       SrcSizeX multiple of 16 and SrcSizeY multiple of 8
      M_COMPRESS+M_JPEG_LOSSY_INTERLACED+M_MONO8              M_MONO8            SrcSizeY multiple of 16
      M_COMPRESS+M_JPEG_LOSSY_INTERLACED+M_YUV16+M_PACKED     M_RGB24            SrcSizeX multiple of 16 and SrcSizeY multiple of 16
      M_COMPRESS+M_JPEG_LOSSY_INTERLACED+M_YUV16+M_PACKED     M_BGR24            SrcSizeX multiple of 16 and SrcSizeY multiple of 16
      M_COMPRESS+M_JPEG_LOSSY_INTERLACED+M_YUV16+M_PACKED     M_BGR32            SrcSizeX multiple of 16 and SrcSizeY multiple of 16
      M_COMPRESS+M_JPEG_LOSSY_INTERLACED+M_YUV16              M_YUV16+M_PLANAR   SrcSizeX multiple of 16 and SrcSizeY multiple of 16
      M_COMPRESS+M_JPEG_LOSSY_INTERLACED+M_YUV16+M_PACKED     M_YUV16_YUYV       SrcSizeX multiple of 16 and SrcSizeY multiple of 16
      M_COMPRESS+M_JPEG_LOSSY_INTERLACED+M_YUV16+M_PACKED     M_YUV16_UYVY       SrcSizeX multiple of 16 and SrcSizeY multiple of 16

2.2   MbufCopyCond().

      Only the following versions of the function are optimized with MMX:

      Dst    Src    Cnd
      ------ ------ ------
      UChar  UChar  UChar
      UChar  UChar  Char
      UChar  Char   UChar
      UChar  Char   Char
      Char   UChar  UChar
      Char   UChar  Char
      Char   Char   UChar
      Char   Char   Char

      UShort UShort UShort
      UShort UShort Short
      UShort Short  UShort
      UShort Short  Short
      Short  UShort UShort
      Short  UShort Short
      Short  Short  UShort
      Short  Short  Short

2.3   MbufCopyMask().

      Only the following versions of the function are optimized with MMX:

      Dst    Src
      ------ ------
      UChar  UChar
      UChar  Char
      Char   UChar
      Char   Char

      UShort UShort
      UShort Short
      Short  UShort
      Short  Short

      ULong  ULong
      ULong  Long
      Long   ULong
      Long   Long

      UChar  UShort
      UChar  Short
      Char   UShort
      Char   Short

      UShort UChar
      UShort Char
      Short  UChar
      Short  Char

2.4   MbufBayer().

      Only the following versions of the function are optimized with MMX:

      Dst     Src
      ------  ------
      UChar   UChar
      UShort  UShort

      Src                 Dst                   Restriction
      ------              ------                -----------
      M_MONO8 (Bayer)     M_MONO8               DstSizeX > 10, DstSizeY > 3, SrcSizeX > 10, SrcSizeY > 3
      M_MONO8 (Bayer)     M_RGB24+M_PLANAR      DstSizeX > 10, DstSizeY > 3, SrcSizeX > 10, SrcSizeY > 3
      M_MONO8 (Bayer)     M_BGR32+M_PACKED      DstSizeX > 10, DstSizeY > 3, SrcSizeX > 10, SrcSizeY > 3
      M_MONO16 (Bayer)    M_RGB48+M_PLANAR      DstSizeX > 6, DstSizeY > 3, SrcSizeX > 6, SrcSizeY > 3
      M_MONO8 (Bayer)     M_YUV_YUYV            See table below.

      If the Src is M_MONO8 (Bayer) and the Dst is M_YUV16_YUYV, the restrictions
      depend on the SizeX and the AncestorOffsetX as follows:

      AncestorOffsetX     SizeX                 Restriction
      ---------------     -----                 -----------
      Odd                 Even                  DstSizeX > 10, DstSizeY > 3, SrcSizeX > 10, SrcSizeY > 3
      Odd                 Odd                   DstSizeX > 11, DstSizeY > 3, SrcSizeX > 11, SrcSizeY > 3
      Even                Even                  DstSizeX > 12, DstSizeY > 3, SrcSizeX > 12, SrcSizeY > 3
      Even                Odd                   DstSizeX > 11, DstSizeY > 3, SrcSizeX > 11, SrcSizeY > 3

      Finally, there are restrictions on the values of the white balance coefficients
      to respect in order to use the MMX-optimized version of the function:

      Dst                 Coefficient #0     Coefficient #1      Coefficient #2
      ------              --------------     --------------      --------------
      M_MONO8                  < 64            Don't care          Don't care
      M_RGB24+M_PLANAR         < 64               < 64                < 64
      M_BGR32+M_PACKED         < 64               < 64                < 64
      M_RGB48+M_PLANAR         < 64               < 64                < 64
      M_YUV_YUYV               < 64            Don't care          Don't care

      For other conversions, see MbufCopy() and MimConvert().

*******************************************************************************
3. Measurements commands.
*******************************************************************************

3.1   MmeasAllocContext().
         Not optimized with MMX.

3.2   MmeasAllocMarker().
         Not optimized with MMX.

3.3   MmeasAllocResult().
         Not optimized with MMX.

3.4   MmeasCalculate().
         Not optimized with MMX.

3.5   MmeasControl().
         Not optimized with MMX.

3.6   MmeasFindMarker().
         Optimized with MMX.

3.7   MmeasFree().
         Not optimized with MMX.

3.8   MmeasGetResult().
         Not optimized with MMX.

3.9   MmeasInquire().
         Not optimized with MMX.

3.10  MmeasRestoreMarker().
         Not optimized with MMX.

3.11  MmeasSaveMarker().
         Not optimized with MMX.

3.12  MmeasSetMarker().
         Not optimized with MMX.

*******************************************************************************
4. Pattern matching commands.
*******************************************************************************

4.1   MpatAllocAutoModel().
         Optimized with MMX.

4.2   MpatAllocModel().
         Not optimized with MMX.

4.3   MpatAllocResult().
         Not optimized with MMX.

4.4   MpatAllocRotatedModel().
         Not optimized with MMX.

4.5   MpatCopy().
         Not optimized with MMX.

4.6   MpatFindModel().
         Optimized with MMX.

4.7   MpatFindMultipleModel().
         Optimized with MMX.

4.8   MpatFindOrientation().
         Optimized with MMX.

4.9   MpatFree().
         Not optimized with MMX.

4.10  MpatGetNumber().
         Not optimized with MMX.

4.11  MpatGetResult().
         Not optimized with MMX.

4.12  MpatInquire().
         Not optimized with MMX.

4.13  MpatPreprocModel().
         Not optimized with MMX.

4.14  MpatRead().
         - Genesis model support has been added.
         - Not optimized with MMX.

4.15  MpatRestore().
         - Genesis model support has been added.
         - Not optimized with MMX.

4.16  MpatSave().
         Not optimized with MMX.

4.17  MpatSetAcceptance().
         Not optimized with MMX.

4.18  MpatSetAccuracy().
         Not optimized with MMX.

4.19  MpatSetAngle().
         Not optimized with MMX.

4.20  MpatSetCenter().
         Not optimized with MMX.

4.21  MpatSetCertainty().
         Not optimized with MMX.

4.22  MpatSetDontCare().
         Not optimized with MMX.

4.23  MpatSetNumber().
         Not optimized with MMX.

4.24  MpatSetPosition().
         Not optimized with MMX.

4.25  MpatSetSearchParameter().
         Not optimized with MMX.

4.26  MpatSetSpeed().
         Not optimized with MMX.

4.27  MpatWrite().
         Not optimized with MMX.

*******************************************************************************
5. Blob analysis commands.
*******************************************************************************

All the blob analysis commands that perform calculation have been optimized with MMX.

5.1   MblobAllocFeatureList().
         Not optimized with MMX.

5.2   MblobAllocResult().
         Not optimized with MMX.

5.3   MblobCalculate().
         Only the following versions of the function are optimized with MMX:

         Src     Foreground
         ------  ------------
         UChar   M_ZERO
         Char    M_ZERO
         UShort  M_ZERO
         Short   M_ZERO

5.4   MblobControl().
         Not optimized with MMX.

5.5   MblobFill().
         Not optimized with MMX.

5.6   MblobFree().
         Not optimized with MMX.

5.7   MblobGetLabel().
         Not optimized with MMX.

5.8   MblobGetNumber().
         Not optimized with MMX.

5.9   MblobGetResult().
         Not optimized with MMX.

5.10  MblobGetResultSingle().
         Not optimized with MMX.

5.11  MblobGetRuns().
         Not optimized with MMX.

5.12  MblobInquire().
         Not optimized with MMX.

5.13  MblobLabel().
         Not optimized with MMX.

5.14  MblobReconstruct().
         Optimized with MMX.

5.15  MblobSelect().
         Not optimized with MMX.

5.16  MblobSelectFeature().
         Not optimized with MMX.

5.17  MblobSelectFeret().
         Not optimized with MMX.

5.18  MblobSelectMoment().
         Not optimized with MMX.

*******************************************************************************
6. Graphics command.
*******************************************************************************

6.1   MgraAlloc().
         Not optimized with MMX.

6.2   MgraArc().
         Not optimized with MMX.

6.3   MgraArcFill().
         Not optimized with MMX.

6.4   MgraBackColor().
         Not optimized with MMX.

6.5   MgraClear().
         Not optimized with MMX.

6.6   MgraColor().
         Not optimized with MMX.

6.7   MgraControl().
         Not optimized with MMX.

6.8   MgraDot().
         Not optimized with MMX.

6.9   MgraFill().
         Not optimized with MMX.

6.10  MgraFont().
         Not optimized with MMX.

6.11  MgraFontScale().
         Not optimized with MMX.

6.12  MgraFree().
         Not optimized with MMX.

6.13  MgraInquire().
         Not optimized with MMX.

6.14  MgraLine().
         Not optimized with MMX.

6.15  MgraRect().
         Not optimized with MMX.

6.16  MgraRectFill().
         Not optimized with MMX.

6.17  MgraText().
         Not optimized with MMX.

*******************************************************************************
7. Data alignment.
*******************************************************************************

When a MIL buffer is created using MbufCreate2d()/MbufCreateColor(), its image
row data (scanline) should be aligned on 32-byte boundaries to give the best
performance in conjunction with the MMX-enabled functions. When it is not possible
to align on 32-byte boundaries, the buffer should at least be aligned on quadword
(64-bit) or doubleword (32-bit) boundaries. Note that by using the MbufAlloc2b()/
MbufAllocColor() function, the user does not have to worry about data alignment,
since in that case MIL automatically allocates the buffer with the proper alignment.

Moreover, 32 extra bytes should be available in reading at the beginning and end
of the buffer in order for the MMX-enabled algorithms to be able to perform
pre-fetching. The performance could decrease dramatically if those extra pixels
are not available. When they are available, then the define M_MMX_ENABLED must
be added to the attribute parameter at buffer creation time (MbufCreate2d()/
MbufCreateColor()) so that the MMX-enabled algorithms know that the pre-fetching
can be performed on them. It is also possible to set this flag after buffer
creation time by the use of the MbufControl(M_FORMAT) command. In this case, the
following syntax should appear like this:

MbufControl(MilImage,
            M_FORMAT,
            M_MMX_ENABLED|MbufInquire(MilImage, M_FORMAT, NULL));

(Note that this control is usually reserved for internal use only and thus does
not appear in the official documentation)


READ ME: pa.txt

-------------------------------------------------------------------------------
                Matrox Imaging Library (8.0) PA.txt Readme File
                               September 2, 2004
    Copyright© 2004 by Matrox Electronic Systems Ltd. All rights reserved.
-------------------------------------------------------------------------------

The following file contains a list of all the functions that have been
optimized with the OASIS pixel accelerator (PA).

Contents

1. Image processing commands.
2. Buffer management commands.

-------------------------------------------------------------------------------
Restrictions for all functions
-------------------------------------------------------------------------------

- Buffers are supposed to be on-board.
- Floating-point buffers are not supported.
- All integer buffer type (1, 8, 16 and 32-bit) are supported unless specified.

-------------------------------------------------------------------------------
Symbols used in the file
-------------------------------------------------------------------------------

Buffers:    Dst   : Destination
            Src   : Source
            Cnd   : Condition

Data type   UChar : unsigned char
            Char  : signed char
            UShort: unsigned short
            Short : signed short
            ULong : unsigned long
            Long  : signed long
            Bin   : binary

*******************************************************************************
1. Image processing commands.
*******************************************************************************

1.1  MimArith().
1.2  MimArithMultiple().
1.3  MimBinarize().
      Restrictions :
         - Planar buffer.
         - Src and Dst : 1, 8, 16 or 32-bit.
         - Cannot mix 1-bit with 32-bit buffer.

1.4  MimClip().
      Restrictions :
         - Planar buffer.

1.5  MimClose().
      Restriction :
         - Planar buffer.
         - Src and Dst : same type
         - Src and Dst : 8 or 16 bits in M_GRAYSCALE mode
                         1-bit in M_BINARY mode.

1.6  MimConnectMap().
      Restriction :
         - Planar buffer.
         - Src(s) and Dst : 1, 8, 16-bit.

1.7  MimConvert()
      Supported operations :
         M_RGB_TO_L     M_RGB_TO_Y        M_L_TO_RGB

      Restriction :
         - 8-bit planar buffer.

1.8  MimConvolve().
      Restriction :
         - Planar buffer.
         - Src    : 8 or 16-bit.
         - Dst    : 8, 16 or 32-bit.
         - kernel : 8 or 16-bit.

1.9  MimCountDifference().
      Restriction :
         - Planar buffer.
         - Src(s) and Dst : 1, 8, 16 or 32-bit.
         - Cannot mix 1-bit Src with another 32-bit Src buffer.
         - Src(s) : same sign.

1.10 MimDilate().
      Restriction :
         - Planar buffer.
         - Src and Dst : same type
         - Src and Dst : 8 or 16 bits in M_GRAYSCALE mode
                         1-bit in M_BINARY mode.

1.11 MimDistance().
      Restriction :
         - Planar buffer.
         - Src and Dst : 8 or 16 bits.

1.12 MimEdgeDetect().
      Supported operations :
         M_FAST_GRADIENT.

      Restriction :
         - Planar buffer.
         - No gradient angle destination image.
         - Src and Dst : 8 or 16 bits.
         - Src and Dst : same type.

1.13 MimErode().
      Restriction :
         - Planar buffer.
         - Src and Dst : same type
         - Src and Dst : 8 or 16 bits in M_GRAYSCALE mode
                         1-bit in M_BINARY mode.

1.14 MimFindExtreme().
      Restriction :
         - Planar buffer.

1.15 MimFlip().
      Supported operation :
         M_FLIP_VERTICAL

      Restriction :
         - Planar buffer.

1.16 MimLocateEvent().
      Restriction :
         - Planar buffer.

1.17 MimLutMap().
      Restriction :
         - Planar buffer.
         - Src and Dst : 8, 16 or 32-bit.

1.18 MimMorphic().
      Supported operations :
         M_DILATE    M_ERODE     M_THIN      M_THICK
         M_MATCH     M_HIT_OR_MISS

      Restriction :
         - Planar buffer.
         - Src and Dst : same type
         - Src and Dst : 8 or 16 bits in M_GRAYSCALE mode
                         1-bit in M_BINARY mode.
         - Structuring element buffer : 1, 8, 16 or 32-bit.

         M_DILATE and M_ERODE :
            - Structuring element buffer value range must not exceed 16-bit
              when the buffer is 32-bit.

         M_THICK and M_THIN :
            - Structuring element buffer size must be 3x3 in M_GRAYSCALE mode.
            - Structuring element buffer center offset X and Y must be centered.

         M_MATCH and M_HIT_OR_MISS :
            - Src and Dst : 1, 8 or 16-bit.

1.19 MimOpen().
      Restriction :
         - Planar buffer.
         - Src and Dst : same type
         - Src and Dst : 8 or 16 bits in M_GRAYSCALE mode
                         1-bit in M_BINARY mode.

1.20 MimResize().
     1.20.1 Subsampling
         - M_AVERAGE  and M_INTERPOLATE :
           - Planar buffer.
           - Src and Dst : same type
           - Src is UChar or Short.
           - Scale factor in X and Y : 1, 1/2, 1/4 and 1/8.
         - M_BILINEAR :
           - Planar buffer.
           - Scale factor in X and Y : 1/2.
           - Src : 1, 8 and 16-bit buffer.
         - M_NEAREST_NEIGHBOR :
           - Planar buffer.
           - Src and Dst : 1, 8, 16 or 32-bit.
           - Cannot mix 1-bit with 32-bit buffer.
           - Scale factor in X and Y : 1/n where n = 1 to 16.

      1.20.2 Zooming
         - M_BILINEAR :
           - Planar buffer.
           - Src and Dst : same type
           - Src is UChar or Short.
           - Scale factor in X and Y : 1, 2, 4 and 8.

         - M_NEAREST_NEIGHBOR :
           - Planar buffer.
           - Src and Dst : 1, 8, 16 or 32-bit.
           - Cannot mix 1-bit with 32-bit buffer.
           - Scale factor in X and Y : n = 1 to 16.

1.21 MimRotate().
      Supported operation : Translation (zero angle).

      Supported interpolation mode :
         M_NEAREST_NEIGHBOR   M_BILINEAR

      Restrictions :
         - Planar buffer.
         - Src and Dst : same type.
         - Src and Dst :
            - M_NEAREST_NEIGHBOR : 1, 8, 16 or 32-bit.
            - M_BILINEAR : 8 or 16-bit.

1.22 MimShift().
      Restrictions :
         - Planar buffer.
         - Maximum shift value is 31.

1.23 MimStat().
      Restriction :
         - Planar buffer.
         - M_NUMBER condition is not supported.

1.24 MimThick()
      Restriction :
         - Planar buffer.
         - Src and Dst : same type
         - Src and Dst : 8 or 16-bit in M_GRAYSCALE mode
                         1-bit in M_BINARY mode and Iteration number is less than 3.
1.25 MimThin().
      Restriction :
         - Planar buffer.
         - Src and Dst : same type
         - Src and Dst : 8 or 16-bit in M_GRAYSCALE mode
                         1-bit in M_BINARY mode.
1.26 MimWarp().
      Supported operation : Translation.

      Supported operation mode :
         M_WARP_POLYNOMIAL

      Supported interpolation mode :
         M_NEAREST_NEIGHBOR   M_BILINEAR

      Restriction :
         - Planar buffer.
         - Warp buffer coefficient : must be 3x3 or 3x2 of float value.

         M_NEAREST_NEIGHBOR :
            - Src and Dst : same type.

         M_BILINEAR :
            - Src : 8 or 16-bit.
            - Dst : 8, 16 or 32-bit.
            - Translation coefficients are not integer.

*******************************************************************************
2. Buffer management commands.
*******************************************************************************
2.0 Supported multi-band buffer.

   M_RGB3 +M_PLANAR
   M_RGB24+M_PLANAR
   M_BGR24+M_PACKED
   M_BGR32+M_PACKED
   M_RGB48+M_PLANAR
   M_RGB96+M_PLANAR

2.1 MbufBayer().
      Supported bayer decoding :
         M_BAYER_GB  M_BAYER_BG  M_BAYER_RG  M_BAYER_GR
         with or without M_WHITE_BALANCE_CALCULATE

      Restrictions :
         - Planar or packed buffer.
         - Src buffer : 1-band.
         - Dst buffer : 1 or 3-bands.
         - 8 or 16-bit buffer.
         - Src and Dst buffer : same pixel size.
         - SizeX and SizeY must be multiple of 2.

2.2 MbufClear().
      Restrictions :
         - Planar buffer.

      Specific packed buffer format supported :
         - M_BGR24+M_PACKED
         - M_BGR32+M_PACKED

2.3 MbufCopy().
      Restrictions :
         - Buffer in fast memory (M_FAST_MEMORY attribute) are not supported.
         - Src and Dst : same memory location.
         - Src and Dst : same pixel depth.
         - 1-band or 3-band planar buffer (M_RGB3 or M_RGB24+M_PLANAR only).

      Specific planar to packed and packed to planar copy :
         - M_RGB24+M_PLANAR / M_BGR32+M_PACKED

2.4 MbufCopyColor().

2.5 MbufCopyCond().

2.6 MbufCopyMask().
      Restrictions :
         - 1 or 3-band except the following src to dst combinations :
            * M_BGR24+M_PACKED to 1-bit 1-band buffer.
            * M_BGR24+M_PACKED to 1-bit 3-band buffer.
            * M_BGR32+M_PACKED to 1-bit 1-band buffer.
            * M_BGR32+M_PACKED to 1-bit 3-band buffer.


READ ME: SSE.txt

-------------------------------------------------------------------------------
                Matrox Imaging Library (7.0) SSE.txt Readme File
                                  June 28, 2001
    Copyright © 2000 by Matrox Electronic Systems Ltd. All rights reserved.
-------------------------------------------------------------------------------

The following file contains a list of all the functions that have been
optimized with SSE code. A supplementary section also suggests the data
alignment required to obtain the best performance with SSE when a buffer is
created with the MbufCreate2d()/MbufCreateColor() function. Another section
indicates how to enable/disable the use of SSE optimization by MIL.

Contents

1. Image processing commands.
2. Buffer management commands.
3. Measurements commands.
4. Pattern matching commands.
5. Blob analysis commands.
6. Graphics commands.
7. Data alignment.
8. Known difference with FPU equivalent instruction.

-------------------------------------------------------------------------------
Symbols used in the file
-------------------------------------------------------------------------------

Buffers:    Dst   : Destination
            Src   : Source
            Cnd   : Condition

Data type   UChar : unsigned char
            Char  : signed char
            UShort: unsigned short
            Short : signed short
            ULong : unsigned long
            Long  : signed long
            Float : float
            Bin   : binary

All the buffer bit and sign means all but floating point buffers.

*******************************************************************************
1. Image processing commands.
*******************************************************************************

1.1   MimArith ().

      1.1.1 Optimized versions:

         Dst     Src1     Src2
         ------  ------   ------
         UChar   UChar    UChar
         Char    Char     Char
         UChar   UShort   UChar
         Char    Short    Char
         UChar   UChar    UShort
         Char    Char     Short
         UShort  UChar    UChar
         Short   Char     Char
         UShort  UShort   UChar
         Short   Short    Char
         UShort  UChar    UShort
         Short   Char     Short
         UShort  UShort   UShort
         Short   Short    Short
         ULong   ULong    ULong
         Long    Long     Long

      1.1.2 Notes.

         -Saturation is not optimized for 32-bit src buffers.

         -M_MULT / M_MULT_CONST is not optimized for 32-bit src buffers.

      1.1.3 Options optimized.

         1.1.3.1 Operations where saturation is optimized.

                 M_ADD_CONST     M_ADD
                 M_SUB_CONST     M_SUB
                 M_CONST_SUB     M_MULT
                 M_MULT_CONST

         1.1.3.2 Operations without saturation (optimized).

                 M_AND           M_AND_CONST
                 M_OR            M_OR_CONST
                 M_XOR           M_XOR_CONST
                 M_NAND          M_NAND_CONST
                 M_NOR           M_NOR_CONST
                 M_XNOR          M_XNOR_CONST
                 M_MAX           M_MAX_CONST
                 M_MIN           M_MIN_CONST
                 M_NOT
                 M_NEG           M_ABS
                 M_MULT
                 M_SUB_ABS

          1.1.3.3 Operations not optimized.

                 M_PASS          M_CONST_PASS
                 M_DIV           M_DIV+M_FIXED_POINT
                 M_CONST_DIV     M_CONST_DIV+M_FIXED_POINT
                                 M_DIV_CONST+M_FIXED_POINT

          1.1.3.4 Particular cases optimized.

                 M_DIV_CONST (Only for positive constant and cases where
                              the source is 8-bit signed or unsigned.)

          1.1.3.5 Mixed sign cases optimized.

                 - Logical ( M_AND, M_NOR, etc. ) operations on mixed
                   types are optimized when the size of all buffers is
                   the same and with mix of 8 and 16-bit buffer when the
                   destination is 8-bit.

1.2   MimMorphic().

      M_ERODE, M_DILATE, M_THIN, M_THICK, M_HIT_OR_MISS, M_MATCH:

      M_GRAYSCALE operation:
         All the integer buffer depths and sign combinations are optimized with SSE.
         EXCEPTION: 32-bit buffer is not optimized.

      M_BINARY operation:
         Not optimized with SSE.

1.3   MimThin().

      M_GRAYSCALE operation:
         All the integer buffer depths and sign combinations are optimized with SSE.
         EXCEPTION: 32-bit buffer is not optimized.

      M_BINARY operation:
         Not optimized with SSE.

1.4   MimThick().

      M_GRAYSCALE operation:
         All the integer buffer depths and sign combinations are optimized with SSE.
         EXCEPTION: 32-bit buffer is not optimized.

      M_BINARY operation:
         Not optimized with SSE.

1.5   MimConvert().

      RGB_TO_L, BGR_TO_YUV16, RGB_TO_YUV16, RGB_TO_YUV24, YUV16_TO_BGR are optimized with
      SSE.

      No significant gains were found in other cases.

*******************************************************************************
2. Buffer management commands.
*******************************************************************************

2.1   MbufCopy()

      The following versions of the function are optimized with SSE:

      Dst      Src
      ------   ------

      (**via MilMemCopy**)
      Char     Char
      UChar    UChar
      Short    Short
      UShort   UShort
      Long     Long
      ULong    ULong
      Float    Float

      (**via SSE_Copy**)
      UChar    Float
      Char     Float
      UShort   Float
      Short    Float
      ULong    Float
      Long     Float

      Float    UChar
      Float    Char
      Float    UShort
      Float    Short
      Float    ULong
      Float    Long

      Note that in the case of float to long or float to unsigned long, the
      result can differ if the value to convert is outside the range of a long
      or unsigned long, respectively. This is due to the fact that a casting in
      C++ is done in a __int64 before it has been copied in the destination. In
      the other cases, the result can differ if the value to convert is outside
      the range of a long, even if you have an unsigned destination. This is
      done to optimize the speed.
      For all the copies that apply to the same type Src and Dst, the MbufCopy() is
      optimised only for buffers larger than 125 KB (or else no speed advantage).
      The buffers also must have a pitchbyte aligned on 16 bytes. The call to
      MilMemCopy is either done from the Ho level or via the DataExchange (some
      "conversions" having been integrated into the DataExchange, like 1-band 8bit to
      1-band 8 bit (CopyMONO8inMONO8 in rgb.cpp).

2.2   MbufBayer().

      Only the following versions of the function are optimized with SSE:

      Dst     Src
      ------  ------
      UChar   UChar
      UShort  UShort

      Src                 Dst                   Restriction
      ------              ------                -----------
      M_MONO8 (Bayer)     M_MONO8               DstSizeX > 10, DstSizeY > 3, SrcSizeX > 10, SrcSizeY > 3
      M_MONO8 (Bayer)     M_RGB24+M_PLANAR      DstSizeX > 10, DstSizeY > 3, SrcSizeX > 10, SrcSizeY > 3
      M_MONO8 (Bayer)     M_BGR32+M_PACKED      DstSizeX > 10, DstSizeY > 3, SrcSizeX > 10, SrcSizeY > 3
      M_MONO16 (Bayer)    M_RGB48+M_PLANAR      DstSizeX > 6, DstSizeY > 3, SrcSizeX > 6, SrcSizeY > 3
      M_MONO8 (Bayer)     M_YUV_YUYV            See table below.

      If the Src is M_MONO8 (Bayer) and the Dst is M_YUV16_YUYV, the restrictions
      depend on the SizeX and the AncestorOffsetX as follows:

      AncestorOffsetX     SizeX                 Restriction
      ---------------     -----                 -----------
      Odd                 Even                  DstSizeX > 10, DstSizeY > 3, SrcSizeX > 10, SrcSizeY > 3
      Odd                 Odd                   DstSizeX > 11, DstSizeY > 3, SrcSizeX > 11, SrcSizeY > 3
      Even                Even                  DstSizeX > 12, DstSizeY > 3, SrcSizeX > 12, SrcSizeY > 3
      Even                Odd                   DstSizeX > 11, DstSizeY > 3, SrcSizeX > 11, SrcSizeY > 3

      Finally, there are restrictions on the values of the white balance coefficients
      to respect in order to use the SSE-optimized version of the function:

      Dst                 Coefficient #0     Coefficient #1      Coefficient #2
      ------              --------------     --------------      --------------
      M_MONO8                  < 64            Don't care          Don't care
      M_RGB24+M_PLANAR         < 64               < 64                < 64
      M_BGR32+M_PACKED         < 64               < 64                < 64
      M_RGB48+M_PLANAR         < 64               < 64                < 64
      M_YUV_YUYV               < 64            Don't care          Don't care

      For other conversions, see MbufCopy() and MimConvert().

*******************************************************************************
3. Measurements commands.
*******************************************************************************

*******************************************************************************
4. Pattern matching commands.
*******************************************************************************

*******************************************************************************
5. Blob analysis commands.
*******************************************************************************

*******************************************************************************
6. Graphics commands.
*******************************************************************************

*******************************************************************************
7. Data alignment.
*******************************************************************************

When a MIL buffer is created using MbufCreate2d()/MbufCreateColor(), its
image row data (scanline) should be aligned on 32-byte boundaries to give
the best performance in conjunction with the SSE-enabled functions. When it
is not possible to align on 32-byte boundaries, then the buffer should at
least be aligned on xmmword (128-bit) or doubleword (32-bit) boundaries.
Note that, by using the MbufAlloc2d()/MbufAllocColor() function, you don't
have to worry about data alignment since in this case, MIL automatically
allocates the buffer with the proper alignment.

Moreover, 32 extra bytes should be available in reading at the beginning and
end of the buffer in order for the SSE-enabled algorithms to be able to
perform prefetching. The performance could decrease dramatically if those
extra pixels are not available. When they are available, then the define
M_SSE_ENABLED must be added to the attribute parameter at buffer creation
time (MbufCreate2d()/MbufCreateColor()) so that the SSE-enabled algorithms
know that prefetching can be performed on them. It is also possible to set
this flag after buffer creation time using the MbufControl(...M_FORMAT...)
command. In which case, the following syntax should appear:

MbufControl(MilImage,
            M_FORMAT,
            M_SSE_ENABLED|MbufInquire(MilImage, M_FORMAT, NULL));

(Note that this control is usually reserved for internal use only and thus
does not appear in the official documentation)

*******************************************************************************
8. Known difference with FPU equivalent instruction.
*******************************************************************************

We have denoted some difference in the conversion instructions from
float to int. Those are due to the fact that the conversion function in
MSDEV makes the conversion in a __int64 before copying it in the long.
The SSE instructions, however, make the conversion on 32-bit directly.
This gives exactly the same value for values that fit the range of a
long, but not for values that overflow the range of a long.


READ ME: sse2.txt

-------------------------------------------------------------------------------
                Matrox Imaging Library (7.0) SSE2.txt Readme File
                                  August 21, 2001
    Copyright © 2001 by Matrox Electronic Systems Ltd. All rights reserved.
-------------------------------------------------------------------------------

The following file contains a list of all the functions that have been
optimized with SSE2 code. A supplementary section also suggests the data
alignment required to obtain the best performance with SSE2 when a buffer is
created with the MbufCreate2d()/MbufCreateColor() function. Another section
indicates how to enable/disable the use of SSE2 optimization by MIL.

Contents

1. Image processing commands.
2. Buffer management commands.
3. Measurements commands.
4. Pattern matching commands.
5. Blob analysis commands.
6. Graphics commands.
7. Data alignment.
8. Known difference with FPU equivalent instruction.

-------------------------------------------------------------------------------
Symbols used in the file
-------------------------------------------------------------------------------

Buffers:    Dst   : Destination
            Src   : Source
            Cnd   : Condition

Data type   UChar : unsigned char
            Char  : signed char
            UShort: unsigned short
            Short : signed short
            ULong : unsigned long
            Long  : signed long
            Float : float
            Bin   : binary

All the buffer bit and sign means all but floating point buffers.

*******************************************************************************
1. Image processing commands.
*******************************************************************************

1.1   MimConvolve ().

      1.1.1 Optimized versions:

         Dst     Src     Kernel
         ------  ------  ------
         Char    Char    Char         (*) (128, -128, 128, -128)
         Char    Char    UChar        (*) (256,     , 256,     )
         Char    UChar   Char         (*) (128, -128, 128, -128)
         Char    UChar   UChar        (*) (256,     , 128,     )
         UChar   Char    Char         (*) (128, -128, 128, -128)
         UChar   Char    UChar        (*) (256,     , 256,     )
         UChar   UChar   Char         (*) (128, -128, 128, -128)
         UChar   UChar   UChar        (*) (256,     , 128,     )

         Char    Char    Char         (*) (128, -128, 128, -128)
         Char    Char    UChar        (*) (256,     , 256,     )
         Char    UChar   Char         (*) (128, -128, 128, -128)
         Char    UChar   UChar        (*) (256,     , 128,     )
         UChar   Char    Char         (*) (128, -128, 128, -128)
         UChar   Char    UChar        (*) (256,     , 256,     )
         UChar   UChar   Char         (*) (128, -128, 128, -128)
         UChar   UChar   UChar        (*) (256,     , 128,     )

         (*)  For these versions, the sum of the kernel values is verified to
              be below or equal (greater or equal for negative values) to the
              values specified in parenthesis. The first value is the sum of
              the positive values in the kernel, the second is the sum of the
              negative values in the kernel, the third is the sum of the
              positive values divided by the normalization factor, and the
              fourth is the sum of the negative values divided by the
              normalization factor. If these conditions are respected, the
              MMX version with a 16-bit accumulator is called.
              If these conditions are not respected and the number of elements
              in the kernel is smaller than 32025, the MMX function with a 32-bit
              accumulator is called. If the number of elements in the kernel is greater
              or equal to 32025 the non-MMX version is called.

              The internal accumulator contains the sum of the products of kernel
              elements by image values before normalization.

      1.1.2 Aditionnal restriction:

    Src and Dst buffer pitchbytes must be multiples of 16.

*******************************************************************************
2. Buffer management commands.
*******************************************************************************

*******************************************************************************
3. Measurements commands.
*******************************************************************************

*******************************************************************************
4. Pattern matching commands.
*******************************************************************************

*******************************************************************************
5. Blob analysis commands.
*******************************************************************************

*******************************************************************************
6. Graphics commands.
*******************************************************************************

*******************************************************************************
7. Data alignment.
*******************************************************************************

   When a MIL buffer is created using MbufCreate2d()/MbufCreateColor(), its
   image row data (scanline) should be aligned on 32-byte boundaries to give
   the best performance in conjunction with the SSE2-enabled functions. When it
   is not possible to align on 32-byte boundaries, then the buffer should at
   least be aligned on xmmword (128-bit) or doubleword (32-bit) boundaries.
   Note that, by using the MbufAlloc2d()/MbufAllocColor() function, you don't
   have to worry about data alignment since in this case, MIL automatically
   allocates the buffer with the proper alignment.

   Moreover, 32 extra bytes should be available in reading at the beginning and
   end of the buffer in order for the MMX-enabled algorithms to be able to
   perform prefetching. The performance could decrease dramatically if those
   extra pixels are not available. When they are available, then the define
   M_SSE2_ENABLED must be added to the attribute parameter at buffer creation
   time (MbufCreate2d()/MbufCreateColor()) so that the SSE2-enabled algorithms
   know that prefetching can be performed on them. It is also possible to set
   this flag after buffer creation time using the MbufControl(...M_FORMAT...)
   command. In which case, the following syntax should appear:

   MbufControl(MilImage,
               M_FORMAT,
               M_SSE2_ENABLED|MbufInquire(MilImage, M_FORMAT, NULL));

   (Note that this control is usually reserved for internal use only and thus
   does not appear in the official documentation.)

*******************************************************************************
8. Known difference with FPU equivalent instruction.
*******************************************************************************

   8.1 We have denoted some difference in the conversion instructions from
       float to int. Those are due to the fact that the conversion function in
       MSDEV makes the conversion in a __int64 before copying it in the long.
       The SSE2 instructions, however, make the conversion on 32-bit directly.
       This gives exactly the same value for values that fit the range of a
       long, but not for values that overflow the range of a long.