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.

8168 RDK4.0 Swms YUV420 failed



Hi , TIers!

I'm using DM8168 with RDK 4.0

my usecase : Capture ----> Swms(output dataformat = YUV420) ----> Display

Encountered issues:

 [m3vpss ]  7362: Assertion @ Line: 1134 in links_m3vpss/display/displayLink_drv.c: pObj->displayHndl != NULL : failed !!!

OR

 [m3vpss ]  7356: Assertion @ Line: 941 in links_m3vpss/display/displayLink_drv.c: status == FVID2_SOK : failed !!!

============================================================================

My usecase file :

Void Chains_SingleChCapDis(P_CHANNEL_DISCRIPTOR pChannels)
{
    UInt32 displayVector[4];

    CaptureLink_CreateParams    capturePrm;
    CaptureLink_VipInstParams   * pCaptureInstPrm;
    CaptureLink_OutParams       * pCaptureOutPrm;
    SwMsLink_CreateParams       swMsPrm;
    DisplayLink_CreateParams    displayPrm;

    UInt32 captureId, vipInstId;
    UInt32 swMsId;
    UInt32 displayId;

    Int32 i;
    char ch;

    CHAINS_INIT_STRUCT(SwMsLink_CreateParams,swMsPrm);
    CHAINS_INIT_STRUCT(DisplayLink_CreateParams,displayPrm);

    captureId     = SYSTEM_LINK_ID_CAPTURE;
    swMsId          = SYSTEM_LINK_ID_SW_MS_MULTI_INST_0;
    displayId     = SYSTEM_LINK_ID_DISPLAY_0;

    CaptureLink_CreateParams_Init(&capturePrm);
    capturePrm.numVipInst               = 4;
    capturePrm.tilerEnable              = FALSE;
    capturePrm.numBufsPerCh             = 16;
    capturePrm.numExtraBufs             = 0;
    capturePrm.maxBlindAreasPerCh       = 0;
    capturePrm.isPalMode                = FALSE;
    capturePrm.enableSdCrop             = FALSE;
    capturePrm.doCropInCapture          = FALSE;

    for (i=0; i<capturePrm.numVipInst; i++)
    {
        vipInstId = SYSTEM_CAPTURE_INST_VIP0_PORTA + i;
        pCaptureInstPrm                     = &capturePrm.vipInst[i];
        pCaptureInstPrm->vipInstId          = vipInstId % SYSTEM_CAPTURE_INST_MAX;
        pCaptureInstPrm->videoDecoderId     = 0;
        pCaptureInstPrm->inDataFormat       = SYSTEM_DF_YUV422P;
        pCaptureInstPrm->standard           = SYSTEM_STD_1080P_30;
        pCaptureInstPrm->numOutput          = 1;
        pCaptureInstPrm->numChPerOutput     = 1;

        pCaptureOutPrm                      = &pCaptureInstPrm->outParams[0];
        pCaptureOutPrm->dataFormat          = SYSTEM_DF_YUV422I_YUYV;
        pCaptureOutPrm->scEnable            = FALSE;
        pCaptureOutPrm->outQueId            = 0;
    }
    capturePrm.outQueParams[0].nextLink     = swMsId;

    System_linkCreate(captureId, &capturePrm, sizeof(capturePrm));

    //////////////////////////////////////////////////////////////////////////////

    swMsPrm.numSwMsInst            = 2;
    swMsPrm.swMsInstId[0]             = SYSTEM_SW_MS_SC_INST_VIP0_SC_NO_DEI;
    swMsPrm.swMsInstStartWin[0]    = 0;
    swMsPrm.swMsInstId[1]             = SYSTEM_SW_MS_SC_INST_VIP1_SC_NO_DEI;
    swMsPrm.swMsInstStartWin[1]    = 3;

    swMsPrm.inQueParams.prevLinkId    = captureId;
    swMsPrm.inQueParams.prevLinkQueId = 0;
    swMsPrm.outQueParams.nextLink     = displayId;
    swMsPrm.lineSkipMode              = FALSE;
    swMsPrm.enableLayoutGridDraw      = TRUE;
    swMsPrm.layoutPrm.outputFPS       = 30;
    swMsPrm.maxInputQueLen            = 64;
    swMsPrm.maxOutRes                 = SYSTEM_STD_1080P_30;
    swMsPrm.numOutBuf                 = 256;
    swMsPrm.outputBufModified          =    TRUE;
    swMsPrm.outDataFormat              = SYSTEM_DF_YUV420SP_UV;

    SwMsSetLayoutParams(swMsId, SWMS_LAYOUT_PATTERN_1PLUS5, &swMsPrm);

    //////////////////////////////////////////////////////////////////////////////

    displayPrm.displayRes                   = SYSTEM_STD_1080P_30;
    displayPrm.numInputQueues               = 1;
    displayPrm.activeQueue                  = 0;
    displayPrm.inQueParams[0].prevLinkId    = swMsId;
    displayPrm.inQueParams[0].prevLinkQueId = 0;
    displayPrm.forceFieldSeparatedInputMode = FALSE;
    displayPrm.maxDriverQueLength           = DISPLAY_LINK_MAX_DRIVER_QUEUE_LENGTH_DEFAULT;
    displayPrm.displayId                    = DISPLAY_LINK_DISPLAY_SD;

===============================================================================

And I have tried all valid value of displayPrm.displayId, but no one is effective.

How can I fix this issue?

  • Can you try with below patch :

    diff --git a/mcfw/src_bios6/links_m3vpss/system/system_dctrl.c b/mcfw/src_bios6/links_m3vpss/system/system_dctrl.c
    index 7de649b..819118d 100755
    --- a/mcfw/src_bios6/links_m3vpss/system/system_dctrl.c
    +++ b/mcfw/src_bios6/links_m3vpss/system/system_dctrl.c
    @@ -34,10 +34,12 @@ Vps_DcConfig gSystem_dctrlTriDisplayConfigDvo2 = {
          {VPS_DC_GRPX0_INPUT_PATH, VPS_DC_HDMI_BLEND}     ,
          {VPS_DC_GRPX1_INPUT_PATH, VPS_DC_HDCOMP_BLEND}     ,
          {VPS_DC_GRPX1_INPUT_PATH, VPS_DC_DVO2_BLEND},
    -     {VPS_DC_GRPX2_INPUT_PATH, VPS_DC_HDMI_BLEND}
    -     }
    +     {VPS_DC_GRPX2_INPUT_PATH, VPS_DC_HDMI_BLEND},
    +     {VPS_DC_MAIN_INPUT_PATH, VPS_DC_VCOMP},
    +     {VPS_DC_AUX_INPUT_PATH, VPS_DC_HDCOMP_MUX}
    +    }
         ,
    -    13,
    +    15,
         /* VENC information */
         {
          /* Mode information */
    @@ -92,9 +94,11 @@ Vps_DcConfig gSystem_dctrlTriDisplayConfigHdmi = {
          {VPS_DC_GRPX0_INPUT_PATH, VPS_DC_HDCOMP_BLEND},
          {VPS_DC_GRPX1_INPUT_PATH, VPS_DC_DVO2_BLEND},
          {VPS_DC_GRPX2_INPUT_PATH, VPS_DC_SDVENC_BLEND},
    -     {VPS_DC_GRPX2_INPUT_PATH, VPS_DC_HDMI_BLEND}
    +     {VPS_DC_GRPX2_INPUT_PATH, VPS_DC_HDMI_BLEND},
    +     {VPS_DC_MAIN_INPUT_PATH, VPS_DC_VCOMP},
    +     {VPS_DC_AUX_INPUT_PATH, VPS_DC_HDCOMP_MUX}
          } ,
    -    14,
    +    16,
         /* VENC information */
         {
          /* Mode information */

  • Thanks for your reply, Badri

    I have tried to apply the patch, but the issue still exists...

    When displayID is set as DISPLAY_LINK_DISPLAY_SC1 or DISPLAY_LINK_DISPLAY_SC2,

     [m3vpss ]  7362: Assertion @ Line: 1134 in links_m3vpss/display/displayLink_drv.c: pObj->displayHndl != NULL : failed !!!

    When displayID is set as DISPLAY_LINK_DISPLAY_BP0, DISPLAY_LINK_DISPLAY_BP1 or DISPLAY_LINK_DISPLAY_SD,

     [m3vpss ]  7356: Assertion @ Line: 941 in links_m3vpss/display/displayLink_drv.c: status == FVID2_SOK : failed !!!

    Looking forward your furthur suggestion!

  • Below changes are required:

    1.Display controller patch:

    diff --git a/mcfw/src_bios6/links_m3vpss/system/system_dctrl.c b/mcfw/src_bios6/links_m3vpss/system/system_dctrl.c
    index 7de649b..819118d 100755
    --- a/mcfw/src_bios6/links_m3vpss/system/system_dctrl.c
    +++ b/mcfw/src_bios6/links_m3vpss/system/system_dctrl.c
    @@ -34,10 +34,12 @@ Vps_DcConfig gSystem_dctrlTriDisplayConfigDvo2 = {
          {VPS_DC_GRPX0_INPUT_PATH, VPS_DC_HDMI_BLEND}     ,
          {VPS_DC_GRPX1_INPUT_PATH, VPS_DC_HDCOMP_BLEND}     ,
          {VPS_DC_GRPX1_INPUT_PATH, VPS_DC_DVO2_BLEND},
    -     {VPS_DC_GRPX2_INPUT_PATH, VPS_DC_HDMI_BLEND}
    -     }
    +     {VPS_DC_GRPX2_INPUT_PATH, VPS_DC_HDMI_BLEND},
    +     {VPS_DC_MAIN_INPUT_PATH, VPS_DC_VCOMP},
    +     {VPS_DC_AUX_INPUT_PATH, VPS_DC_HDCOMP_MUX}
    +    }
         ,
    -    13,
    +    15,
         /* VENC information */
         {
          /* Mode information */
    @@ -92,9 +94,11 @@ Vps_DcConfig gSystem_dctrlTriDisplayConfigHdmi = {
          {VPS_DC_GRPX0_INPUT_PATH, VPS_DC_HDCOMP_BLEND},
          {VPS_DC_GRPX1_INPUT_PATH, VPS_DC_DVO2_BLEND},
          {VPS_DC_GRPX2_INPUT_PATH, VPS_DC_SDVENC_BLEND},
    -     {VPS_DC_GRPX2_INPUT_PATH, VPS_DC_HDMI_BLEND}
    +     {VPS_DC_GRPX2_INPUT_PATH, VPS_DC_HDMI_BLEND},
    +     {VPS_DC_MAIN_INPUT_PATH, VPS_DC_VCOMP},
    +     {VPS_DC_AUX_INPUT_PATH, VPS_DC_HDCOMP_MUX}
          } ,
    -    14,
    +    16,
         /* VENC information */
         {
          /* Mode information */

    2.    displayPrm.displayId = DISPLAY_LINK_DISPLAY_SC1;

    3.

        swMsPrm.numSwMsInst = 2;
        swMsPrm.swMsInstId[0] = SYSTEM_SW_MS_SC_INST_VIP0_SC;
        swMsPrm.swMsInstStartWin[0] = 0;
        swMsPrm.swMsInstId[1] = SYSTEM_SW_MS_SC_INST_VIP1_SC;
        swMsPrm.swMsInstStartWin[1] = 3;
    


    Check with all these changes included.


     

  • When capture.tilerEnable = TRUE and dataFormat = SYSTEM_DF_YUV420SP_UV,

    encountered one issue:

     [m3vpss ]  5715: CAPTURE: Create in progress !!!
     [m3vpss ]  5745: CAPTURE: VIP0 PortA capture mode is [ 8-bit, Non-mux Discrete Sync - ACTVID_VSYNC] !!!
     [m3vpss ]  5748: CAPTURE: VIP0 PortB capture mode is [ 8-bit, Non-mux Discrete Sync - ACTVID_VSYNC] !!!
     [m3vpss ]  5753: CAPTURE: VIP1 PortA capture mode is [ 8-bit, Non-mux Discrete Sync - ACTVID_VSYNC] !!!
     [m3vpss ]  5759: CAPTURE: VIP1 PortB capture mode is [ 8-bit, Non-mux Discrete Sync - ACTVID_VSYNC] !!!
     [m3vpss ]  5762: Assertion @ Line: 1592 in utils/src/tile_alg_binpack.c: tilerAddr != UTILS_TILER_INVALID_ADDR : failed !!!

    I want captureLINK to output 420-format data in tiled memory, how can I fix this issue?

    Thanks a lot!

  • The assert indicates tiler memory is exceeded. Set the CapturePrm. numBufPerCh = 5 not 16.