-------------------------------------------------------------------------------
                 Matrox Imaging Library (MIL) X Version 1911
                           Release Notes (whatsnew)
                                November 2019
            (c) Copyright Matrox Electronic Systems Ltd., 1992-2019.
-------------------------------------------------------------------------------
 
Main table of contents

Section 1 : Differences between MIL X Version 1911 and MIL 10 R2
Section 2 : Differences between MIL 10 R2 and MIL 10
Section 3 : What's new in MIL 10
Section 4 : Differences between MIL 9 R2 and MIL 9 Update 58
Section 5 : Differences between MIL 9 R2 and 9
Section 6 : Differences between MIL 9 and 8

Release notes are available for several MIL-related topics, such as what's new 
with the MIL processing modules. All release notes are accessible under the MIL
Release Notes folder of the Contents tab in the MIL help.

-------------------------------------------------------------------------------

-------------------------------------------------------------------------------
Section 1 : Differences between MIL X Version 1911 and MIL 10 R2

1. Overview.
2. What's included.
3. Known limitations and issues.
4. Supported versions of Microsoft Visual Studio.
5. Operating system support.

1. Overview.
   
   MIL X Version 1911 is a re-release of the original MIL 10 with the
   following enhancements and additions: 
   - A redesigned version of the Matrox Feature Browser.
   - GenICam 3.1 support for all relevant MIL systems.
   - Simpler and faster installation.
   - Updates and engineering fixes since MIL 10 R2 including
     MIL 10 Processing Pack 3. 
   - A change setup option to add a MIL system to an installation.
   
2. What's included.  
   
   MIL X Version 1911 includes the following updates and processing pack.
   - MIL 10 Update 07 (Matrox RadientPro CL).
   - MIL 10 Update 34 (GenTL Consumer).
   - MIL 10 Update 53 (Matrox Indio).
   - MIL 10 Update 56 (Matrox Supersight).
   - MIL 10 Update 57 (Matrox Orion HD).
   - MIL 10 Update 64 (USB3 Vision.)
   - MIL 10 Update 68 (Industrial Communications).
   - MIL 10 Update 72 (Matrox Iris GTR).
   - MIL 10 Update 73 (Matrox Radient eV-CXP).
   - MIL 10 Update 74 (Matrox Radient eV-CL).
   - MIL 10 Update 75 (Matrox Rapixo CXP).
   - MIL 10 Update 76 (Matrox Clarity UHD).
   - MIL 10 Update 80 (MIL CoPilot).
   - MIL 10 Update 82 (GigE Vision and Matrox Concord PoE ToE).
   - MIL 10 Update 86 (Matrox 4sight auxiliary I/Os)
   - MIL 10 Processing Pack 3 (*** See whatnew_processing for details ***). 

   MIL X Version 1911 includes engineering fixes for the following:
   - USB3 Vision (MIL 10 Update 64).
       - Fix 608.
         - Fixes issue with firmware updater being blank (although a 
           firmware update is required).
       - Fix 638.
         - Fixes issue regarding single grab acquisition.
   - Matrox Rapixo CXP (MIL 10 Update 75) and 
     Matrox Radient eV-CXP (MIL 10 Update 73) 
       - Fix 649 (only for MIL 10 Update 73).
         - Fixes issue where the on-board memory size was not reported correctly.
       - Fix 657.
         - Increases PowerOverCXP over current grace period during camera power up.
       - Fix 663.
         - Fixes issue with Matrox Feature Browser when displaying options for 
           M_GRAB_TRIGGER_OVERLAP.         
       - Fix 672.
         - Adds support for PFNC formats: Mono8s, Mono10p, Mono10Packed, Mono12p,
           Mono12Packed, Mono14p, BayerXX10p, BayerXX12p, BayerXX14p (where XX 
           can be 'BG', 'GB', 'GR', or 'RG').
   - Matrox Radient eV-CL (MIL 10 Update 74).
       - Fix 666.
         - Fixes issue when doing Gain and Offset correction and the width of 
           the buffer was not a factor of 64.
   - Matrox Clarity UHD (MIL 10 Update 76).
       - Fix 636.
         - Fixes issue when grabbing from a 1080i 10bits input into a YUV buffer.
       - Fix 643.
         - Fixes issue when a camera is connected after a MdigAlloc.
       - Fix 645.
         - Improves HDMI auto-detect to allow grabbing even if a DCF does not 
           exist. 
         - Allows grabbing from a HDMI 2.0 input without the 5V (pin 18) present.
   - Matrox Orion HD (MIL 10 Update 57).
       - Fix 667.
         - Fixes potential crash when shutting down the computer while a grab 
           is in progress.
       - Fix 605.
         - Fixes potential computer freeze when auto-detecting video inputs.
         - Fixes intermittent error message "Maximum data video input is reached"
           when allocating a specific DCF when no input signal is present.
       - Fix 603.
         - Fixes potential crash when grabbing simultaneously from multiple 
           threads.
       - Fix 585.
         - Fixes potential crash when allocating Matrox Orion HD from a Microsoft 
           service.
   - Matrox Morphis (MIL 10).
       - Fix 606 and 664.
         - Fixes potential crash while shutting down the PC. 
       - Fix 571.
         - Fixes issue when grabbing by fields (odd/even) and only one of the 
           fields was updated.
   - Matrox Morphis QxT (MIL 10).
       - Fix 558.
         - Fixes potential issue of driver not starting when using multiple 
           boards.
       - Fix 601.
         - Fixes potential crash on a system with more then 32 cores.      
   - Matrox Solios (MIL 10).
       - Fix 533.
         - Fixes issue with clallserial.dll where the COM ports were not 
           correctly identified.
       - Fix 552.
         - Fixes issue with COM ports when using more then 4 Matrox Solios 
           boards in one PC.
       - Fix 583.
         - Adds functionality to enable/disable PoCL.
       - Fix 594.
         - Fixes potential crash when opening/closing the COM port in a loop.
       - Fix 596.
         - Adds functionality to support analog slow-scan cameras.
         - Adds MsysInquire (M_COUPLING_MODE), which returns the analog 
           coupling mode M_AC or M_DC.
       - Fix 620.
         - Fixes issue with MdigControl(M_CHANNEL), which was always using the 
           default value of the DCF.
         - Fixes issue that the COM port was not properly freeing after an 
           MdigFree when using CLProtocol.
       - Fix 627.
         - Fixes issue with MdigControl(M_TIMER_TRIGGER_SOURCE) when 
           cascading multiple timers.
       - Fix 630.
         - Fixes issue where Windows COM "Port settings" tab was not present.
       - Fix 650.
         - Fixes issue with PoCL (Power-over CL) when certain cameras need 
           longer startup time.

3. Known limitations and issues.
   With Windows 10, when uninstalling MIL from the Settings - Apps & features, the 
   name of the program shown in the uninstall program window will be a random 
   string.
   
   The first time you run Matrox Feature Browser, a Windows Security Alert 
   dialog might be displayed. You should allow Matrox Feature Browser to open.
   
   When using the Recording Mode in Matrox Intellicam (with the Matrox GigE Vision 
   driver, the Matrox USB3 Vision driver, or a Matrox CXP board), you
   must modify a feature value in Matrox Feature Browser for the value to be 
   recorded.
   
   When using the timer selector in Matrox Intellicam (with a Matrox Camera Link
   board or a Matrox CXP board), value 'Timer 0' maps to the same value as 
   'Timer 1'. 
   
4. Supported versions of Microsoft Visual Studio.
   MIL supports the following versions of Microsoft Visual Studio:
   - Microsoft Visual Studio 2012.
   - Microsoft Visual Studio 2013.
   - Microsoft Visual Studio 2015.
   - Microsoft Visual Studio 2017.
   - Microsoft Visual Studio 2019.

   Most MIL examples are provided for the following versions:
   - Microsoft Visual Studio 2012.
   - Microsoft Visual Studio 2017.

   For Microsoft Visual Studio 2013 and 2015, use the 2012 version of the 
   MIL example. For Microsoft Visual Studio 2019, use the 2017 version of the 
   MIL example.

5. Operating system support.

   - Windows 7 32-bit with Service Pack 1
   - Windows 7 64-bit with Service Pack 1
   - Windows 10 Version 1607 to 1909 32-bit
   - Windows 10 Version 1607 to 1909 64-bit

   
-------------------------------------------------------------------------------

-------------------------------------------------------------------------------
Section 2 : Differences between MIL 10 R2 and MIL 10
 
1. Overview.
2. New hardware support.
3. Windows support.
4. Matrox Orion HD support.
5. GigE Vision support.


1. Overview.

   MIL 10 R2 includes all the improvements made to MIL 10 by Updates and
   Processing Packs since the initial release and adds support for Windows 10
   Version 1511.
   
   MIL 10 R2 includes the following updates and Processing Packs:

   - MIL 10 Processing Pack 1: See whatnew_processing for a description.
   
   - MIL 10 Update 6:    Update to MIL 10 Driver for Matrox Orion HD.
   - MIL 10 Update 10:   Revised/additional MIL-based DirectShow filters
                         (i.e., H.264 encode/decode).
   - MIL 10 Update 11:   Update to MIL 10 Driver for Matrox SuperSight.
   - MIL 10 Update 17:   Update to MIL 10 Driver for Matrox Radient eV-CXP.
   - MIL 10 Update 19:   Updated to MIL 10 Driver for USB3 Vision. Includes 
                         revised Matrox Capture Assistant utility.
   - MIL 10 Update 24:   Footage for 3D imaging examples. Requires MIL 10 
                         Processing Pack 1.
   - MIL 10 Update 25:   Update to GigE Vision driver. Adds native support for 
                         GigE Vision 2 devices and makes use of GenICam 3.
   - MIL 10 Update 27:   Adds MIL 10 Driver for Matrox Radient eV-CL.
   - MIL 10 Update 41:   Update to MIL 10 Driver for Matrox 4Sight.
   
   - MIL 10 Fix 536:     Fix for Matrox Radient eCL driver not starting or 
                         causing crash in some motherboards/PCs like the 
                         SuperMicro X9DAE (or any other in the X9 family), 
                         HP ProLiant ML350, or possibly any other system with a 
                         C600 series chipset. The root cause of the issue is 
                         BIOS mapping.
   - MIL 10 Fix 550:     Fix for Matrox Radient eV-CL and RadientPro CL drivers 
                         missed frames counter not working when in certain 
                         triggered modes and when using M_TRIGGER_FOR_FIRST_GRAB
                         in MdigProcess.
   - MIL 10 Fix 565:     Fix for Camera Link DLL installation issue.
   - MIL 10 Fix 566:     Adds missing file for GigE Vision.
   - MIL 10 Fix 569:     Revised MILConfig for updating CmStick dongle to 
                         firmware version 3.01, which addresses a device 
                         detection issue.
                                
   For more information on each update, consult their respective release note.

2. New hardware support.
      
   - Integrates support for USB3 Vision and Matrox Radient eV-CL.

3. Operating system support.

   - Windows XP 32-bit with Service Pack 3 
   - Windows 7 32-bit with Service Pack 1
   - Windows 7 64-bit with Service Pack 1
   - Windows 8.1 32-bit 
   - Windows 8.1 64-bit
   - Windows 10 Version 1511 (OS builds 10586) 32-bit
   - Windows 10 Version 1511 (OS builds 10586) 64-bit

   NOTE: MIL 10 R2 does NOT install on the initial release of Windows 10 (OS 
   builds 10240) as an essential driver will prevent the system from booting if
   Secure Boot is enabled in the BIOS.

4. Matrox Orion HD support.
   
   The default Windows 10 display driver for the Matrox Orion HD may prevent
   the Start button from working.

5. GigE Vision support.
   
   Link-Aggregation does not work on Windows 10 by default. To get it to work 
   requires applying Microsoft hot-fixes KB3140745 and KB3140743 as well as 
   installing a new network adaptor driver for the Intel® I350 or I210 family 
   of ethernet controllers (when available).  
 
-------------------------------------------------------------------------------

-------------------------------------------------------------------------------
Section 3 : What's new in MIL 10
 
1.  API changes in MIL.
2.  Matrox Profiler.
3.  Licenses.
4.  Installation.
5.  Distributed MIL.
6.  Operating systems information.


1.  API changes in MIL.
 
1.1 Changes in Mapp and Msys functions.
     All Mapp functions, and MsysAlloc(), have a new ContextAppId parameter to 
     support remote applications in DMIL monitoring mode. This parameter can be 
     set to M_DEFAULT. In C++, C# and VB.Net, overloaded functions with the old 
     prototype are provided to keep backward compatibility.
 
1.2 Some parameter data types have changed.
     The data type of certain parameters has changed from MIL_INT to MIL_INT64; 
     this can affect, for example, some MxxxControl and MxxxInquire functions 
     (and others). The changes will be transparent in most cases.
 
1.3 MappGetHookInfo(M_PARAM_TYPE) has been replaced.
     M_PARAM_TYPE in MappGetHookInfo() has been replaced with 
     M_PARAM_TYPE_INFO, which now returns more detailed information about the 
     parameter's type. Since the underlying structure has changed, the old 
     inquire (M_PARAM_TYPE) could not be maintained.
 
1.4 MbufControlRegion() has been renamed to MbufControlArea().
     
1.5 Compiler warnings for deprecated defines and functions.
     Deprecated defines and functions are now tagged as such and will generate
     a warning when used. These identifiers should no longer be used since they 
     might be removed in a future major MIL release (for example, MIL 11).
     
     Most deprecated warnings require a simple replacement. For example, 
     M_SETUP has been deprecated and is now equivalent to M_DEFAULT.
 
     From mil.h:
        #define M_SETUP                                       M_DEFAULT
        MIL_DEPRECATED(M_SETUP, 1000)
 
     For deprecated features, more work can be required (depending on the 
     feature). See the whatsnew_processing release note for more information on 
     deprecated features in the processing modules.
     
     As a temporary fix for warnings produced by deprecated defines and 
     functions, it is possible to disable the warnings by defining 
     M_MIL_WARN_ON_DEPRECATED as 0 before including mil.h; for example:
       #define M_MIL_WARN_ON_DEPRECATED 0
       #include <mil.h>
 
     Despite this temporary fix, code with deprecated defines and functions 
     might not compile in subsequent major releases of MIL (for example, 
     MIL 11).

     To turn off compiler warnings for deprecated defines and functions when 
     using MIL with C# or Visual Basic in a .NET managed environment, you must 
     modify the appropriate settings in the environment itself (e.g. disable 
     warnings caused by the Obsolete attribute). For more information, refer to 
     the "Building a .NET application using MIL" section of the "Using MIL with 
     .NET" chapter in the MIL Help.
  
1.6 MdigLut(), MdigReference() and MdigChannel() are now deprecated. They are 
    replaced by MdigControl().

1.7 A new I/O API has been developed for Matrox hardware.
     Any reference to the MIL 9 (old) API will produce compiler deprecated 
     warnings. A conversion table from the old API to the new API is available 
     in the drivers folder of the MIL Release Notes folder of the Contents tab 
     in the MIL help.

1.8 Changes to MIL traces.
     The trace log file generated is now a Matrox Profiler trace file 
     (.mtrace). Traces can be disabled with M_TRACE_LOG_DISABLE in MappAlloc().
     It is now possible to insert custom traces in the trace file using the new 
     MappTrace() function.  
     MappInquire/MappControl(M_TRACE):     
        M_PRINT_DISABLE/M_PRINT_ENABLE have been replaced by 
           M_LOG_DISABLE/M_LOG_ENABLE.
        MappInquire(M_TRACE) can also return M_DEFAULT.
        MappControl(M_TRACE) accepts M_DEFAULT.
        See the MIL Reference for details.
     

2  Matrox Profiler.
     A new tool called Matrox Profiler has been developed. It allows you to 
     graphically and interactively analyze MIL traces, including (but not 
     limited to) MIL functions, MIL events, and MIL errors.

      
3  Licenses.
    The LicenseManager tool has been integrated into MilConfig.
      MILConfig now has more pages related to licenses:
      Status  : Shows the list of unlocked packages, in total and per 
                fingerprint.
      Generate: Generates a Lock Code for software license keys.
      Activate: Activates software License keys.
      Upgrade : Upgrades MIL 9 run-time licenses to MIL 10.
 
      See the licenses sections in the MIL User Guide for more information.
  
    
4  Installation.
    Under Windows, it is now possible to install the 32-bit version of MIL on a 
    64-bit OS. This setup only supports the Host system and it is not possible 
    to use frame grabbers. The 32-bit version of MIL can coexist with the 
    64-bit version of MIL.
 
   
5  Distributed MIL.
 
5.1   Distributed MIL, monitoring mode.
       This new mode allows an application to publish MIL objects (MIL_IDs). 
       Other applications can then connect across a network and access these 
       objects. The objects can be published in read-only or read-write modes. 
       See the Distributed MIL sections of the MIL User guide for more 
       information.
    
5.2   Support for mixed cluster: Windows/Linux, 32-bit/64-bit.
       Distributed MIL now supports connections between Windows and Linux and 
       between 32-bit and 64-bit applications.
       
5.3   DMIL Cluster Manager.
       The DMIL Cluster manager is a tool used to arbitrate the allocation of 
       MIL_IDs between different processes. It is mostly useful with the new 
       Monitoring mode where it plays a role similar to a DHCP server on a 
       network by dynamically allocating unique IDs to networked applications 
       upon request.

       
6. Operating systems information.

   - MIL 10 supports:

     Windows:
        XP 32-bit edition with Service Pack 3
        Windows 7 32-bit edition with Service Pack 1
        Windows 7 64-bit edition with Service Pack 1
        Windows 8 32-bit edition
        Windows 8 64-bit edition

     Linux:
        See the MilLinux release note for a list of supported distributions.

-------------------------------------------------------------------------------

-------------------------------------------------------------------------------
Section 4 : Differences between MIL 9 R2 and MIL 9 Update 58

1. Overview.
2. Mseq API function definition
   2.1 MseqAlloc
   2.2 MseqControl
   2.3 MseqDefine   
   2.4 MseqFeed
   2.5 MseqFree
   2.6 MseqGetHookInfo
   2.7 MseqHookFunction
   2.8 MseqInquire
   2.9 MseqProcess

3. Examples
4. Operating system information


1. Overview.

   The main goal for MIL 9 Update 58 is to add a new module called Mseq, 
   which offers a user-friendly interface for H.264 compression.

2. Mseq API function definition

   2.1 MseqAlloc

   - Synopsis: Allocate a sequence context.

   - Syntax:   MIL_ID MseqAlloc( MIL_ID SystemID,
                                 MIL_INT64 SequenceType,
                                 MIL_INT64 Operation,
                                 MIL_UINT32 OutputFormat,
                                 MIL_INT64 InitFlag,
                                 MIL_ID* ContextSeqIdPtr)

   - Parameters:
      * SystemID:          Specifies the identifier of the system on which to 
                           allocate the sequence context. This parameter must 
                           be given a valid system identifier.

      * SequenceType:      Specifies the type of sequence to allocate:
                           Values:
                                    M_DEFAULT   - Specifies the sequence as a 
                                                  context in which the related 
                                                  operation should beperformed.

      * Operation:         Specifies the operation to be performed by the 
                           context.
                           Values:
                           M_SEQ_COMPRESS    - Specifies that the context 
                                               should encode the buffers as 
                                               they are fed.
                                                        
                           M_SEQ_DECOMPRESS  - Specifies that the context 
                                               should decode the source and 
                                               notify by a hook function that 
                                               the buffer is ready.

      * OutputFormat:      Specifies the data format to be generated.
                           Values:
                           M_DEFAULT   - Specifies the type of data to be 
                                         generated by the context

      * InitFlag:          Specifies the engine to be used for the operation.
                           Values:
                           M_DEFAULT   - Specifies to use the default engine
                                         (M_QSV)

                           M_QSV +     - Specifies that the engine to be used 
                                         is the Intel Hardware acceleration 
                                         built in 2nd and 3rd generation Intel® 
                                         Core™ processors.
                          Can be combines with either:
                                          M_HARDWARE  - Force the engine to be 
                                                        hardware accelerated
                                          M_SOFTWARE  - Force the engine to use 
                                                        the software 
                                                        implementation

      * ContextSeqIdPtr:  Specifies the address of the variable in which to 
                          write the sequence context identifier. Since 
                          MseqAlloc() also returns the sequence context 
                          identifier, you can set this parameter to M_NULL. If 
                          allocation fails, M_NULL is written as the 
                          identifier.


   2.2 MseqControl

   - Synopsis: Control the context operation.

   - Syntax:   void MseqControl( MIL_ID ContextSeqId,
                                 MIL_INT SequenceIndex,
                                 MIL_INT64 ControlType,
                                 MIL_DOUBLE ControlValue);

   - Parameters:
      * ContextSeqId:   Specifies the identifier of the sequence context.

      * SequenceIndex:  Specifies the context or the index of the container
                           Values:
                              M_SEQ_SRC(n):  - Specifies the source container 
                                               at index 'n', where n must be 
                                               between 0 to 32.
                              M_SEQ_DEST(n): - Specifies the destination 
                                               container at index 'n', where n 
                                               must be between 0 to 32.
                              M_ALL:         - Specifies to control all sources 
                                               and destinations at once.
                              M_CONTEXT:     - Specifies that the control will 
                                               affect the context itself
      
      * ControlType:    Specifies the sequence context setting to control.
                        See the Parameter associations section for possible 
                        values that can be specified.

      * ControlValue:   Specifies the value to assign to the sequence context 
                        setting. See the Parameter associations section for 
                        possible values that can be specified.

   - Parameter Associations:
      Control types:
         Control Values:

      * M_BUFFER_SAMPLE:         Sets the information concerning the input 
                                 buffer format to validate operation 
                                 parameters.
         - MIL buffer identifier:   Specifies the identifier of an M_IMAGE 
                                    buffer used as input for the compression.

      * M_STREAM_BIT_RATE:       Sets the expected encoded stream bitrate.
         - Value(MIL_INT):          Specifies the expected encoded stream 
                                    bitrate (in kbps).

      * M_STREAM_BIT_RATE_MAX:   Sets the maximum allowed encoded stream 
                                 bitrate.
         - Value(MIL_INT):          Specifies the maximum encoded stream bit 
                                    rate (in kbps).

      * M_STREAM_BIT_RATE_MODE:  Sets the bitrate control method.
         - M_VARIABLE:              Specifies that the engine uses a variable 
                                    bitrate control algorithm.
         - M_CONSTANT:              Specifies that the engine uses a constant 
                                    bitrate control algorithm.

      * M_STREAM_FRAME_RATE:     Sets the frame rate of the generated output 
                                 stream.
         - Value(MIL_DOUBLE):       Specifies the value for the output stream 
                                    framerate. For example if you are using an 
                                    NTSC-M(23.97) framerate use the following 
                                    equation to set the exact framerate:
                                    24 * (1000/1001)
                                                                        
      * M_STREAM_GROUP_OF_PICTURE_SIZE:      Sets the I-frame interval, which 
                                             is also known as the Group of 
                                             Picture size.
         - Value(MIL_INT):          Specifies the distance between 2 I-frames 
                                    in the encoded stream.

      * M_STREAM_LEVEL:          Sets the H.264 encoding level.
         - M_LEVEL_1:
         - M_LEVEL_1B:
         - M_LEVEL_1_1:
         - M_LEVEL_1_2:
         - M_LEVEL_1_3:
         - M_LEVEL_2:
         - M_LEVEL_2_1:
         - M_LEVEL_2_2:
         - M_LEVEL_3:
         - M_LEVEL_3_1:
         - M_LEVEL_3_2:
         - M_LEVEL_4:
         - M_LEVEL_4_1:
         - M_LEVEL_4_2:
         - M_LEVEL_5:
         - M_LEVEL_5_1:             Specifies the level that the encoding 
                                    engine should use.

      * M_STREAM_PROFILE:     Sets the H.264 encoding profile.
         - M_PROFILE_BASELINE:
         - M_PROFILE_MAIN:
         - M_PROFILE_HIGH:          Specifies the profile that the encoding 
                                    engine should use.

      * M_STREAM_QUALITY:     Sets the H.264 encoding engine priority.
         - 0 to 100:                Specifies the speed/quality priority where 
                                    0 is for best speed and 100 for best 
                                    quality.
                                    
      * M_SETTING_AUTO_ADJUSTMENT:  Sets the switch to ignore an error if the 
                                    engine managed to fix the conflict between 
                                    parameters.
         - M_ENABLE:    Conflict will be solved automaticaly and no error will 
                        be raised.
         - M_DISABLE:   An error will be raised if a conflict occurs between 
                        parameters.

   2.3 MseqDefine

   - Synopsis: Associate an input or an output container to the specific 
               sequence context or control parameters of an input or output 
               container inside a specific sequence context.

   - Syntax:   void MseqDefine(  MIL_ID ContextSeqId,
                                 MIL_INT SequenceIndex,
                                 MIL_INT64 SequenceType,
                                 const void *Param1Ptr,
                                 MIL_DOUBLE Param2);

   - Parameters:
      * ContextSeqId:      Specifies the identifier of the sequence context.

      * SequenceIndex:     Specifies the container to access.
                           Values:
                              M_SEQ_SRC(n):  - Specifies the source container 
                                               at index 'n', where n must be 
                                               between 0 to 32.
                              M_SEQ_DEST(n): - Specifies the destination 
                                               container at index 'n', where n 
                                               must be between 0 to 32.

      * SequenceType:
         - M_FILE:         Specifies that the container is a file.
                           Param1Ptr Data Type:       MIL_CONST_TEXT_PTR

      * Param1Ptr:
         - When specifying SequenceType as M_FILE:
            * Value:                Specifies the file path of the file to be 
                                    used.

      * Param2:
         - M_FILE_FORMAT_H264:   Generates a raw H.264 Elementary Stream.
         - M_FILE_FORMAT_AVI:    Generates a AVI containing the encoded stream.
         - M_FILE_FORMAT_MP4:    Generates a MP4 containing the encoded stream.

   2.4 MseqFeed

   - Synopsis: Enqueue a buffer for the context operation. The operation can 
               wait for the buffer to be queued if the operation context's FIFO 
               is full.

   - Syntax:   void MseqFeed( MIL_ID ContextSeqId,
                              MIL_ID ImageBufId,
                              MIL_INT64 InitFlag)

   - Parameters:
      * ContextSeqId:   Specifies the identifier of the sequence context.

      * ImageBufId:  Specifies the identifier of the buffer to add to the queue 
                     for encoding.

      * InitFlag:    Reserved for future use. Should be set to M_DEFAULT.


   2.5 MseqFree

   - Synopsis: Free a sequence context.

   - Syntax:   void MseqFree( MIL_ID ContextSeqId)

   - Parameters:
      * ContextSeqId:    Specifies the sequence identifier to be freed.


   2.6 MseqGetHookInfo

   - Synopsis: Retrieves information about the sequence hook event.

   - Syntax:   void MseqGetHookInfo(   MIL_ID EventID,
                                       MIL_INT InfoType,
                                       void* UserVarPtr )

   - Parameters:
      * EventID:     Specifies the sequence event identifier received by the 
                     hook-handler function to be called. MseqGetHookInfo() 
                     should only be called within the scope of a sequence hook-
                     handler identification.

      * InfoType:    Specifies a combination of two values: the event type and 
                     the type of information about the event to return.
                     See the Parameter associations section for possible values 
                     that can be specified.

      * UserVarPtr:  Accepts the address of one of the following (see the 
                     Parameter associations section for specifics on which is 
                     expected):
                        - MIL_ID
                     Specifies the address in which to write the requested 
                     information. See the Parameter associations section for 
                     possible values that can be returned.

   - Parameter Associations:
      Control types:
         Control Values:

      * M_MODIFIED_BUFFER+:   Retrieves information about a modified buffer 
                              type of event. This event only occurs if the 
                              hook-handler function was hooked using 
                              MseqProcess().
         -UserVarPtr data type info:   MIL_ID

      * Combination constants for M_MODIFIED_BUFFER
         You must add one of the following values to the above-mentioned value 
         to specify the type of information to return.
         - M_BUFFER_ID: Returns the MIL identifier of the buffer modified by 
         MseqProcess().


   2.7 MseqHookFunction

   - Synopsis: Hook a function to a sequence context event.

   - Syntax:   void MseqHookFunction(  MIL_ID ContextSeqId,
                                       MIL_INT HookType,
                                       MIL_SEQ_HOOK_FUNCTION_PTR HookHandlePtr,
                                       void* UserDataPtr )

   - Parameters:
      * ContextSeqId:   Specifies the identifier of the sequence context.

      * HookType:    Specifies the sequence context event to which to hook the 
                     function.
         - M_FRAME_END+:   Hook on every frame processed.

         - Combination constant for any of the possible values of the HookType 
           parameter. You can add the following value to the above-mentioned 
           values to specify to unhook a hooked function.
            * M_UNHOOK:       Unhooks a hooked function.

      * HookHandlePtr:  Specifies a pointer to the hook function to be called 
                        with the following prototype.
                        MIL_INT MFTYPE HookHandlePtr( MIL_INT HookType, 
                                                      MIL_ID EventId, 
                                                      void *UserDataPtr ) 
                        Parameters: 
                           HookType
                              Type of sequence event hooked. 

                           EventId
                              Event identifier to pass to MseqGetHookInfo() 
                              when inquiring about the hooked event. 

                           UserDataPtr
                              Specifies the user data pointer passed to 
                              MseqHookFunction(). 

      * UserDataPtr:    Specifies the address of the user data that you want to 
                        make available to the hook-handler function. This 
                        address is passed to the hook-handler function, through 
                        its UserDataPtr parameter, when the specified event 
                        occurs. Set this parameter to M_NULL if not used. 


   2.8 MseqInquire

   - Synopsis: Inquire about a sequence context setting.

   - Syntax:   MIL_INT64 MseqInquire(  MIL_ID ContextSeqId,
                                       MIL_INT SequenceIndex,
                                       MIL_INT64 InquireType,
                                       void* UserVarPtr )

   - Parameters:
      * ContextSeqId:   Specifies the identifier of the sequence context.

      * SequenceIndex:  Specifies the context or the index of the container
                           Values:
                           M_SEQ_SRC(n):  - Specifies the source container at 
                                            index 'n', where n must be between 
                                            0 to 32.
                           M_SEQ_DEST(n): - Specifies the destination 
                                            container at index 'n', where n 
                                            must be between 0 to 32.
                           M_CONTEXT:     - Specifies to inquire the context 
                                            itself
      
      * InquireType:    Specifies the sequence context setting to inquire.

      * UserVarPtr:  Accepts the address of one of the following:
                           - MIL_INT64
                           - MIL_DOUBLE
                        See the Parameter associations section for possible 
                        values that can be returned.

   - Parameter Associations:
      Control types:
         Control Values:

      * M_CODEC_TYPE:            Returns the type of codec used.
         - M_QSV + M_HARDWARE:      Specifies that the sequence context uses 
                                    Intel QSV hardware acceleration.
         - M_QSV + M_SOFTWARE:      Specifies that the sequence context uses 
                                    Intel software implementation.

      * M_STREAM_BIT_RATE:       Returns the desired encoded stream bitrate.
         - UserVarPtr data type:     MIL_INT64

      * M_STREAM_BIT_RATE_MAX:   Returns the maximum allowed encoded stream 
                                 bitrate.
         - UserVarPtr data type:     MIL_INT64

      * M_STREAM_BIT_RATE_MODE:  Returns the bitrate control method.
         - M_VARIABLE:              Specifies that the engine will use a 
                                    variable bitrate control algorithm.
         - M_CONSTANT:              Specifies that the engine will use a 
                                    constant bitrate control algorithm.

      * M_STREAM_FRAME_RATE:     Returns the frame rate of the generated output 
                                 stream.
         - UserVarPtr data type:     MIL_DOUBLE

      * M_STREAM_GROUP_OF_PICTURE_SIZE:   Returns the I-frame interval, which 
                                          is also known as the Group of Picture 
                                          size.
         - UserVarPtr data type:     MIL_INT64

      * M_STREAM_LEVEL:          Returns the H.264 encoding level.
         - M_LEVEL_1:
         - M_LEVEL_1B:
         - M_LEVEL_1_1:
         - M_LEVEL_1_2:
         - M_LEVEL_1_3:
         - M_LEVEL_2:
         - M_LEVEL_2_1:
         - M_LEVEL_2_2:
         - M_LEVEL_3:
         - M_LEVEL_3_1:
         - M_LEVEL_3_2:
         - M_LEVEL_4:
         - M_LEVEL_4_1:
         - M_LEVEL_4_2:
         - M_LEVEL_5:
         - M_LEVEL_5_1:             Specifies the level that the encoding 
                                    engine will use.

      * M_STREAM_PROFILE:     Returns the H.264 encoding profile.
         - M_PROFILE_BASELINE:
         - M_PROFILE_MAIN:
         - M_PROFILE_HIGH:       Specifies the profile that the encoding engine 
                                 should use.

      * M_STREAM_QUALITY:        Returns the H.264 encoding engine priority.
         - 0 to 100:                Specifies the speed/quality priority where 
                                    0 is for best speed and 100 for best 
                                    quality.
                                    
      * M_SETTING_AUTO_ADJUSTMENT:  Returns the state of the switch for the 
                                    error.
         - M_ENABLE:    It means that a conflict would be resolved silently if 
                        detected.
         - M_DISABLE:   It means that a conflict would not be resolved and that 
                        an error will be raised if a conflict is found.

      * M_TYPE:      Returns the type of container at the specified index.
         - M_FILE:         The container is a file.
         - M_BUFFER_LIST:  The container is a list of pre allocated buffer.
         - M_USER_FEED:    The source is waiting for bufer to be fed using 
                           MseqFeed().
         - M_USER_HOOK:    The destination returns buffer using the registered
                           hook function.

      * M_FILE_FORMAT:  Returns the format of the file specified in 
                        MseqDefine().
         - M_FILE_FORMAT_H264:   Means the file is a raw H.264 Elementary 
                                 Stream.
         - M_FILE_FORMAT_AVI:    Means the file is an AVI containing the 
                                 encoded stream.
         - M_FILE_FORMAT_MP4:    Means the file is an MP4 containing the 
                                 encoded stream.

      * M_STREAM_FILE_NAME_SIZE: Returns the length of the file name at the 
                                 specified index.

      * M_STREAM_FILE_NAME:   Returns the file name specified in MseqDefine().
         - UserVarPtr need to be an array of MIL_TEXT_CHAR with a minimal 
           length available with a MseqInquire(M_STREAM_FILE_NAME_SIZE).


   2.9 MseqProcess

   - Synopsis:    Starts the operation engine.

   - Syntax:   void MseqProcess( MIL_ID ContextSeqId,
                                 MIL_INT64 Command,
                                 MIL_INT64 CommandFlag);

   - Parameters:
      * ContextSeqId:   Specifies the identifier of the sequence context.

      * Command:        Specifies the type of operation to perform.
         - M_START:        Starts the operation context.
         - M_STOP:         Stops the operation context.

      * CommandFlag:    Allows you to provide more information about the 
                        synchronization of the context operation.
         - For use with an M_START operation:
            * M_ASYNCHRONOUS:    Specifies that the operation context will run 
                                 in a separate thread. The MseqProcess call 
                                 will return immediately. If no source is set 
                                 in the context, use MseqFeed to push buffers 
                                 to the engine so it can process them.
            * M_SYNCHRONOUS:     Specifies that the operation context will run 
                                 the entire process in the function. That means 
                                 it is required to have a source defined before 
                                 calling MseqProcess().

         - For use with an M_STOP operation:
            * M_WAIT:            Specifies that the operation context will wait 
                                 for all queued operations to finish before 
                                 returning.


3. Examples

   - MseqProcess.cpp:   This example shows how to feed buffers asynchronously 
                        to the sequence context example. In this example, we 
                        set the sequence context parameters and start the 
                        sequence context operation (MseqProcess). Once started, 
                        we grab using MdigProcess, and in the callback hook 
                        function, we use MseqFeed to encode each frame 
                        asynchronously.
                     
                        The example is in the MIL example directory.
            
            
4. Operating system information

   - MIL 9 update 58 supports:

     Windows:
        XP 32-bit edition (Software encoding only)
        XP 64-bit edition (Software encoding only)
        Vista 32-bit edition
        Vista 64-bit edition
        Windows 7 32-bit edition
        Windows 7 64-bit edition

     Linux:
        Not supported.

   - Mseq module is not supported under DMIL.

   - H.264 video encoding is optimized for Intel CPUs and may be subject to 
     performance and stability issues when used with other CPUs.

   - Note:  To be able to use the Intel hardware acceleration built in 2nd and 
            3rd generation Intel® Core™ processors, you must run the complete 
            installer for the Intel Graphic adapter. It can be found at
            http://downloadcenter.intel.com/Default.aspx

        
-------------------------------------------------------------------------------

-------------------------------------------------------------------------------
Section 5 : Differences between MIL 9 R2 and 9

1. Overview.
2. Support for new Matrox hardware.
   2.1 Frame Grabbers.
3. Operating system information.
4. IEEE 1394 IIDC under Windows 7.

1. Overview.

   The main goal of MIL 9 Release 2 is to include all the improvements done 
   to MIL 9 through Updates and Processing Packs since its release and to add 
   support for Windows 7.
   
   MIL 9 Release 2 includes the following updates and Processing Packs:
   
   MIL 9 Update 1:   Adds MIL support for .NET languages (i.e., Visual Basic® 
                       and C#).
   MIL 9 Update 2:   Adds MIL 9 Driver for Matrox Morphis Evo.
   MIL 9 Update 4:   Update to MIL 9 Driver for Matrox Solios. Adds support 
                       for Matrox Solios em/eV-CL.
   MIL 9 Update 10:  Update to MILConfig (i.e., auto-update and 
                       troubleshooting) and GigE Vision camera discovery 
                       service.
   MIL 9 Update 11:  Updated documentation for MIL 9 Processing Pack 1.
   MIL 9 Update 14:  Update to GPU Processing. Replaces MIL 9 Update 3.
   MIL 9 Update 15:  Update to MIL 9 Driver for Vio. Adds support for 
                       Matrox Vio with DVI-A connectivity.
   MIL 9 Update 16:  Update to display functionality. Introduces new 
                       exclusive display mode.
   MIL 9 Update 17:  Update to driver for Matrox Morphis (e)Dual/(e)Quad.
   MIL 9 Update 20:  Compatibility fix for add-in boards in Core i7 and Xeon 
                       3500/5500 series based systems.
   MIL 9 Update 25:  Updated documentation for MIL 9 Processing Pack 1. 
                       (fixes a problem in update 11 with ActiveMIL 
                       documentation)
   
   MIL 9 Processing Pack 1: Adds 3D calibration and reconstruction tools, 
                              color analysis tools, font-less String Reader 
                              context for ANPR applications,
                              super-resolution tool and multi-processing speed 
                              optimizations. Includes other additions, 
                              enhancements and fixes.
                              
   For more information on each update, consult their respective readmes.


2. Support for new Matrox hardware.

   2.1 Frame Grabbers.
   
   - Adds support for the Morphis Evo and the Solios eV/CL.

3. Operating system information.

   - MIL 9 supports:

     Windows:
        XP 32-bit edition
        Vista 32-bit edition
        XP 64-bit edition
        Vista 64-bit edition
        Windows 7 32-bit edition
        Windows 7 64-bit edition

     Linux:
        See the MILLinux readme file for supported versions of Linux.

4. IEEE 1394 IIDC under Windows 7.
   
   - The MIL driver for IEEE 1394 IIDC requires you to manually change the
     IEEE 1394 Bus host controller to "Legacy" in order  to operate under
     Windows 7.
   
   Using Windows Device Manager, select IEEE 1394 Bus host controllers, 
   1394 OHCI Compliant Host Controller, Update Driver Software,
   Browse my computer for driver software, Let me pick from a list of
   device drivers on my computer and choose "1394 OHCI Compliant Host
   Controller (Legacy)".


-------------------------------------------------------------------------------

-------------------------------------------------------------------------------
Section 6 : Differences between MIL 9 and 8

1. Overview.
2. Support for new Matrox hardware.
   2.1 Frame Grabbers.
   2.2 Stand-alone Vision Systems.
   2.3 Other non-Matrox hardware.
3. Operating system information.
4. Development tools information.
5. Unicode support.
6. API changes.
7. Directory structure.
8. Licenses.
9. Processing functions




1. Overview.

   The main goal of MIL 9 is to include all the improvements done to MIL 8
   through Updates and Processing Packs and to add support for Windows Vista 
   and Linux. It also supports many new features such as Distributed MIL, 
   Unicode and much more.


2. Support for new Matrox hardware.

   2.1 Frame Grabbers.

   - Support for Matrox Concord family has been added. This includes:
     - Matrox Concord GE/GX (GigE Vision)
     - Matrox concord FE/FX (IEEE 1394 IIDC)

   - Support for new board in Matrox Morphis family has been added. This 
     includes:
     - Matrox Morphis QxT

   - Support for new board in Matrox Solios family has been added. This 
     includes:
     - Matrox Solios GigE

   Note:
   Please refer to specific board readme file for details on what's new for a 
   particular board since MIL 8. For example, if you look in solios.txt you 
   will know that MIL 9 now supports new Matrox Solios board with Processing 
   FPGA.

   2.2 Stand-alone Vision Systems.

   - Support for Matrox Nexis has been added.

   2.3 Other non-Matrox hardware.

   - MIL 9 includes a Gigevision drivers that support a variety of Gigabit 
     Ethernet network interface cards (NICs).

   - MIL 9 also includes processing accelerator through GPGPU.
     We support a variety of GPU.


3. Operating system information.

   - MIL 9 supports:

     Windows:
        XP 32-bit edition
        Vista 32-bit edition
        XP 64-bit edition
        Vista 64-bit edition

     Linux:
        Red Hat Enterprise 5 32-bit
        Red Hat Enterprise 5 64-bit
        Suse Enterprise 10 32-bit
        Suse Enterprise 10 64-bit
        Ubuntu 84 LTS 32-bit
        Ubuntu 84 LTS 64-bit


4. Development tools information.

   MIL supports the following development environments:

   Windows:
   - Visual C++ .NET 2003
   - Visual C++ 2005
   - Visual C++ 2008

   Linux:
   - GNU Compiler Collection (GCC)

   Note: For info on development tools supported by ActiveMIL , see ActiveMIL 
         readme


5. Unicode support.

   - MIL 9 API now supports Unicode string in most
     functions, for example: MbufSave, MdigAlloc, etc
   - Note that MgraText doesn't support Unicode for the moment.
   - Under Windows the Unicode functions are UTF-16. Under Linux, UTF-8.
   - The MIL API will expect strings to be of the right type according
     to the Visual Studio project settings.


6. API changes.

   The API has been adapted to be portable between:
      32-bit / 64-bit
      Unicode / ASCII
      Windows / Linux

   All changes are transparent for programs being converted from MIL 8
   to MIL 9 32-bit Windows. Porting to 64-bit or Linux will require some
   changes to the code to use new MIL types such as MIL_INT.
   See MIL User Guide for details.


7. Directory structure.

   In order to be compatible with Vista UAC (User access control) the MIL 
   examples are no longer installed under \program files\matrox imaging by 
   default but in the public document folder. These folders are accessible 
   through a link in the MIL Control Center (located on your desktop)


8. Licenses.

   New development and run-time license required (MIL 8 licenses cannot be used 
   with MIL 9).
   Development license enables use of Matrox Inspector 9.
   Automatic 30-day temporary license replaced by Matrox-issued 30-day 
   evaluation licensed.
   New one-time 30-day hardware resident run-time license.
   Run-time license can now be stored on ID dongle.
   MIL 9 behaves like MIL-Lite 9 run-time when no license present but Matrox 
   hardware is present.
   MIL-Lite 9 gives access to select image processing functions (Mim...).
   For more info, refer to Chapter 25: Distribution and licensing of the 
   MIL User Guide.

9. Processing functions
   The following Mim functions are now available with Mil-Lite:

      MimArith  
      MimArithMultiple  
      MimShift  
      MimBinarize  
      MimClip  
      MimConvert  
      MimFlip  
      MimHistogram  
      MimHistogramEqualize  
      MimLutMap  
      MimResize  
      MimFindExtreme  
      MimDeinterlace  
      MimAlloc  
      MimAllocResult  
      MimControl  
      MimInquire  
      MimFree  
      MimGetResult  
      MimGetResult1D