This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DM8168中,最多可同时使用几个马赛克Link?



请教各位大神,本人在程序中使用了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的头文件中发现马赛克定义了4LinkID,是不是意味着理论上可以同时存在4个马赛克Link

2、这个错误是不是意味着DMA资源不足导致的?

3、都有哪些Link会比较消耗DMA资源?

3DMA资源分配时,每个马赛克都是固定的吗,或者说可以通过调整马赛克的某些参数调整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.