问题描述如下,请帮分析可能原因。谢谢!
另外,algLinktask.c在links_c6xdsp和links_common,两个文件夹下都存在,有什么区别,添加打印发现links_common中的AlgLink_init没有被调用,有没有影响。
详细描述如下:
cap和dec后的图像经过merge->swms组成多画面后送nsf->ipcframesoutvpss->ipcoutvpss->icpinvideo->enc,
其中在ipcframesoutvpss link中外挂processlink指向dspalgid,用swms实现在enc前的输入osd叠加。
但systemlink create创建时没有发现在AlgLink_tskMain函数中添加的打印如下:
Void AlgLink_tskMain(struct Utils_TskHndl *pTsk, Utils_MsgHndl * pMsg)
{
UInt32 cmd = Utils_msgGetCmd(pMsg);
Bool ackMsg, done;
Int32 status;
AlgLink_Obj *pObj;
UInt32 flushCmds[4];
//如果用vps_printf有可能会挂死
Vps_rprintf("alex swosd AlgLink_tskMain common begin\n");
,怀疑未能进入此函数,且启动过程出错打印如下:
4258:!!!SLAVE CORE [VIDEO-M3] DOWN!!!
SystemLink_copySlaveCoreExceptionContext:146
mmap of [0xbe9c0000:36864]
mmap virt addresss:0x40203000
munmap of [0x40203000:36864]
SystemLink_copySlaveCoreExceptionContext:153
[c6xdsp ] 14569: IPC_FRAMES_IN : Create in progress !!!
[m3video] Unhandled Exception:
[m3video] Exception occurred in ThreadType_Task
[m3video] handle: 0x95320520.
[c6xdsp ] 14570: SYSTEM: Opening ListMP [VPSS-M3_IPC_OUT_19] ...
[m3video] stack base: 0x95eb7fe0.
[m3vpss ] SWMS:HEAPID:0 USED:552
[c6xdsp ] 14570: SYSTEM: Opening ListMP [VPSS-M3_IPC_IN_19] ...
[m3video] stack size: 0x8000.
[m3vpss ] SWMS:HEAPID:1 USED:116048
[c6xdsp ] 14570: SYSTEM: Opening MsgQ [VPSS-M3_MSGQ] ...
[m3video] R0 = 0x806fcebe R8 = 0x95d5bd40
[m3vpss ] SWMS:HEAPID:4 USED:33177600
[m3video] R1 = 0x64932b40 R9 = 0x0000003c
[m3vpss ] 16067: SWMS: Create Done !!!
[m3video] R2 = 0x00000000 R10 = 0x00000000
[m3vpss ] 16070: DUP : Create Done !!!
[c6xdsp ] IPC_FRAMES_IN:HEAPID:0 USED:304
[m3video] R3 = 0xe37e0407 R11 = 0xbf10b134
[m3vpss ] 16071: NSF: Create in progress !!!
[c6xdsp ] 14572: IPC_FRAMES_IN : Create Done !!!
[m3video] R4 = 0x0000003c R12 = 0x9529e095
[m3vpss ] 16071: Before Create NSF
[m3video] R5 = 0xffffffff SP(R13) = 0x95ebff30
[m3vpss ] 16071: SYSTEM : FREE SPACE : System Heap = 5784 B, Mbx = 10239 msgs)
[m3video] R6 = 0x00000010 LR(R14) = 0x0032ab8d
[m3video] R7 = 0xffffffff PC(R15) = 0x0032b13e
[m3vpss ] 16071: SYSTEM : FREE SPACE : SR0 Heap = 11003648 B (10 MB)
[m3video] PSR = 0x21000000
[m3video] ICSR = 0x0440f803
[m3vpss ] 16071: SYSTEM : FREE SPACE : Frame Buffer = 260127616 B (248 MB)
[m3video] MMFSR = 0x00
[m3video] BFSR = 0x04
[m3vpss ] 16071: SYSTEM : FREE SPACE : Bitstream Buffer = 193744768 B (184 MB)
[m3video] UFSR = 0x0000
[m3video] HFSR = 0x40000000
[m3vpss ] 16072: SYSTEM : FREE SPACE : Tiler 8-bit = 89128960 B (85 MB) - TILER ON
[m3video] DFSR = 0x00000000
[m3video] MMAR = 0xe000ed34
[m3vpss ] 16072: SYSTEM : FREE SPACE : Tiler 16-bit = 44040192 B (42 MB) - TILER ON
[m3video] BFAR = 0xe000ed38
[m3video] AFSR = 0x00000000
[m3vpss ] alex NsfLink_drvInitCh 0 inputFrameRate=60
[m3video] Terminating Execution...
[m3vpss ] alex NsfLink_drvInitCh 0 outputFrameRate=60
[m3vpss ] alex NsfLink_drvInitCh 420buf before enc,numBufsPerCh=8
[m3vpss ] NSF:ALLOCINFO:WIDTH[1920]:HEIGHT[1088]:PITCH[16384]:ChId[0]:MEMTYPE[1]
[m3vpss ] NSF::HEAPID:0 USED:128
[m3vpss ] NSF::HEAPID:1 USED:4928
[m3vpss ] 16074: NSF: Create Done !!!
[m3vpss ] 16074: After Create NSF
[m3vpss ] 16074: SYSTEM : FREE SPACE : System Heap = 5656 B, Mbx = 10239 msgs)
[m3vpss ] 16075: SYSTEM : FREE SPACE : SR0 Heap = 11003648 B (10 MB)
[m3vpss ] 16075: SYSTEM : FREE SPACE : Frame Buffer = 260127616 B (248 MB)
[m3vpss ] 16075: SYSTEM : FREE SPACE : Bitstream Buffer = 193744768 B (184 MB)
[m3vpss ] 16075: SYSTEM : FREE SPACE : Tiler 8-bit = 71303168 B (68 MB) - TILER ON
[m3vpss ] 16075: SYSTEM : FREE SPACE : Tiler 16-bit = 26214400 B (25 MB) - TILER ON
[m3vpss ] 16565: IPC_FRAMES_OUT : Create in progress !!!
[m3vpss ] alex swosd inChId=0x1, tempVal=0x96d1ab24
[m3vpss ] 16567: IPC_FRAMES_OUT : Create Done !!!
[host] CHAINS_IPCBITS Chains_ipcBitsRecvFxn:INFO: periodic print..
[host] CHAINS_IPCBITS:Chains_ipcBitsSendFxn:INFO: periodic print..
[host] CHAINS_IPCBITS:Chains_ipcBitsSendFxn_decoder:INFO: periodic print..
[host] CHAINS_IPCBITS Chains_ipcBitsRecvFxn:INFO: periodic print..
[host] CHAINS_IPCBITS:Chains_ipcBitsSendFxn:INFO: periodic print..
[host] CHAINS_IPCBITS:Chains_ipcBitsSendFxn_decoder:INFO: periodic print..
关键代码如下:
#define MULTICH_INIT_STRUCT(structName,structObj) structName##_Init(&structObj)
AlgLink_CreateParams dspAlgPrm;
UInt32 dspAlgId;
dspAlgId = SYSTEM_LINK_ID_VIDEO_ALG_0;
MULTICH_INIT_STRUCT(AlgLink_CreateParams, dspAlgPrm);
dspAlgPrm.inQueParams.prevLinkId = ipcFramesInDspId;
dspAlgPrm.inQueParams.prevLinkQueId = 0;
dspAlgPrm.enableOSDAlg = TRUE;
dspAlgPrm.enableSCDAlg = FALSE;
dspAlgPrm.outQueParams[ALG_LINK_SCD_OUT_QUE].nextLink = SYSTEM_LINK_ID_INVALID; //[]should be zero
int chId;
for(chId = 0; chId < ALG_LINK_OSD_MAX_CH; chId++)
{
//chDefaultParams应该是在AlgLink_OsdalgCreate时的默认配置
AlgLink_OsdChWinParams * chWinPrm = &dspAlgPrm.osdChCreateParams[chId].chDefaultParams;
/* set osd window max width and height */
dspAlgPrm.osdChCreateParams[chId].maxWidth = 320;
dspAlgPrm.osdChCreateParams[chId].maxHeight = 64;
chWinPrm->chId = chId;
chWinPrm->numWindows = 0;
}
System_linkCreate(dspAlgId, &dspAlgPrm, sizeof(dspAlgPrm));