Skip to main content

MbufCreateColor

BoardSupported
Host SystemPartial
V4L2Partial
Clarity UHDPartial
Concord PoENo
GenTLPartial
GevIQPartial
GigE VisionPartial
IndioNo
Iris GTXPartial
Radient eV-CLPartial
Rapixo CLPartial
Rapixo CoFPartial
Rapixo CXPPartial
USB3 VisionPartial

Create a multi-band data buffer.

Syntax

AIL_ID MbufCreateColor(
AIL_ID SystemId, //in
AIL_INT SizeBand, //in
AIL_INT SizeX, //in
AIL_INT SizeY, //in
AIL_INT Type, //in
AIL_INT64 Attribute, //in
AIL_INT64 ControlFlag, //in
AIL_INT Pitch, //in
void ** ArrayOfDataPtr, //in
AIL_ID * BufIdPtr //out
)

Description

This function creates a multi-band data buffer using memory at a specified location, and associates it with a specific Aurora Imaging Library system.

Note: This function should be used with caution because, when using physical addresses, it provides direct access to any of your computer's memory mapped devices; when using logical addresses, memory protection errors could result.

It is generally better to leave buffer allocation, data loading, and memory control to Aurora Imaging Library (MbufAllocColor, MbufGetColor, MbufPutColor), since Aurora Imaging Library might require special memory attributes (such as non-paged memory) or alignment to associate the buffer with a particular target system.

You must allocate the appropriate memory before calling MbufCreateColor. MbufInquire can be used to get the pointer to the data of an Aurora Imaging Library allocated buffer.

If creating a buffer over a JPEG stream in one of the supported formats, Aurora Imaging Library can automatically set the size, pitch, and type. To do so, set SizeBand, SizeX, SizeY, Type, and Pitch to M_DEFAULT, and set Attribute to M_COMPRESS without any compression type. Note that in this case, you must provide a host address (M_HOST_ADDRESS).

ControlFlag set to M_HOST_ADDRESS; and M_IMAGE + M_COMPRESSbe set without any compression type.

If creating a 3-band buffer, be as specific as possible when setting the buffer attributes (using the Attribute parameter) and make sure to specify the color format of the buffer. The more information known about the associated buffer, the better the results.

After creating the data buffer, you should check if the operation was successful, using MappGetError or by verifying that the data buffer identifier returned is not M_NULL (or nullptr ifM_UNIQUE_ID was specified).

When the data buffer is no longer required, release it usingMbufFreeunless M_UNIQUE_ID was specified during allocation; if M_UNIQUE_ID was specified, the smart identifier manages the data buffer's lifetime and you must not manually free it.

Note: If you create a buffer using MbufCreateColor, freeing the buffer (either manually usingMbufFree or automatically with a smart identifier) only releases the internal structure required for the mapped buffer. You are responsible for freeing the underlying memory used by the buffer.

System specific

Board(s)Note
Radient eV-CL, Rapixo CL, Rapixo CXP, Rapixo CoFNote that to create a buffer mapped to on-board memory, it must be shared memory. See your Hardware-specific Notes for more information regarding shared memory.

Parameters

SystemId (in, AIL_ID)

Specifies the Aurora Imaging Library system on which to create the buffer. This parameter should be set to one of the following values:

For specifying the Aurora Imaging Library system

ValueDescription
M_DEFAULT_HOSTSpecifies the default Host system of the current Aurora Imaging Library application.
System identifierSpecifies a valid system identifier, previously allocated using MsysAlloc.

SizeBand (in, AIL_INT)

Specifies the number of (x,y) surfaces (also called bands) that the buffer should have to contain each color or other type of data.

For specifying the number of surfaces

ValueDescription
M_DEFAULTSpecifies the same number of bands as the source buffer when the ControlFlag parameter is set to M_AIL_ID.
1 <= Value <= 1024Specifies the number of bands. There are generally either 1 or 3 bands.

When acquiring or processing monochrome images, the buffer requires only 1 band. For RGB color images, it requires 3 color bands.

This value can be any non-zero integer value up to 1024 for an image buffer, or 1 or 3 for an array or LUT buffer. |

SizeX (in, AIL_INT)

Specifies the buffer width.

For the buffer width

ValueDescription
M_DEFAULTSpecifies that the buffer width is identical to that of the source buffer when the ControlFlag parameter is set to M_AIL_ID.
ValueSpecifies the buffer width. The units are determined by the selected buffer attribute. For example, if the buffer has an image buffer attribute, width is specified in pixels.

SizeY (in, AIL_INT)

Specifies the buffer height.

For the buffer height

ValueDescription
M_DEFAULTSpecifies that the buffer height is identical to that of the source buffer when the ControlFlag parameter is set to M_AIL_ID.
ValueSpecifies the buffer height. The units are determined by the selected buffer attribute. For example, if the buffer has an image buffer attribute, height is specified in pixels.

Type (in, AIL_INT)

Specifies a combination of two values: data depth and data type, per band. Specify the depth of the buffer per band as one of the following:

For the depth of the buffer

ValueDescription
M_DEFAULT (default)Specifies that the data depth and type are identical to that of the source buffer when the ControlFlag parameter is set to M_AIL_ID.
1Specifies a 1-bit (packed binary) buffer. Note that you cannot create a 1-bit LUT buffer.
8Specifies an 8-bit buffer.
16Specifies a 16-bit buffer.
32Specifies a 32-bit buffer.

For specifying the data type

ValueDescription
M_FLOATSpecifies that the type of data is floating-point. The valid data depth is 32 bits.
M_SIGNEDSpecifies that the type of data is signed. The valid data depths are 8, 16, or 32 bits.
M_UNSIGNED (default)Specifies that the type of data is unsigned. The valid data depths are 1, 8, 16, or 32 bits.

Attribute (in, AIL_INT64)

Specifies the buffer usage. This allows you to specify the type of buffer, intended purpose, compression type, storage format, data direction, location, internal storage format, memory type, and overscan region of the created buffer; all of which provides additional information for other Aurora Imaging Library functions.

For specifying the buffer usage

ValueDescription
M_ARRAYSpecifies a buffer to store array type data. Note that some functions take an M_ARRAY buffer rather than a user-defined array.

Note that this attribute is only supported for 1-band and 3-band buffers. | | M_IMAGE | Specifies a buffer to store image data. | | M_LUT | Specifies a buffer to store lookup table data.

The depth must be 8, 16, or 32-bit integer or floating-point and the internal storage format must be planar (M_PLANAR).

Note that this attribute is only supported for 1-band and 3-band buffers. |

For specifying the intended purpose of the image buffer

ValueDescription
M_COMPRESSSpecifies an image buffer that can hold compressed data. Note that a buffer with this attribute cannot have the M_SIGNED data type.

Note: If M_COMPRESS without any compression type is specified and the underlying data is of type JPEG, SizeBand, Type, SizeX, and SizeYparameters can be set to M_DEFAULT. For all other cases, the underlying data must already be compressed with the specified compression type and color format. The SizeBand, Type SizeXandSizeYparameters must also be set to the exact size of the compressed image stored in the underlying data. It is not possible to create a compressed buffer mapped on to only part of a compressed image.

When mapping buffers for operations that require a source and destination buffer, and one of the buffers has an M_COMPRESS attribute, the data will be compressed or decompressed depending on the attributes of the destination buffer. If both the source and destination buffers have M_COMPRESS specifiers but different compression types, the data will be re-compressed according to the settings of the destination buffer.

Note: Note that buffers created from preallocated memory with theM_COMPRESS attribute should typically only be passed to Aurora Imaging Library functions as a source. If you pass a compressed buffer created from preallocated memory as a destination for an Aurora Imaging Library function, an error will be generated if the compressed size in memory of the function output is not the same as the size of the allocated memory. This is true even if the ControlFlagparameter is set toM_AIL_ID.

Only 1-band and 3-band buffers can have an M_COMPRESSattribute. | | M_DISP | Specifies an image buffer that can be displayed. | | M_GRAB | Specifies an image buffer in which to grab data.

Only 1-band and 3-band buffers can have an M_GRABattribute. | | M_PROC | Specifies an image buffer that can be processed. |

For specifying the compression type

ValueDescription
M_JPEG2000_LOSSLESSSpecifies that the buffer will be used to hold JPEG2000 lossless data. The supported data formats are: 1-band, 8- or 16-bit data, and 3-band, 8- or 16-bit data in M_RGB24 + M_PLANAR, M_RGB48 + M_PLANAR, orM_YUV24 + M_PLANAR format.
M_JPEG2000_LOSSYSpecifies that the buffer will be used to hold JPEG2000 lossy data. The supported data formats are: 1-band, 8- or 16-bit data, and 3-band, 8- or 16-bit data in M_RGB24, M_RGB48, M_YUV9, M_YUV12, M_YUV16 + M_PLANAR, or M_YUV24 format.
M_JPEG_LOSSLESSSpecifies that the buffer will be used to hold JPEG lossless data. The supported data formats are: 1-band, 8- or 16-bit data, and 3-band data in M_RGB24 or M_RGB48 format.
M_JPEG_LOSSLESS_INTERLACEDSpecifies that the buffer will be used to hold JPEG lossless data in separate fields. The supported data formats are: 1-band, 8- or 16-bit data.
M_JPEG_LOSSY (default)Specifies that the buffer will be used to hold JPEG lossy data. The supported data formats are: 1-band 8-bit data, and 3-band 8-bit data in M_RGB24, M_YUV24, M_YUV12, M_YUV9, M_YUV16 + M_PLANAR, or M_YUV16 + M_PACKED format.
M_JPEG_LOSSY_INTERLACEDSpecifies that the buffer will be used to hold JPEG lossy data in separate fields. The supported data formats are: 1-band 8-bit data, and 3-band 8-bit data in M_YUV16 + M_PACKED format.

For specifying a storage format for image buffers

ValueDescription
M_PACKEDSpecifies that the buffer's bands are stored in packed format; that is, each pixel's bands are stored together (RGB RGB RGB...). Typically, packed buffers are used for display. Note that it might be slower to process buffers with the M_PACKED attribute. Also, note that you cannot allocate a packed LUT buffer.
M_PLANARSpecifies that the buffer's bands are stored in planar format; that is, each pixel's bands are stored in separate planes. Typically, planar buffers are used for processing.

For specifying a planar color buffer format

ValueDescription
M_RGB3Specifies 3-bit color depth (RGB 1:1:1) planar pixels.
M_YUV9Specifies YUV9 planar standard.
M_YUV12Specifies YUV12 planar standard.
M_YUV24Specifies YUV24 planar standard.

For specifying a packed color buffer format

ValueDescription
M_BGR24Specifies 24-bit color depth (BGR) packed pixels (BGRBGR).
M_BGR32Specifies 32-bit color depth (BGR) packed pixels (BGRXBGRX). The most-significant byte is a "don't care" byte.
M_RGB15Specifies 16-bit color depth packed pixels (XRGB 1:5:5:5).

Note that when accessing an M_RGB15 + M_PACKED buffer as a 3-band 8-bit buffer, the least significant bits are set to 0. | | M_RGB16 | Specifies 16-bit color depth packed pixels (RGB 5:6:5).

Note that when accessing an M_RGB16 + M_PACKED buffer as a 3-band 8-bit buffer, the least significant bits are set to 0. | | M_YUV16_UYVY | Specifies YUV16 packed (4:2:2) pixels, whereby the bands of each pixel are stored in the UYVY order. For more information, see YUV buffers. | | M_YUV16_YUYV | Specifies YUV16 packed (4:2:2) pixels, whereby the bands of each pixel are stored in the YUYV order. For more information, see YUV buffers. |

For specifying a packed or planar color buffer format

ValueDescription
M_RGB24Specifies 24-bit color depth (RGB 8:8:8) packed or planar pixels.
M_RGB48Specifies 48-bit color depth (RGB 16:16:16). packed or planar pixels.
M_RGB96Specifies 96-bit color depth (RGB 32:32:32) packed or planar pixels.
M_YUV16Specifies YUV16 packed or planar (4:2:2) standard.

ControlFlag (in, AIL_INT64)

Specifies the physical nature of the buffer. This parameter can be set to one of the values below.

For specifying the physical nature of the buffer

ValueDescription
M_AIL_IDSpecifies that the new buffer maps to an existing source buffer. ArrayOfDataPtr is a pointer to an array that stores a pointer to the Aurora Imaging Library identifier of the source buffer.
M_HOST_ADDRESSSpecifies that ArrayOfDataPtris a pointer to an array of host addresses that point to the data. The number of pointers in the array depends on the number of bands and whether the data is compressed or packed.

Note that when using logical addresses, memory protection errors could result.

Note that you can use MbufInquire with M_HOST_ADDRESS to get the logical address of an Aurora Imaging Library allocated buffer. | | M_PHYSICAL_ADDRESS | Specifies that ArrayOfDataPtris a pointer to an array of physical addresses that point to the data. The number of pointers in the array depends on the number of bands and whether the data is compressed or packed.

Note that using physical addresses provides direct access to any of your computer's memory mapped devices.

Note that you can use MbufInquire with M_PHYSICAL_ADDRESS to get the physical address of an Aurora Imaging Library allocated buffer. |

For specifying how the pitch is measured

ValueDescription
M_PITCHSpecifies that the pitch is in pixels.
M_PITCH_BYTESpecifies that the pitch is in bytes.

Pitch (in, AIL_INT)

Specifies the size of the pitch. The pitch is the number of pixels or bytes (as specified by the ControlFlag parameter) between the start of any two adjacent rows of the buffer. The actual length of a row in the buffer, in physical memory, might be different from the value of the SizeX parameter (for example, due to use of buffer overscan).

For specifying the size of the pitch

ValueDescription
M_DEFAULTSpecifies that when dealing with a 1-bit buffer, the pitch is a multiple of 4 bytes; otherwise the pitch equals the SizeX parameter.
ValueSpecifies the pitch in pixels or bytes (as determined by the ControlFlag parameter).

ArrayOfDataPtr *(in, *void)

Specifies one or more data pointers that address the memory to which to map the created Aurora Imaging Library buffer.

BufIdPtr *(out, AIL_ID)

Specifies the address of the variable in which to write the data buffer identifier or specifies the data type that the function should use to return the data buffer identifier.

For retrieving the identifier or specifying how to return it

ValueDescription
M_NULLSpecifies that you will use this function's return value to obtain the identifier of the allocated buffer; in this case, a standard Aurora Imaging Library identifier of type AIL_ID is returned.
M_UNIQUE_IDSpecifies that you will use this function's return value to obtain the identifier of the allocated buffer; in this case, an Aurora Imaging Library smart identifier of type _AIL_UNIQUE_BUF_ID_is returned instead of a standard Aurora Imaging Library identifier.This setting is only available when using C++11 (or later).An Aurora Imaging Library smart identifier manages the lifespan of the Aurora Imaging Library object it owns (similar to a std::unique_ptr). Note, you can use an Aurora Imaging Library smart identifier as though it were a standard Aurora Imaging Library identifier, except that you cannot use it to manually free the buffer (it is freed automatically). For more information, see Aurora Imaging Library smart identifiers.
Address for the array buffer identifierSpecifies the address of an AIL_ID in which to write the identifier of the created array buffer.

If allocation fails, M_NULL is written as the identifier. | | Address for the image buffer identifier | Specifies the address of an AIL_ID in which to write the identifier of the created image buffer.

If allocation fails, M_NULL is written as the identifier. | | Address for the LUT buffer identifier | Specifies the address of an AIL_ID in which to write the identifier of the created LUT buffer.

If allocation fails, M_NULL is written as the identifier. |

Return Value

Type: AIL_ID

The returned value is the data buffer identifier either as a standard identifier (AIL_ID) or a smart identifier (AIL_UNIQUE_BUF_ID). If allocation fails, M_NULL is returned (or nullptr ifM_UNIQUE_ID was specified).

Remarks

Note that during development and at runtime, compression support, particularly for an M_COMPRESS buffer type, requires the presence of an Aurora Imaging Library license that grants access to the compression/decompression package. This access is only granted by default with the development license dongle for the full version of Aurora Imaging Library. In other cases, you must purchase access to this package separately.

Copyright © 2026 Zebra Technologies.