请教各位大神,本人在程序中使用了4个马赛克Link,但是在初始化到第4个马赛克时,在分配DMA通道的过程中,调用EDMA3_DRV_requestChannel
函数报了一个错误代码-132的错误,意思好像是在分配DMA通道时,分配的通道无效,大概就是在下面的那个地方:
Int32 Utils_dmaAllocDmaCh(Utils_DmaChObj *pObj)
{
EDMA3_DRV_Result edma3Result = EDMA3_DRV_SOK;
EDMA3_RM_TccCallback tccCb;
pObj->iTcc = EDMA3_DRV_TCC_ANY;
pObj->iChannel = EDMA3_DRV_DMA_CHANNEL_ANY;
if(pObj->enableIntCb)
tccCb = &Utils_dmaCallback;
else
tccCb = NULL;
edma3Result = EDMA3_DRV_requestChannel (gUtils_dmaObj.hEdma, &pObj->iChannel, &pObj->iTcc, (EDMA3_RM_EventQueue)pObj->eventQ, tccCb, (void *)pObj);
Vps_printf("Utils_dmaAllocDmaCh dema3Result is %d\n",edma3Result);
现在想请教下几个问题:
1、我在LinkID的头文件中发现马赛克定义了4个LinkID,是不是意味着理论上可以同时存在4个马赛克Link
2、这个错误是不是意味着DMA资源不足导致的?
3、都有哪些Link会比较消耗DMA资源?
3、DMA资源分配时,每个马赛克都是固定的吗,或者说可以通过调整马赛克的某些参数调整DMA的资源分配状况
RDK版本是4.0版本,4个马赛克的参数配置分别如下:
SecondswMsPrm.numSwMsInst = 1;
SecondswMsPrm.swMsInstId[0] = SYSTEM_SW_MS_SC_INST_SC5;
SecondswMsPrm.swMsInstStartWin[0] = 0;
SecondswMsPrm.inQueParams.prevLinkId = dupDisId;
SecondswMsPrm.inQueParams.prevLinkQueId = 0;
SecondswMsPrm.outQueParams.nextLink =SeconddisplayId;
SecondswMsPrm.lineSkipMode = FALSE;
SecondswMsPrm.enableLayoutGridDraw = FALSE;//TRUE;
SecondswMsPrm.layoutPrm.outputFPS = 30;
SecondswMsPrm.maxInputQueLen = SYSTEM_SW_MS_DEFAULT_INPUT_QUE_LEN;
SecondswMsPrm.maxOutRes = VSYS_STD_1080P_60;
SecondswMsPrm.numOutBuf = 8;
SecondswMsPrm.includeVipScInDrvPath = TRUE;//gsb
SecondChains_swMsSetLayoutParams(2, &SecondswMsPrm);
//swMs
swMsPrm.numSwMsInst = 1;
swMsPrm.swMsInstId[0] = SYSTEM_SW_MS_SC_INST_SC5;
swMsPrm.inQueParams.prevLinkId = dupDisId;
swMsPrm.inQueParams.prevLinkQueId = 2;
swMsPrm.outQueParams.nextLink = displayId;
swMsPrm.lineSkipMode = FALSE;
swMsPrm.enableLayoutGridDraw = TRUE;
swMsPrm.layoutPrm.outputFPS = 60;
swMsPrm.maxInputQueLen = SYSTEM_SW_MS_DEFAULT_INPUT_QUE_LEN;
swMsPrm.initOutRes = VSYS_STD_1080P_60;
swMsPrm.maxOutRes = VSYS_STD_1080P_60;
swMsPrm.enableProcessTieWithDisplay = TRUE;
swMsPrm.enableOuputDup = TRUE;
swMsPrm.includeVipScInDrvPath = TRUE;
swMsPrm.numOutBuf = 8;//0;
Chains_swMsSetLayoutParams(6, &swMsPrm,FALSE);//init for main layout.
//jpgswMs
jpgswMsPrm.numSwMsInst = 1;
jpgswMsPrm.swMsInstId[0] = SYSTEM_SW_MS_SC_INST_SC5;
jpgswMsPrm.inQueParams.prevLinkId = dupDisId;
jpgswMsPrm.inQueParams.prevLinkQueId = 3;
jpgswMsPrm.outQueParams.nextLink = jpgnsfId;//displayId;
jpgswMsPrm.lineSkipMode = FALSE;
jpgswMsPrm.enableLayoutGridDraw = FALSE;//TRUE;
jpgswMsPrm.layoutPrm.outputFPS = 30;
jpgswMsPrm.maxInputQueLen = SYSTEM_SW_MS_DEFAULT_INPUT_QUE_LEN;
jpgswMsPrm.initOutRes = VSYS_STD_1080P_60;
jpgswMsPrm.maxOutRes = VSYS_STD_1080P_60;
jpgswMsPrm.enableProcessTieWithDisplay = FALSE;//TRUE;
jpgswMsPrm.enableOuputDup = FALSE;//TRUE;
jpgswMsPrm.includeVipScInDrvPath = TRUE;
jpgswMsPrm.numOutBuf = 8;//0;
Chains_swMsSetLayoutParams(6, &jpgswMsPrm,FALSE);//init for main layout.
//sdswMs
sdswMsPrm.numSwMsInst = 1;
sdswMsPrm.swMsInstId[0] = SYSTEM_SW_MS_SC_INST_SC5;
sdswMsPrm.inQueParams.prevLinkId = dupDisId;
sdswMsPrm.inQueParams.prevLinkQueId = 1;
sdswMsPrm.outQueParams.nextLink = sddisplayId;
sdswMsPrm.lineSkipMode = FALSE;
sdswMsPrm.enableLayoutGridDraw = TRUE;
sdswMsPrm.layoutPrm.outputFPS = 30;
sdswMsPrm.maxInputQueLen = SYSTEM_SW_MS_DEFAULT_INPUT_QUE_LEN;
sdswMsPrm.initOutRes = VSYS_STD_PAL;
sdswMsPrm.maxOutRes = VSYS_STD_PAL;
sdswMsPrm.enableProcessTieWithDisplay = TRUE;
sdswMsPrm.enableOuputDup = TRUE;
sdswMsPrm.includeVipScInDrvPath = TRUE;
sdswMsPrm.numOutBuf = 8;
Chains_swMsSetLayoutParams(6, &sdswMsPrm,TRUE);//init for sd layout.