# Machine learning APIs

Source: [https://docs.qualcomm.com/doc/80-70015-50/topic/machine-learning-apis.html](https://docs.qualcomm.com/doc/80-70015-50/topic/machine-learning-apis.html)

Configure the tensor-specific requirements and machine learning
        properties.

## GstMLType

The following are the possible values describing the tensor format:

| Enumeration | Description |
| --- | --- |
| GST\_ML\_TYPE\_UNKNOWN | Invalid data |
| GST\_ML\_TYPE\_INT8 | Data is represented as 1 byte of signed integer value |
| GST\_ML\_TYPE\_UINT8 | Data is represented as 1 byte of unsigned integer value |
| GST\_ML\_TYPE\_INT32 | Data is represented as 4 bytes of signed integer value |
| GST\_ML\_TYPE\_UINT32 | Data is represented as 4 bytes of unsigned integer value |
| GST\_ML\_TYPE\_FLOAT16 | Data is represented as 2 bytes of floating-point value |
| GST\_ML\_TYPE\_FLOAT32 | Data is represented as 4 bytes of floating-point value |

The following list provides information on each of the GstMLType APIs:

- **gst\_ml\_type\_get\_size**
    Returns the size of the GstMLType in
                            bytes.

    **Prototype**

        guint
        gst_ml_type_get_size (GstMLType type)
        Copy to clipboard

    **Parameters**

| [in] | `type` | A GstMLType |
    | :--- | :--- | :--- |

    **Returns**

    The size in bytes.
- **gst\_ml\_type\_from\_string**
                    
    Returns GstMLType based on its string
                            version.

    **Prototype**

        GstMLType
        gst_ml_type_from_string (const gchar * type)
        Copy to clipboard

    **Parameters**

| [in] | `type` | A char string version of a GstMLType |
    | :--- | :--- | :--- |

    **Returns**

    A GstMLType
- **gst\_ml\_type\_to\_string**
    Returns a char string version of a
                            GstMLType.

        const gchar *
        gst_ml_type_to_string (GstMLType type)
        Copy to clipboard

    **Parameters**

| [in] | `type` | A string version of a GstMLType |
    | :--- | :--- | :--- |

    **Returns**

    A new char string version of a
                    GstMLType

## GstMLInfo

gst\_ml\_info\_from\_caps() is used to add the information on the ML
                properties from GstCaps.

Table : Information structure describing ML properties

| Field | Description |
| --- | --- |
| `type (GstMLType)` | Type of the tensors |
| `n_tensors (guint)` | Number of tensors |
| `n_dimensions (guint)` | Number of dimensions for each tensor |
| `tensors (guint)` | Array with tensor dimensions |

The following list provides information on each of the GstMLInfo APIs:

- **gst\_ml\_info\_init**
    Initializes the GstMLInfo
                            fields.

    **Prototype**

        void
                 gst_ml_info_init (GstMLInfo * info)
        Copy to clipboard

    **Parameters**

| [in] | `info` | A GstMLInfo |
    | :--- | :--- | :--- |

    **Returns**

    None
- **gst\_ml\_info\_new**
    Copies a GstMLInfo
                        structure.

    **Prototype**

        GstMLInfo *
                 gst_ml_info_new (void)Copy to clipboard

    **Returns**

    A new
                        GstMLInfo. Free with gst\_ml\_info\_free().
- gst\_ml\_info\_copy: Copies a GstMLInfo
                        structure.
    **Prototype**

        GstMLInfo *
        gst_ml_info_copy (const GstMLInfo * info)
        Copy to clipboard

| [in] | `info` | A GstMLInfo |
    | :--- | :--- | :--- |

    **Returns**

    A new GstMLInfo. Free with
                            gst\_ml\_info\_free().
- **gst\_ml\_info\_free**
    Frees a GstMLInfo structure previously allocated with
                            gst\_ml\_info\_new() or
                            gst\_ml\_info\_copy().

    **Prototype**

        void
        gst_ml_info_free (const GstMLInfo * info)
        Copy to clipboard

    **Parameters**

| [in] | `info` | A GstMLInfo |
    | :--- | :--- | :--- |

    **Returns**

    None
- **gst\_ml\_info\_from\_caps**
    Parses the capabilities (caps) and updates the
                            `caps`
                            information.

    **Prototype**

        gboolean 
        gst_ml_info_from_caps (GstMLInfo * info, const GstCaps  * caps)
        Copy to clipboard

    **Parameters**

| [in] | `info` | A GstMLInfo |
    | :--- | :--- | :--- |
    | [in] | `caps` | A GstCaps |

    **Returns**

    TRUE if the operation was successful
- **gst\_ml\_info\_to\_caps**
    Converts the values of info into a
                            GstCaps.

    **Prototype**

        GstCaps *  
        gst_ml_info_to_caps (const GstMLInfo * info)
        Copy to clipboard

    **Parameters**

| [in] | `info` | A GstMLInfo |
    | :--- | :--- | :--- |

    **Returns**

    A new [GstCaps](https://gstreamer.freedesktop.org/documentation/gstreamer/gstcaps.html) containing the
                        information.
- **gst\_ml\_info\_is\_equal**
                    
    Compares two GstMLInfo and returns whether they are
                            equal.

    **Prototype**

        gboolean
        gst_ml_info_is_equal (const GstMLInfo * l_info, const GstMLInfo * r_info)
        Copy to clipboard

    **Parameters**

| [in] | `l_info` | A GstMLInfo |
    | :--- | :--- | :--- |
    | [in] | `r_info` | A GstMLInfo |

    **Returns**

    TRUE if the operation was successful.
- **gst\_ml\_info\_tensor\_size**
    Calculates the size of the tensor specified by
                        its index from
                        GstMLInfo.

**Prototype**

        gsize
        gst_ml_info_tensor_size (const GstMLInfo * info, guint index)
        Copy to clipboard

    **Parameters**

| [in] | `info` | A GstMLInfo |
    | :--- | :--- | :--- |
    | [in] | `index` | The tensor index |

    **Returns**

    The size in bytes.
- **gst\_ml\_info\_size**
    Calculates the total size of all the tensors inside
                        GstMLInfo.

    **Prototype**

        gsize
        gst_ml_info_size (const GstMLInfo * info)
        Copy to clipboard

    **Parameters**

| [in] | `info` | A GstMLInfo |
    | --- | --- | --- |

    **Returns**

    The size in bytes.

## GstMLTensorMeta

These APIs are based on [GstMeta](https://gstreamer.freedesktop.org/documentation/gstreamer/gstmeta.html?gi-language=c), which is a member of the [GstBuffer](https://gstreamer.freedesktop.org/documentation/gstreamer/gstbuffer.html?gi-language=c) metadata structure.

Table : GstMLTensorMeta information structure

| Field | Description |
| --- | --- |
| meta ([GstMeta](https://gstreamer.freedesktop.org/documentation/gstreamer/gstmeta.html?gi-language=c)) | GstMeta is the parent |
| id (guint) | ID corresponding to the memory index in [GstBuffer](https://gstreamer.freedesktop.org/documentation/gstreamer/gstbuffer.html?gi-language=c) |
| type (GstMLType) | Tensor type |
| n\_dimensions (guint) | Number of tensor dimensions |
| dimensions (guint) | Array of tensor dimensions |

The following list provides information on each of the GstMLTensorMeta APIs:

- **gst\_buffer\_add\_ml\_tensor\_meta**
    Attaches GstMLTensorMeta metadata to a
                        buffer with the given
                            parameters.

    **Prototype**

        GstMLTensorMeta *
        gst_buffer_add_ml_tensor_meta (GstBuffer * buffer, const GstMLType type, const guint n_dimensions, const guint dimensions[GST_ML_TENSOR_MAX_DIMS])Copy to clipboard

    **Parameters**

| [in] | `buffer` | A [GstBuffer](https://gstreamer.freedesktop.org/documentation/gstreamer/gstbuffer.html?gi-language=c) |
    | :--- | :--- | :--- |
    | [in] | `type` | The tensor type. |
    | [in] | `n_dimensions` | The number of tensor dimensions. |
    | [in] | `dimensions` | The array that contains the tensor dimensions. |

    **Returns**

    The GstMLTensorMeta on buffer. Do not free after
                        the code is run.
- **gst\_buffer\_get\_ml\_tensor\_meta**
    Gets the first GstMLTensorMeta on
                        buffer.

    **Prototype**

        GstMLTensorMeta *
        gst_buffer_get_ml_tensor_meta (GstBuffer * buffer)Copy to clipboard

    **Parameters**

| [in] | `buffer` | A [GstBuffer](https://gstreamer.freedesktop.org/documentation/gstreamer/gstbuffer.html?gi-language=c) |
    | :--- | :--- | :--- |

    **Returns**

    The GstMLTensorMeta on buffer. Do not free after
                        the code is run.
- **gst\_buffer\_get\_ml\_tensor\_meta\_id**
    Finds the GstMLTensorMeta on buffer
                        with the given
                            ID.

    **Prototype**

        GstMLTensorMeta *
        gst_buffer_get_ml_tensor_meta_id (GstBuffer * buffer, guint id)
        Copy to clipboard

    **Parameters**

| [in] | `buffer` | A [GstBuffer](https://gstreamer.freedesktop.org/documentation/gstreamer/gstbuffer.html?gi-language=c) |
    | :--- | :--- | :--- |
    | [in] | `id` | A metadata ID |

    **Returns**

    The GstMLTensorMeta on buffer. Do not free after
                        the code is run.
- **gst\_ml\_meta\_tensor\_size**
    Gets the total size of the tensor in bytes,
                        which is calculated based on the dimensions and tensor
                            type.

    **Prototype**

        gsize
        gst_ml_meta_tensor_size (const GstMLTensorMeta * meta)Copy to clipboard

**Parameters**

| [in] | `meta` | A GstMLTensorMeta |
    | :--- | :--- | :--- |

    **Returns**

    The size in bytes.

## GstMLFrame

GstMLFrame is a structure obtained from gst\_ml\_frame\_map().

Table : Structure of GstMLFrame

| Field | Description |
| --- | --- |
| info (GstMLInfo) | The GstMLInfo |
| buffer ([GstBuffer](https://gstreamer.freedesktop.org/documentation/gstreamer/gstbuffer.html?gi-language=c)) | Mapped buffer containing the tensor memory blocks |
| map ([GstMapInfo](https://gstreamer.freedesktop.org/documentation/gstreamer/gstmemory.html?gi-language=c#GstMapInfo)) | Mappings of the tensor memory blocks |

The following list provides information on each of the GstMLFrame APIs:

- **gst\_ml\_frame\_map**
    Updates the frame values using [GstMLInfo](https://docs.qualcomm.com/doc/80-70015-50/topic/machine-learning-apis.html#machine-learning-apis__section_qqy_3ng_tcc) and
                        GstBuffer.

    1. The address is passed to the GstMLFrame structure that is allocated on
                            the stack.
    2. The gst\_ml\_frame\_map() function fills the GstMLFrame
                            structure with ML tensor-specific information to access the ML buffer
                            data. All the buffer video tensors are mapped and the pointers are set
                            in the frame data.

**Prototype**

        gboolean
        gst_ml_frame_map (GstMLFrame * frame, const GstMLInfo * info, GstBuffer * buffer, GstMapFlags flags)
        Copy to clipboard

    **Parameters**

| [in] | `frame` | Pointer to GstMLFrame |
    | :--- | :--- | :--- |
    | [in] | `info` | A GstMLInfo |
    | [in] | `buffer` | A GstBuffer |
    | [in] | `flags` | A GstMapFlags |

    **Returns**

    TRUE if the map operation was
                    successful.
- **gst\_ml\_frame\_unmap**: 
    Un-maps the memory that was previously mapped with
                            gst\_ml\_frame\_map().

    **Prototype**

        void
        gst_ml_frame_unmap (GstMLFrame * frame)Copy to clipboard

    **Parameters**

| [in] | `frame` | Pointer to GstMLFrame |
    | :--- | :--- | :--- |

    **Returns**

    None

## GstMLBufferPool

Configure the following using GstMLBufferPool API:

- Tensor-specific requirements such as multiple [GstMemory](https://gstreamer.freedesktop.org/documentation/gstreamer/gstmemory.html?gi-language=c) blocks in a single [GstBuffer](https://gstreamer.freedesktop.org/documentation/gstreamer/gstbuffer.html?gi-language=c)
    Type of memory used
                            for allocation.
- Addition of GstMLTensorMeta to the buffers.

Figure : GstBufferPool subclass for ML
                
                ![](data:image/png;base64,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)

- **Prototype**
    Creates a buffer pool that can allocate the ML
                    frames.

        GstBufferPool *
        gst_ml_buffer_pool_new (const gchar * type)
        Copy to clipboard
- **Parameters**

| [in] | `type` | The memory used by the pool to allocate buffers. |
    | :--- | :--- | :--- |
- **Returns**
    - A new [GstBufferPool](https://gstreamer.freedesktop.org/documentation/gstreamer/gstbufferpool.html?gi-language=c) to allocate ML
                            frames.
    - Free with [gst_object_unref](https://gstreamer.freedesktop.org/documentation/gstreamer/gstobject.html#gst_object_unref).
- **Arguments**

The following arguments can be passed to
                                gst\_ml\_buffer\_pool\_new() to configure the buffer
                            memories:

    | Argument | Description | Usage |
    | --- | --- | --- |
    | GST\_ML\_BUFFER\_POOL\_TYPE\_ION | Allocates buffers by passing it as<br>                                        arguments to<br>                                        gst\_ml\_buffer\_pool\_new() | #define GST_ML_BUFFER_POOL_TYPE_ION "GstMLBufferPoolTypeIonMemory"Copy to clipboard |
    | GST\_ML\_BUFFER\_POOL\_TYPE\_SYSTEM | Allocates buffers by passing it as<br>                                        arguments to<br>                                        gst\_ml\_buffer\_pool\_new() | #define GST_ML_BUFFER_POOL_TYPE_SYSTEM "GstMLBufferPoolTypeSystemMemory"Copy to clipboard |
    | GST\_ML\_BUFFER\_POOL\_OPTION\_TENSOR\_META | Requests ML tensor metadata on buffers from the<br>                                        pool. | #define GST_ML_BUFFER_POOL_OPTION_TENSOR_META "GstMLBufferPoolOptionTensorMeta"Copy to clipboard |
    | GST\_ML\_BUFFER\_POOL\_OPTION\_CONTINUOUS | Requests all tensors to be into a continuous physical<br>                                        memory. | #define GST_ML_BUFFER_POOL_OPTION_CONTINUOUS "GstMLBufferPoolOptionContinuous"Copy to clipboard |
    |  |  |  |

**Parent Topic:** [GSt APIs](https://docs.qualcomm.com/doc/80-70015-50/topic/gst-apis.html)

Last Published: Oct 27, 2025

[Previous Topic
Video APIs](https://docs.qualcomm.com/bundle/publicresource/80-70015-50/topics/video-apis.md) [Next Topic
GSt debugging tools](https://docs.qualcomm.com/bundle/publicresource/80-70015-50/topics/imsdk_debug_gst.md)