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.

DVRRDK question on output display resolution

Hi, I am using DVRRDK 4.0,

in the demo, the menu gDemo_ResolutionMenu don't have option 1080i60 or 1080i50. What do I need to do if I want the tied display HDMI and HDCOMP to output in 1080i ?

Thanks

  • any idea please? thanks

  • Will you be displaying progressive frames or interlaced fields on 1080i60 display ? Refer the app note part of DVR RDK to add custom display resolution although 1080i60 is already supported and you dont have to make these changes. You should just select the correct display resolution enum in your application if you want to display 1080i

    For displaying fields on 1080i60 some changes are required in displayLink. Refer:

    http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/717/p/223439/786638.aspx#786638

     

  • Hi Bachi,

    I have progressive video frames and want to let user able to select between different output resolution, including 1080i60 and 1080i50

    There is no these resolution in the demo, but the flow should be the same as other resolution, right?

    The part I see that needs to be changed is Vdis_setResolution(), is there a different timing like VDIS_TIMINGS_1080P_60 for case of 1080i60?

    and is there other part that needs to be changed?

    Thanks

  • any more hint please? thanks

  • You will have to add 1080i60 resolution . Steps to add resolution are documented in detail in the app nate DM81xx_DVR_RDK_Custom_Display_Resolution.pdf.

    1080i60 sysfs timings are defined in sysfs.h and are supported by HDVPSS driver . They are not exposed at MCFW API layer.Below is the 1080i60 timing info

    74250: display pixel clock(KHz)
    1920: display width
    88: horizontal front porch
    148: horizontal back porch
    44: horizontal sync width
    1080: display height
    2: vertical front porch
    15: vertical back porch
    5: vertical sync width
    0: interlaced output 

  • Hi Bachi,

    I tried adding the output resolution 1080i60 according to the document you mentioned above, and then tried tried running the demo DEMO_VDEC_VDIS and change HDMI resolution to 1080i60, 

    but then I got the assertion 

    [m3vpss ] 161652: DISPLAY: Stop in progress !!!
    [m3vpss ] 161710: DISPLAY: Stop Done !!!
    [m3vpss ] 164642: Assertion @ Line: 922 in links_m3vpss/display/displayLink_drv.c: status == FVID2_SOK : failed !!! 

    What could be the problem? The changes I have are

    1. in ti_vdis_timings.h,

    #define VDIS_TIMINGS_1080I_60 "74250,1920/88/148/44,1080/2/15/5,0"
    #define VDIS_TIMINGS_1080I_50 "74250,1920/528/148/44,1080/2/15/5,0"

    2. in ti_vdis.c, Vdis_setResolution() each case add

    case VSYS_STD_1080I_60:
    Vdis_sysfsCmd(3,VDIS_SYSFSCMD_SETTIMINGS, VDIS_SYSFS_HDMI, VDIS_TIMINGS_1080I_60);
    break;
    case VSYS_STD_1080I_50:
    Vdis_sysfsCmd(3,VDIS_SYSFSCMD_SETTIMINGS, VDIS_SYSFS_HDMI, VDIS_TIMINGS_1080I_50);
    break;

    3. in system_m3vpss.c, System_getOutSize(), add 

    case VSYS_STD_1080I_60:
    case VSYS_STD_1080I_50:
    *width = 1920;
    *height = 1080;
    break;

    4. in multich_common.c, MultiCh_swMsGetOutSize() add 

    case VSYS_STD_1080I_60:
    case VSYS_STD_1080I_50:
    *width = 1920;
    *height = 1080;
    break;

    5. in demo_display.c, Demo_displaySettings add

    case 9:
    if (displayId != VDIS_DEV_SD)
    {
    resolution = VSYS_STD_1080I_60;
    validRes = TRUE;
    }
    else
    {
    printf("\n Resolution Not supported !!\n");
    }
    break;
    case 10:
    if (displayId != VDIS_DEV_SD)
    {
    resolution = VSYS_STD_1080I_50;
    validRes = TRUE;
    }
    else
    {
    printf("\n Resolution Not supported !!\n");
    }
    break;

  • any idea why it would assert please?

  • Hi,

          Can you provide some more details on the assertion. I am not able to get an assert check in the specified line?. May be some software version difference.

    Regards

    Faizel 

  • The DVRRDK I am using is 4.0
    and the file I got assertion is  mcfw/src_bios6/links_m3vpss/display/displayLink_drv.c

    The line asserted is the last assertion in the function

    Int32 DisplayLink_drvSetResolution(DisplayLink_Obj *pObj, UInt32 resolution)
    {
    Int32 status;

    /* For the DEI Display instances, set the DEI params */
    if (DisplayLink_drvIsDeiDisplayDrv(pObj))
    {
    System_getOutSize(
    resolution,
    &pObj->deiDispPrms.scTarWidth,
    &pObj->deiDispPrms.scTarHeight);

    status = DisplayLink_drvSetDeiDispPrmsIctl(pObj);
    }
    else
    {
    System_getOutSize(resolution,
    &pObj->displayFormat.width,
    &pObj->displayFormat.height);

    status = FVID2_setFormat(
    pObj->displayHndl,
    &pObj->displayFormat);
    }

    UTILS_assert(status == FVID2_SOK);
    return(status);
    }

  • Check with attached patch if you are able to switch.Patch is based off DVR RDK 4.1

    diff --git a/demos/mcfw_api_demos/mcfw_demo/demo_display.c b/demos/mcfw_api_demos/mcfw_demo/demo_display.c
    index 4083d7f..8c9ab3f 100755
    --- a/demos/mcfw_api_demos/mcfw_demo/demo_display.c
    +++ b/demos/mcfw_api_demos/mcfw_demo/demo_display.c
    @@ -1096,7 +1096,7 @@ int Demo_displaySettings(int demoId)
                                 break;
                             }
                             printf(gDemo_ResolutionMenu);
    -                        resolution = Demo_getIntValue("Display Id", 1, 8, 1);
    +                        resolution = Demo_getIntValue("Display Id", 1,10, 1);
                             switch(resolution) {
                                 case 1:
                                     if (displayId != VDIS_DEV_SD)
    @@ -1197,6 +1197,28 @@ int Demo_displaySettings(int demoId)
                                         }
                                     }
                                 break;
    +                            case 9:
    +                             if (displayId != VDIS_DEV_SD)
    +                             {
    +                                 resolution = VSYS_STD_1080I_60;
    +                                 validRes = TRUE;
    +                             }
    +                             else
    +                             {
    +                                 printf("\n Resolution Not supported !!\n");
    +                             }
    +                             break;
    +                             case 10:
    +                             if (displayId != VDIS_DEV_SD)
    +                             {
    +                                 resolution = VSYS_STD_1080I_50;
    +                                 validRes = TRUE;
    +                             }
    +                             else
    +                             {
    +                                 printf("\n Resolution Not supported !!\n");
    +                             }
    +                             break;
                                 default:
                                     resolution = VSYS_STD_1080P_60;
     
    diff --git a/mcfw/interfaces/ti_vdis_timings.h b/mcfw/interfaces/ti_vdis_timings.h
    index 237de76..9022786 100755
    --- a/mcfw/interfaces/ti_vdis_timings.h
    +++ b/mcfw/interfaces/ti_vdis_timings.h
    @@ -101,6 +101,8 @@ static inline int Vdis_sysfsWrite(char *fileName, char *val)
     #define VDIS_TIMINGS_576P     "27000,720/12/68/64,576/5/39/5,1"
     #define VDIS_TIMINGS_VGA_CEA  "25200,640/16/48/96,480/9/34/2,1"
     #define VDIS_TIMINGS_VGA_VESA "25175,640/16/48/96,480/11/31/2,1"
    +#define VDIS_TIMINGS_1080I_60 "74250,1920/88/148/44,1080/2/15/5,0"
    +#define VDIS_TIMINGS_1080I_50 "74250,1920/528/148/44,1080/2/15/5,0"
     #define VDIS_MODE_NTSC        "ntsc"
     #define VDIS_MODE_PAL         "pal"
     
    diff --git a/mcfw/src_bios6/links_m3vpss/display/displayLink_drv.c b/mcfw/src_bios6/links_m3vpss/display/displayLink_drv.c
    index dc36103..f5a0537 100755
    --- a/mcfw/src_bios6/links_m3vpss/display/displayLink_drv.c
    +++ b/mcfw/src_bios6/links_m3vpss/display/displayLink_drv.c
    @@ -55,17 +55,19 @@ static inline Bool DisplayLink_drvIsDeiDisplayDrv(DisplayLink_Obj * pObj)
     }
     
     static
    -Bool  DisplayLink_drvIsSDDef(DisplayLink_Obj * pObj)
    +Bool  DisplayLink_drvIsInterlacedDislay(UInt32  displayRes)
     {
    -    Bool isSdDef = FALSE;
    +    Bool isInterlacedDisplay = FALSE;
     
    -    if ((VSYS_STD_NTSC == pObj->createArgs.displayRes)
    +    if ((VSYS_STD_NTSC == displayRes)
             ||
    -        (VSYS_STD_PAL == pObj->createArgs.displayRes))
    +        (VSYS_STD_PAL == displayRes)
    +        ||
    +        (VSYS_STD_1080I_60 == displayRes))
         {
    -        isSdDef = TRUE;
    +        isInterlacedDisplay = TRUE;
         }
    -    return isSdDef;
    +    return isInterlacedDisplay;
     }
     
     static
    @@ -73,7 +75,7 @@ Bool DisplayLink_drvDoInputPitchDoubling(DisplayLink_Obj * pObj)
     {
         Bool doPitchDouble = FALSE;
     
    -    if (DisplayLink_drvIsSDDef(pObj)
    +    if (DisplayLink_drvIsInterlacedDislay(pObj->createArgs.displayRes)
             &&
             pObj->displayFormat.fieldMerged[0] == FALSE
             &&
    @@ -905,7 +907,10 @@ Int32 DisplayLink_drvSetResolution(DisplayLink_Obj *pObj, UInt32 resolution)
                 resolution,
                 &pObj->deiDispPrms.scTarWidth,
                 &pObj->deiDispPrms.scTarHeight);
    -
    +        if (DisplayLink_drvIsInterlacedDislay(resolution))
    +        {
    +            pObj->deiDispPrms.fmt.scanFormat = FVID2_SF_INTERLACED;
    +        }
             status = DisplayLink_drvSetDeiDispPrmsIctl(pObj);
         }
         else
    @@ -913,13 +918,17 @@ Int32 DisplayLink_drvSetResolution(DisplayLink_Obj *pObj, UInt32 resolution)
             System_getOutSize(resolution,
                               &pObj->displayFormat.width,
                               &pObj->displayFormat.height);
    -
    +        if (DisplayLink_drvIsInterlacedDislay(resolution))
    +        {
    +            pObj->displayFormat.scanFormat = FVID2_SF_INTERLACED;
    +        }
             status = FVID2_setFormat(
                         pObj->displayHndl,
                         &pObj->displayFormat);
         }
     
         UTILS_assert(status == FVID2_SOK);
    +    pObj->createArgs.displayRes = resolution;
         return(status);
     }
     
    @@ -1080,7 +1089,7 @@ Int32 DisplayLink_drvDisplayCreate(DisplayLink_Obj * pObj)
     
             pFormat->scanFormat = FVID2_SF_INTERLACED;
             pFormat->fieldMerged[0] = TRUE;
    -        if (DisplayLink_drvIsSDDef(pObj))
    +        if (DisplayLink_drvIsInterlacedDislay(pObj->createArgs.displayRes))
             {
                 for (i = 0; i < pObj->createArgs.numInputQueues; i++)
                 {
    @@ -1158,10 +1167,12 @@ Bool DisplayLink_drvIsFieldSeparatedInput(DisplayLink_Obj * pObj,
         Bool isFieldSeparatedInput = FALSE;
         UInt32 fieldMergedHeightNTSC;
         UInt32 fieldMergedHeightPAL;
    +    UInt32 fieldMergedHeight1080I;
     
    -    UTILS_assert(DisplayLink_drvIsSDDef(pObj) == TRUE);
    +    UTILS_assert(DisplayLink_drvIsInterlacedDislay(pObj->createArgs.displayRes) == TRUE);
         fieldMergedHeightNTSC = 240;
         fieldMergedHeightPAL  = 288;
    +    fieldMergedHeight1080I = 1080;
     
         pObj->enableFieldSeparatedInputMode = FALSE;
     
    @@ -1172,7 +1183,9 @@ Bool DisplayLink_drvIsFieldSeparatedInput(DisplayLink_Obj * pObj,
             {
                 if ((queInfo->chInfo[0].height ==  fieldMergedHeightNTSC)
                     ||
    -                (queInfo->chInfo[0].height ==  fieldMergedHeightPAL))
    +                (queInfo->chInfo[0].height ==  fieldMergedHeightPAL)
    +                ||
    +                (queInfo->chInfo[0].height ==  fieldMergedHeight1080I))
                 {
                     isFieldSeparatedInput = TRUE;
                 }
    @@ -1199,7 +1212,7 @@ Void DisplayLink_drvSetFieldSeparatedInfo(DisplayLink_Obj * pObj)
             status = System_linkGetInfo(pPrm->inQueParams[i].prevLinkId,
                                         &pObj->inTskInfo[i]);
             UTILS_assert(status == FVID2_SOK);
    -        if (DisplayLink_drvIsSDDef(pObj))
    +        if (DisplayLink_drvIsInterlacedDislay(pObj->createArgs.displayRes))
             {
                 pObj->fieldInput[i] =
                 DisplayLink_drvIsFieldSeparatedInput (pObj,
    diff --git a/mcfw/src_linux/mcfw_api/ti_vdis.c b/mcfw/src_linux/mcfw_api/ti_vdis.c
    index c4e5514..e68cfdc 100755
    --- a/mcfw/src_linux/mcfw_api/ti_vdis.c
    +++ b/mcfw/src_linux/mcfw_api/ti_vdis.c
    @@ -2034,6 +2034,12 @@ Int32 Vdis_setResolution(VDIS_DEV devId, UInt32 resolution)
                         case VSYS_STD_VGA_60:
                             Vdis_sysfsCmd(3,VDIS_SYSFSCMD_SETTIMINGS, VDIS_SYSFS_HDMI,  VDIS_TIMINGS_VGA_CEA);
                         break;
    +                    case VSYS_STD_1080I_60:
    +                     Vdis_sysfsCmd(3,VDIS_SYSFSCMD_SETTIMINGS, VDIS_SYSFS_HDMI, VDIS_TIMINGS_1080I_60);
    +                     break;
    +                     case VSYS_STD_1080I_50:
    +                     Vdis_sysfsCmd(3,VDIS_SYSFSCMD_SETTIMINGS, VDIS_SYSFS_HDMI, VDIS_TIMINGS_1080I_50);
    +                     break;
                         default:
                             printf("\n Resolution not supported for HDMI!! \n");
                         break;
    @@ -2061,6 +2067,12 @@ Int32 Vdis_setResolution(VDIS_DEV devId, UInt32 resolution)
                         case VSYS_STD_SXGA_60:
                             Vdis_sysfsCmd(3,VDIS_SYSFSCMD_SETTIMINGS, VDIS_SYSFS_HDCOMP,  VDIS_TIMINGS_SXGA_60);
                         break;
    +                    case VSYS_STD_1080I_60:
    +                     Vdis_sysfsCmd(3,VDIS_SYSFSCMD_SETTIMINGS, VDIS_SYSFS_HDCOMP, VDIS_TIMINGS_1080I_60);
    +                     break;
    +                     case VSYS_STD_1080I_50:
    +                     Vdis_sysfsCmd(3,VDIS_SYSFSCMD_SETTIMINGS, VDIS_SYSFS_HDCOMP, VDIS_TIMINGS_1080I_50);
    +                     break;
                         default:
                             printf("\n Resolution not supported for HDCOMP!! \n");
                         break;
    @@ -2086,6 +2098,12 @@ Int32 Vdis_setResolution(VDIS_DEV devId, UInt32 resolution)
                         case VSYS_STD_SXGA_60:
                             Vdis_sysfsCmd(3,VDIS_SYSFSCMD_SETTIMINGS, VDIS_SYSFS_DVO2,  VDIS_TIMINGS_SXGA_60);
                         break;
    +                    case VSYS_STD_1080I_60:
    +                     Vdis_sysfsCmd(3,VDIS_SYSFSCMD_SETTIMINGS, VDIS_SYSFS_DVO2, VDIS_TIMINGS_1080I_60);
    +                     break;
    +                     case VSYS_STD_1080I_50:
    +                     Vdis_sysfsCmd(3,VDIS_SYSFSCMD_SETTIMINGS, VDIS_SYSFS_DVO2, VDIS_TIMINGS_1080I_50);
    +                     break;
                         default:
                             printf("\n Resolution not supported for DVO2!! \n");
                         break;
    @@ -2238,6 +2256,14 @@ Int32 Vdis_setResolution(VDIS_DEV devId, UInt32 resolution)
                         Vdis_sysfsCmd(3,VDIS_SYSFSCMD_SETTIMINGS, VDIS_SYSFS_HDCOMP, VDIS_TIMINGS_576P);
                         Vdis_sysfsCmd(3,VDIS_SYSFSCMD_SETTIMINGS, VDIS_SYSFS_DVO2  , VDIS_TIMINGS_576P);
                     break;
    +                case VSYS_STD_1080I_60:
    +                 Vdis_sysfsCmd(3,VDIS_SYSFSCMD_SETTIMINGS, VDIS_SYSFS_HDCOMP, VDIS_TIMINGS_1080I_60);
    +                 Vdis_sysfsCmd(3,VDIS_SYSFSCMD_SETTIMINGS, VDIS_SYSFS_DVO2, VDIS_TIMINGS_1080I_60);
    +                 break;
    +                 case VSYS_STD_1080I_50:
    +                 Vdis_sysfsCmd(3,VDIS_SYSFSCMD_SETTIMINGS, VDIS_SYSFS_HDCOMP, VDIS_TIMINGS_1080I_60);
    +                 Vdis_sysfsCmd(3,VDIS_SYSFSCMD_SETTIMINGS, VDIS_SYSFS_DVO2, VDIS_TIMINGS_1080I_50);
    +                 break;
                     default:
                         printf("\n Resolution not supported for this Venc!! \n");
                     break;
    @@ -2281,6 +2307,12 @@ Int32 Vdis_setResolution(VDIS_DEV devId, UInt32 resolution)
                     case VSYS_STD_VGA_60:
                         Vdis_sysfsCmd(3,VDIS_SYSFSCMD_SETTIMINGS, VDIS_SYSFS_HDMI,  VDIS_TIMINGS_VGA_CEA);
                     break;
    +                case VSYS_STD_1080I_60:
    +                 Vdis_sysfsCmd(3,VDIS_SYSFSCMD_SETTIMINGS, VDIS_SYSFS_HDMI, VDIS_TIMINGS_1080I_60);
    +                 break;
    +                 case VSYS_STD_1080I_50:
    +                 Vdis_sysfsCmd(3,VDIS_SYSFSCMD_SETTIMINGS, VDIS_SYSFS_HDMI, VDIS_TIMINGS_1080I_50);
    +                 break;
                     default:
                         printf("\n Resolution not supported for HDMI!! \n");
                     break;
    @@ -2338,6 +2370,14 @@ Int32 Vdis_setResolution(VDIS_DEV devId, UInt32 resolution)
                             Vdis_sysfsCmd(3,VDIS_SYSFSCMD_SETTIMINGS, VDIS_SYSFS_HDCOMP, VDIS_TIMINGS_VGA_CEA);
                             Vdis_sysfsCmd(3,VDIS_SYSFSCMD_SETTIMINGS, VDIS_SYSFS_HDMI,  VDIS_TIMINGS_VGA_CEA);
                         break;
    +                    case VSYS_STD_1080I_60:
    +                     Vdis_sysfsCmd(3,VDIS_SYSFSCMD_SETTIMINGS, VDIS_SYSFS_HDCOMP, VDIS_TIMINGS_1080I_60);
    +                     Vdis_sysfsCmd(3,VDIS_SYSFSCMD_SETTIMINGS, VDIS_SYSFS_HDMI, VDIS_TIMINGS_1080I_60);
    +                     break;
    +                     case VSYS_STD_1080I_50:
    +                     Vdis_sysfsCmd(3,VDIS_SYSFSCMD_SETTIMINGS, VDIS_SYSFS_HDCOMP, VDIS_TIMINGS_1080I_50);
    +                     Vdis_sysfsCmd(3,VDIS_SYSFSCMD_SETTIMINGS, VDIS_SYSFS_HDMI, VDIS_TIMINGS_1080I_50);
    +                     break;
                         default:
                             printf("\n Resolution not supported for HDMI!! \n");
                         break;
    @@ -2379,6 +2419,12 @@ Int32 Vdis_setResolution(VDIS_DEV devId, UInt32 resolution)
                         case VSYS_STD_576P:
                             Vdis_sysfsCmd(3,VDIS_SYSFSCMD_SETTIMINGS, VDIS_SYSFS_DVO2  , VDIS_TIMINGS_576P);
                         break;
    +                    case VSYS_STD_1080I_60:
    +                     Vdis_sysfsCmd(3,VDIS_SYSFSCMD_SETTIMINGS, VDIS_SYSFS_DVO2, VDIS_TIMINGS_1080I_60);
    +                     break;
    +                     case VSYS_STD_1080I_50:
    +                     Vdis_sysfsCmd(3,VDIS_SYSFSCMD_SETTIMINGS, VDIS_SYSFS_DVO2, VDIS_TIMINGS_1080I_50);
    +                     break;
                         default:
                             printf("\n Resolution not supported for DVO2!! \n");
                         break;