AM62A3: Does TIOVX MSC (Multi-Scaler) node support in-place operation on AM62A?

Part Number: AM62A3

Tool/software:

Hi,

I'm working with the TIOVX framework in the Edge AI SDK 9.2 on AM62A platform. I'm developing a GStreamer plugin based on gsttiovxsiso.c, and trying to optimize my pipeline by implementing in-place processing for the MSC node.

Current setup:


- Hardware: AM62A EVM
- SDK Version: Edge AI SDK 9.2
- OS: Linux 5.10.168
- GStreamer version: 1.16.3

What I want to achieve:


I want to perform MSC operation in-place (using the same buffer for input and output) to reduce memory usage and improve performance, since my input and output image formats and dimensions are identical:
- Image format: TIVX_DF_IMAGE_NV12
- Resolution: 1920x1080
- Color format: NV12

Current implementation:


I'm extending the GstTIOVXSiso base class and implementing a custom element. Here's the relevant code:

static gboolean
gst_ti_msc_init_module (GstTIOVXSiso self, vx_context context,
GstCaps in_caps, GstCaps out_caps, guint num_channels)
{
    GstTiMsc msc = GST_TI_MSC (self);
    vx_status status = VX_FAILURE;
    // Create MSC node
    msc->node = tivxMscNode(context,
    msc->input_image, // vx_image input
    msc->output_image, // vx_image output
    &msc->msc_create_params); // tivx_msc_create_params_t
    if (VX_SUCCESS != status) {
    GST_ERROR_OBJECT (self, "Failed to create MSC node");
    goto exit;
}
    return TRUE;
exit:
    return FALSE;
}

I want to modify this to use transform_ip instead of transform, something like:

static GstFlowReturn
gst_ti_msc_transform_ip(GstBaseTransform trans, GstBuffer buf)
{
    GstTiMsc self = GST_TI_MSC(trans);
    // ... setup code ...
    // Use same buffer for input and output
    vx_image image = get_image_from_buffer(buf);
    status = tivxMscNode(context, image, image, &msc_params);
    // ... cleanup code ...
return ret;
}

Questions:


1. Does the TIOVX MSC node support in-place operation on AM62A platform?
2. If yes, what are the requirements or constraints for in-place processing?
3. Is there any example code showing how to configure the node for in-place operation?
4. On AM62A platform, how does this in-place operation perform? Are there any limitations to be aware of?
5. If in-place is supported, do I need to make any special configurations in the graph or node parameters?

If in-place operation is not supported, are there other recommended approaches for optimizing memory usage, taking into account the AM62A platform characteristics?

Thank you for your help!

Best regards