------Matrox Imaging Library (MIL) 9.0 Update 58. Release Notes (Whatsnew) September 2012 (c) Copyright Matrox Electronic Systems Ltd., 1992-2012. ------

For more information and what's new in processing, display, drivers, Linux, ActiveMIL, and all MIL 9 updates, consult their respective readme files.

Main table of contents

Section 1 : What's new in Mil 9.0 Update 58 Section 2 : What's new in MIL 9.0 Release 2. Section 3 : What's new in MIL 9.0. Section 4 : Differences between MIL Lite 8.0 and 7.5 Section 5 : Differences between MIL Lite 7.5 and 7.1 Section 6 : Differences between MIL Lite 7.1 and 7.0 ------

------Section 1: What's new in MIL 9.0 Update 58.

Table of Contents for Section 1

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. information

1. Overview.

The main goal for MIL 9.0 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 be performed.

* 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.0 * (1000.0/1001.0) * 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.

Combination constant for M_STREAM_FRAME_RATE; * M_VARIABLE: Specifies that the timestamp used for encoding will be inquired on each call to MseqFeed(). Plus, when closing the file, it will specify the average frame rate (AVI only).

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.0 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

- 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 2: What's new in MIL 9.0 Release 2.

Table of Contents for Section 2

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.0 Release 2 is to include all the improvements done to MIL 9.0 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.0 Update 1: Adds MIL support for .NET languages (i.e., Visual Basic® and C#). MIL 9.0 Update 2: Adds MIL 9.0 Driver for Matrox Morphis Evo. MIL 9.0 Update 4: Update to MIL 9.0 Driver for Matrox Solios. Adds support for Matrox Solios em/eV-CL. MIL 9.0 Update 10: Update to MILConfig (i.e., auto-update and troubleshooting) and GigE Vision camera discovery service MIL 9.0 Update 11: Updated documentation for MIL 9 Processing Pack 1. MIL 9.0 Update 14: Update to GPU Processing. Replaces MIL 9.0 Update 3. MIL 9.0 Update 15: Update to MIL 9.0 Driver for Vio. Adds support for Matrox Vio with DVI-A connectivity. MIL 9.0 Update 16: Update to display functionality. Introduces new exclusive display mode. MIL 9.0 Update 17: Update to driver for Matrox Morphis (e)Dual/(e)Quad. MIL 9.0 Update 20: Compatibility fix for add-in boards in Core i7 and Xeon 3500/5500 series based systems. MIL 9.0 Update 25: Updated documentation for MIL 9 Processing Pack 1. (fixes a problem in update 11 with ActiveMIL docu

MIL 9.0 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.0 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 3: What's new in MIL 9.0.

Table of Contents for Section 3

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.0 is to include all the improvements done to MIL 8.0 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.0 supports:

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

Linux: Red Hat Enterprise 5.0 32-bit Red Hat Enterprise 5.0 64-bit Suse Enterprise 10 32-bit Suse Enterprise 10 64-bit Ubuntu 8.04 LTS 32-bit Ubuntu 8.04 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.0 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.0 to MIL 9.0 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

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

Table of Contents for Section 4

1. Overview. 2. Support for new Matrox hardware. 3. Operating system information. 4. Board-specific details. 5. API changes. 6. Commands common to both MIL and MIL-Lite. 6.1 Control/Inquire types added. 6.2 Control/Inquire types moved. 6.3 Control/Inquire constant name changes. 6.4 Obsolete Control/Inquire types. 6.5 Others modifications. 7. Directory structure. 8. 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. 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.

-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.

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

6.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)

6.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, ...).

6.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 6.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.

6.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.

7. 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.

8. 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 5: Differences between MIL 7.5 and 7.1

Table of Contents for Section 5

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

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.

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

Table of Contents for Section 6

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 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.