Tool/software:
Hi ,
Gstremer and tiovxmosaic is supporting different resolution inputs.
when using gst_wrapper function , it has only one input resolution parameter for all channel inputs.
in gst_wrapper.c file, plane size for all channels are configured as below.
int32_t appGstSrcInit(void* data_ptr[CODEC_MAX_BUFFER_DEPTH][CODEC_MAX_NUM_CHANNELS][CODEC_MAX_NUM_PLANES]) { int32_t status = 0; GstCaps* caps = NULL; app_gst_wrapper_obj_t* p_gst_pipe_obj = &g_app_gst_wrapper_obj; uint32_t plane_size = p_gst_pipe_obj->params.in_width * p_gst_pipe_obj->params.in_height; /* Setup AppSrc Elements */ for (uint8_t ch = 0; ch < p_gst_pipe_obj->params.in_num_channels; ch++) { p_gst_pipe_obj->m_srcElemArr[ch] = findElementByName(p_gst_pipe_obj->m_pipeline, p_gst_pipe_obj->params.m_AppSrcNameArr[ch]); if (p_gst_pipe_obj->m_srcElemArr[ch] == NULL) { printf("gst_wrapper: findElementByName() FAILED! %s not found\n", p_gst_pipe_obj->params.m_AppSrcNameArr[ch]); status = -1; } else { p_gst_pipe_obj->isAppSrc = GST_IS_APP_SRC(p_gst_pipe_obj->m_srcElemArr[ch]); if (p_gst_pipe_obj->isAppSrc) { caps = gst_caps_new_simple("video/x-raw", "width", G_TYPE_INT, p_gst_pipe_obj->params.in_width, "height", G_TYPE_INT, p_gst_pipe_obj->params.in_height, "format", G_TYPE_STRING, p_gst_pipe_obj->params.in_format, NULL); if (caps == NULL) { printf("gst_wrapper: gst_caps_new_simple() FAILED!\n"); status = -1; } gst_app_src_set_caps (GST_APP_SRC(p_gst_pipe_obj->m_srcElemArr[ch]), caps); gst_caps_unref (caps); } else { printf("gst_wrapper: %s not an AppSrc element\n", p_gst_pipe_obj->params.m_AppSrcNameArr[ch]); status = -1; } } } /* Setup GstBuffers to push to AppSrc Elements using given data_ptrs */ if (status==0) { for (uint8_t idx = 0; idx < p_gst_pipe_obj->params.in_buffer_depth && status==0; idx++) { for (uint8_t ch = 0; ch < p_gst_pipe_obj->params.in_num_channels && status==0; ch++) { p_gst_pipe_obj->buff[idx][ch] = gst_buffer_new(); p_gst_pipe_obj->mem[idx][ch][0] = gst_memory_new_wrapped (0, data_ptr[idx][ch][0], plane_size, 0, plane_size, NULL, NULL); p_gst_pipe_obj->mem[idx][ch][1] = gst_memory_new_wrapped (0, data_ptr[idx][ch][1], plane_size/2, 0, plane_size/2, NULL, NULL); gst_buffer_append_memory (p_gst_pipe_obj->buff[idx][ch], p_gst_pipe_obj->mem[idx][ch][0]); gst_buffer_append_memory (p_gst_pipe_obj->buff[idx][ch], p_gst_pipe_obj->mem[idx][ch][1]); p_gst_pipe_obj->mem[idx][ch][0] = gst_buffer_get_memory (p_gst_pipe_obj->buff[idx][ch], 0); p_gst_pipe_obj->mem[idx][ch][1] = gst_buffer_get_memory (p_gst_pipe_obj->buff[idx][ch], 1); gst_memory_map(p_gst_pipe_obj->mem[idx][ch][0],&p_gst_pipe_obj->map_info[idx][ch][0], GST_MAP_WRITE); gst_memory_map(p_gst_pipe_obj->mem[idx][ch][1],&p_gst_pipe_obj->map_info[idx][ch][1], GST_MAP_WRITE); } } } if (status==0) p_gst_pipe_obj->push_count = 0; return status; }
as the above functions will support for single input resolutions for different channels of appsrc's , Please clarify how to proceed further if input resolutions are different for each channels of appsrc..