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