I currently have an OMX application working with this (extremely) simple pipeline of components: VFCC -> CMUX. I'm now trying to add the ability to scale the captured frames (1260x960 down to 704x240), and towards that end I think I've found the right component: OMX.TI.VPSSM3.VFPC.INDTXSCWB
Should it be possible to connect the output port of the VFCC directly to the input port of INDTXSCWB? Or is this functionality already part of the VFCC and I'm just missing it? I ask because using the following node edges, the VPSS M3 core emits an xdc runtime error in utils_mem.c once the INDTXSCWB reaches the executing stage and gets it's first frame from the VFCC:
{ printf("Connecting VFCC->VFPCSC\n"); omxILEdgeInfo vfcc_sc_edge; OMX_HANDLETYPE hVSRC = NULL; TIMM_OSAL_Memset (&vfcc_sc_edge, 0x0, sizeof(vfcc_sc_edge)); vfcc_sc_edge.sNode1.hComp = &(pContext->hVFCC); vfcc_sc_edge.sNode1.bMultiHandleSinglePortConnect = OMX_FALSE; vfcc_sc_edge.sNode1.bEnablePort = g_EnablePort; vfcc_sc_edge.sNode1.bEnableNotify = OMX_FALSE; vfcc_sc_edge.sNode1.bUsePortIndexArrayList = OMX_FALSE; vfcc_sc_edge.sNode1.nStartPortIndex = OMX_VFCC_OUTPUT_PORT_START_INDEX; vfcc_sc_edge.sNode1.nNumPorts = 1; vfcc_sc_edge.sNode1.nPortIndexIncrement = 1; vfcc_sc_edge.sNode1.nNumHandles = 1; vfcc_sc_edge.sNode1.pPortConfigEventCompleteSemHandle = pContext->hPortConfigEvent; vfcc_sc_edge.sNode1.pPortIndexList = NULL; vfcc_sc_edge.sNode2.hComp = &(pContext->hVFPCSC); vfcc_sc_edge.sNode2.bMultiHandleSinglePortConnect = OMX_FALSE; vfcc_sc_edge.sNode2.bEnablePort = g_EnablePort; vfcc_sc_edge.sNode2.bEnableNotify = OMX_FALSE; vfcc_sc_edge.sNode2.bUsePortIndexArrayList = OMX_FALSE; vfcc_sc_edge.sNode2.nStartPortIndex = OMX_VFPC_INPUT_PORT_START_INDEX; vfcc_sc_edge.sNode2.nNumPorts = 1; vfcc_sc_edge.sNode2.nPortIndexIncrement = 1; vfcc_sc_edge.sNode2.nNumHandles = 1; vfcc_sc_edge.sNode2.pPortConfigEventCompleteSemHandle = pContext->hPortConfigEvent; vfcc_sc_edge.sNode2.pPortIndexList = NULL; vfcc_sc_edge.szEdgeName = "FQ_VFCCOUT"; vfcc_sc_edge.bSetupTunnel = g_SetupTunnel; vfcc_sc_edge.bCreatePortGroup = OMX_FALSE; vfcc_sc_edge.bForceDisableTiler = OMX_FALSE; vfcc_sc_edge.bSetParameter = g_SetParameter; vfcc_sc_edge.szPortGroupName = NULL; vfcc_sc_edge.eCompressionFormat = OMX_VIDEO_CodingUnused; vfcc_sc_edge.eColorFormat = IL_CLIENT_VIDEOCAPTURE_INCOLORFORMAT; vfcc_sc_edge.nFrameWidth = FRAME_WIDTH; vfcc_sc_edge.nFrameHeight = FRAME_HEIGHT; eError = omx_ilclient_utl_connect_components (&vfcc_sc_edge); OMX_TEST_BAIL_IF_ERROR ( eError ); } { printf("Connecting VFPCSC->CMUX\n"); omxILEdgeInfo sc_cmux_edge; TIMM_OSAL_Memset (&sc_cmux_edge, 0x0, sizeof(sc_cmux_edge)); sc_cmux_edge.sNode1.hComp = &(pContext->hVFPCSC); sc_cmux_edge.sNode1.bMultiHandleSinglePortConnect = OMX_FALSE; sc_cmux_edge.sNode1.bEnablePort = g_EnablePort; sc_cmux_edge.sNode1.bEnableNotify = OMX_FALSE; sc_cmux_edge.sNode1.bUsePortIndexArrayList = OMX_FALSE; sc_cmux_edge.sNode1.nStartPortIndex = OMX_VFPC_OUTPUT_PORT_START_INDEX; sc_cmux_edge.sNode1.nNumPorts = 1; sc_cmux_edge.sNode1.nPortIndexIncrement = 1; sc_cmux_edge.sNode1.nNumHandles = 1; sc_cmux_edge.sNode1.pPortConfigEventCompleteSemHandle = pContext->hPortConfigEvent; sc_cmux_edge.sNode1.pPortIndexList = NULL; sc_cmux_edge.sNode2.hComp = &(pContext->hCMUX); sc_cmux_edge.sNode2.bMultiHandleSinglePortConnect = OMX_FALSE; sc_cmux_edge.sNode2.bEnablePort = g_EnablePort; sc_cmux_edge.sNode2.bEnableNotify = OMX_TRUE; sc_cmux_edge.sNode2.bUsePortIndexArrayList = OMX_FALSE; sc_cmux_edge.sNode2.nStartPortIndex = OMX_CMUX_INPUT_PORT_START_INDEX; sc_cmux_edge.sNode2.nNumPorts = 1; sc_cmux_edge.sNode2.nPortIndexIncrement = 1; sc_cmux_edge.sNode2.nNumHandles = 1; sc_cmux_edge.sNode2.pPortConfigEventCompleteSemHandle = pContext->hPortConfigEvent; sc_cmux_edge.sNode2.pPortIndexList = NULL; sc_cmux_edge.szEdgeName = "SCOUT"; sc_cmux_edge.bSetupTunnel = g_SetupTunnel; sc_cmux_edge.bCreatePortGroup = OMX_FALSE; sc_cmux_edge.bForceDisableTiler = OMX_TRUE; sc_cmux_edge.bSetParameter = g_SetParameter; sc_cmux_edge.szPortGroupName = NULL; sc_cmux_edge.eCompressionFormat = OMX_VIDEO_CodingUnused; sc_cmux_edge.eColorFormat = IL_CLIENT_VIDEOCAPTURE_INCOLORFORMAT; sc_cmux_edge.nFrameWidth = SCOUT_FRAME_WIDTH; sc_cmux_edge.nFrameHeight = SCOUT_FRAME_HEIGHT; //sc_cmux_edge.nEdgeBufCnt = 5; eError = omx_ilclient_utl_connect_components (&sc_cmux_edge); OMX_TEST_BAIL_IF_ERROR ( eError ); }