MbufCreateColor
| Board | Supported |
|---|---|
| Host System | Partial |
| V4L2 | Partial |
| Clarity UHD | Partial |
| Concord PoE | No |
| GenTL | Partial |
| GevIQ | Partial |
| GigE Vision | Partial |
| Indio | No |
| Iris GTX | Partial |
| Radient eV-CL | Partial |
| Rapixo CL | Partial |
| Rapixo CoF | Partial |
| Rapixo CXP | Partial |
| USB3 Vision | Partial |
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 usingMbufFreeor 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 CoF | Note 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
| Value | Description |
|---|---|
M_DEFAULT_HOST | Specifies the default Host system of the current Aurora Imaging Library application. |
System identifier | Specifies 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
| Value | Description |
|---|---|
M_DEFAULT | Specifies the same number of bands as the source buffer when the ControlFlag parameter is set to M_AIL_ID. |
1 <= Value <= 1024 | Specifies 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
| Value | Description |
|---|---|
M_DEFAULT | Specifies that the buffer width is identical to that of the source buffer when the ControlFlag parameter is set to M_AIL_ID. |
Value | Specifies 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
| Value | Description |
|---|---|
M_DEFAULT | Specifies that the buffer height is identical to that of the source buffer when the ControlFlag parameter is set to M_AIL_ID. |
Value | Specifies 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
| Value | Description |
|---|---|
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. |
1 | Specifies a 1-bit (packed binary) buffer. Note that you cannot create a 1-bit LUT buffer. |
8 | Specifies an 8-bit buffer. |
16 | Specifies a 16-bit buffer. |
32 | Specifies a 32-bit buffer. |
For specifying the data type
| Value | Description |
|---|---|
M_FLOAT | Specifies that the type of data is floating-point. The valid data depth is 32 bits. |
M_SIGNED | Specifies 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
| Value | Description |
|---|---|
M_ARRAY | Specifies 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
| Value | Description |
|---|---|
M_COMPRESS | Specifies 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_COMPRESSwithout any compression type is specified and the underlying data is of type JPEG,SizeBand,Type,SizeX, andSizeYparameters can be set toM_DEFAULT. For all other cases, the underlying data must already be compressed with the specified compression type and color format. TheSizeBand,TypeSizeXandSizeYparameters 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 the
M_COMPRESSattribute 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 theControlFlagparameter 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
| Value | Description |
|---|---|
M_JPEG2000_LOSSLESS | Specifies 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_LOSSY | Specifies 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_LOSSLESS | Specifies 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_INTERLACED | Specifies 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_INTERLACED | Specifies 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
| Value | Description |
|---|---|
M_PACKED | Specifies 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_PLANAR | Specifies 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
| Value | Description |
|---|---|
M_RGB3 | Specifies 3-bit color depth (RGB 1:1:1) planar pixels. |
M_YUV9 | Specifies YUV9 planar standard. |
M_YUV12 | Specifies YUV12 planar standard. |
M_YUV24 | Specifies YUV24 planar standard. |
For specifying a packed color buffer format
| Value | Description |
|---|---|
M_BGR24 | Specifies 24-bit color depth (BGR) packed pixels (BGRBGR). |
M_BGR32 | Specifies 32-bit color depth (BGR) packed pixels (BGRXBGRX). The most-significant byte is a "don't care" byte. |
M_RGB15 | Specifies 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
| Value | Description |
|---|---|
M_RGB24 | Specifies 24-bit color depth (RGB 8:8:8) packed or planar pixels. |
M_RGB48 | Specifies 48-bit color depth (RGB 16:16:16). packed or planar pixels. |
M_RGB96 | Specifies 96-bit color depth (RGB 32:32:32) packed or planar pixels. |
M_YUV16 | Specifies 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
| Value | Description |
|---|---|
M_AIL_ID | Specifies 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_ADDRESS | Specifies 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
| Value | Description |
|---|---|
M_PITCH | Specifies that the pitch is in pixels. |
M_PITCH_BYTE | Specifies 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
| Value | Description |
|---|---|
M_DEFAULT | Specifies that when dealing with a 1-bit buffer, the pitch is a multiple of 4 bytes; otherwise the pitch equals the SizeX parameter. |
Value | Specifies 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
| Value | Description |
|---|---|
M_NULL | Specifies 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_ID | Specifies 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 identifier | Specifies 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_COMPRESSbuffer 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.