My customer met an issue when run the HEVC encoder on two chips mode, single chip is fine. DSP procedure use sv04 framework, but the encoder will stuck on process() API when encode the first frame.
After add some printf/log in both siuVidMc3LockAcquire and siuVidMc3LockRelease, we found that these functions will be called constantly. Please refer to attached log.
Below are the changes which made different comparing to the official release sv04:
1) c2c memory map on these two C6678:
siuVidMc3_set_C2C_mapping(1, (XDAS_Void*)0x2620000, 0, (XDAS_Void*)0x62020000, 0x1000);
siuVidMc3_set_C2C_mapping(1, (XDAS_Void*)0x2620000, 0, (XDAS_Void*)0x62820000, 0x1000);
siuVidMc3_set_C2C_mapping(1, (XDAS_Void*)0x81E00000, 0, (XDAS_Void*)0x63000000, 16<<20);
siuVidMc3_set_C2C_mapping(1, (XDAS_Void*)0x81E00000, 0, (XDAS_Void*)0x64000000, 8<<20);
siuVidMc3_set_C2C_mapping(0, (XDAS_Void*)0x2620000, 1, (XDAS_Void*)0x62020000, 0x1000);
siuVidMc3_set_C2C_mapping(0, (XDAS_Void*)0x2620000, 1, (XDAS_Void*)0x62820000, 0x1000);
siuVidMc3_set_C2C_mapping(0, (XDAS_Void*)0x81E00000, 1, (XDAS_Void*)0x63000000, 16<<20);
siuVidMc3_set_C2C_mapping(0, (XDAS_Void*)0x81E00000, 1, (XDAS_Void*)0x64000000, 8<<20);
memory mapping should be fine which proved by simple writing test.
2) Below segment in original link.cmd of sv04 has been deleted since the customer designed a simple communication mechanism which proved in single chip.
MAILBOX_DSP_TO_HOST : origin = 0x80000000, length = 0x00180000
MAILBOX_HOST_TO_DSP : origin = 0x80180000, length = 0x00180000
Would you please answer below questions:
1. Why siuVidMc3LockAcquire and siuVidMc3LockRelease called constantly when encoder stuck in process()? Any clue to solve the issue?
2. From the code siuVctReceiveInput()@ siu\vct\SiuVctRun.c ,loos only core 0 have valid input parameter (if(node_id == CORE_TEAM_MAPPING[0]))
other slavecores have below
rxMsgPayload->msgId = HOST2DSP_MEDIA_PROCESS_REQ;
rxMsgPayload->u.process.inBufPtr[0] = NULL;
rxMsgPayload->u.process.inBufSize[0] = 0;
rxMsgPayload->u.process.outBufPtr[0] = NULL;
rxMsgPayload->u.process.inputId = 0xFFFFFFFF;
how do these slave cores get yuv data? Does this information pass by tTaskParam.algInArgs.inputBufs = (XDAS_Int8 **)&sharedInputBufPtrX86[0]? If that, how to pass the sharedInputBufPtrX86[0] to the slave cores?