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 swosd link create问题



问题描述如下,请帮分析可能原因。谢谢!

另外,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));