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