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.

1080i60 decode->display issue

Hi all,

I am working on DVR RDK 4.0 and meet a displaying problem---field is incomplete.I read data from encoded file,then decode and display  to test the interlace display,and find that field dispaly is incomplete,only one field.Did anyone  met the problem?pls TI experts check this problem ,i will give the test file to you.

The h264 file was saved  by capture&encode link in DVRRDK4.0 ,the input video resolution is 1080i60hz, you can find this h264 file in attachment 2465.error_test.rar,the file include 240 frames(480 fields) data,you can use Elecard StreamEye Tools to view the file in pc,and you will find the encode date has two different fields,one is black,the other is white,the image as follows:

  • Pls migrate to DVRRDK 4.1 which supports decoding of interlaced content.

    For interlaced decode you should set processCallLevel as FIELDLEVELPROCESSCALL in multich_vdec_vdis.c and also set the ipcBitsOutLink scanFormat as interlaced.

    Also if you are using SWMS you should use DEI scaler in SWMS.

    For 1080i60 display check if you have the attached patches.

    3681.dvrrdk_1080i.patch.txt
    diff -Naur -x '*.MK' -x '*.DEPEND' -x '*.o' -x '*.o.*' -x '*.ko' '--exclude=bin' '--exclude=build' '--exclude=lib' '--exclude=makerules' '--exclude=utils' ./demos/link_api_demos/common/chains_swMs.c ../../../dvrrdk/DVRRDK_04.01.00.02/dvr_rdk/demos/link_api_demos/common/chains_swMs.c
    --- ./demos/link_api_demos/common/chains_swMs.c	2013-10-23 14:37:56.000000000 +0800
    +++ ../../../dvrrdk/DVRRDK_04.01.00.02/dvr_rdk/demos/link_api_demos/common/chains_swMs.c	2014-01-25 21:16:03.693324683 +0800
    @@ -30,7 +30,8 @@
                 break;
             default:
             case VSYS_STD_1080I_60:
    -        case VSYS_STD_1080P_60:
    +        case VSYS_STD_1080I_50:
    +	case VSYS_STD_1080P_60:
             case VSYS_STD_1080P_30:
                 *width = 1920;
                 *height = 1080;
    diff -Naur -x '*.MK' -x '*.DEPEND' -x '*.o' -x '*.o.*' -x '*.ko' '--exclude=bin' '--exclude=build' '--exclude=lib' '--exclude=makerules' '--exclude=utils' ./demos/link_api_sd_demo/sd_demo/SD_demo_swMs.c ../../../dvrrdk/DVRRDK_04.01.00.02/dvr_rdk/demos/link_api_sd_demo/sd_demo/SD_demo_swMs.c
    --- ./demos/link_api_sd_demo/sd_demo/SD_demo_swMs.c	2013-10-23 14:37:56.000000000 +0800
    +++ ../../../dvrrdk/DVRRDK_04.01.00.02/dvr_rdk/demos/link_api_sd_demo/sd_demo/SD_demo_swMs.c	2014-01-25 21:13:50.473323136 +0800
    @@ -30,7 +30,8 @@
                 break;
             default:
             case VSYS_STD_1080I_60:
    -        case VSYS_STD_1080P_60:
    +        case VSYS_STD_1080I_50:
    +	case VSYS_STD_1080P_60:
             case VSYS_STD_1080P_30:
                 *width = 1920;
                 *height = 1080;
    diff -Naur -x '*.MK' -x '*.DEPEND' -x '*.o' -x '*.o.*' -x '*.ko' '--exclude=bin' '--exclude=build' '--exclude=lib' '--exclude=makerules' '--exclude=utils' ./demos/mcfw_api_demos/mcfw_demo/demo_display.c ../../../dvrrdk/DVRRDK_04.01.00.02/dvr_rdk/demos/mcfw_api_demos/mcfw_demo/demo_display.c
    --- ./demos/mcfw_api_demos/mcfw_demo/demo_display.c	2013-10-23 14:37:56.000000000 +0800
    +++ ../../../dvrrdk/DVRRDK_04.01.00.02/dvr_rdk/demos/mcfw_api_demos/mcfw_demo/demo_display.c	2014-01-27 12:16:50.111775361 +0800
    @@ -93,14 +93,16 @@
         "\r\n Select Display"
         "\r\n ====================="
         "\r\n"
    -    "\r\n 1: 1080P60"
    -    "\r\n 2: 720P60"
    -    "\r\n 3: XGA"
    -    "\r\n 4: SXGA"
    -    "\r\n 5: NTSC"
    -    "\r\n 6: PAL"
    -    "\r\n 7: 1080P50"
    -    "\r\n 8: 640X480P"
    +    "\r\n 1 : 1080P60"
    +    "\r\n 2 : 720P60"
    +    "\r\n 3 : XGA"
    +    "\r\n 4 : SXGA"
    +    "\r\n 5 : NTSC"
    +    "\r\n 6 : PAL"
    +    "\r\n 7 : 1080P50"
    +    "\r\n 8 : 640X480P"
    +    "\r\n 9 : 1080I60"
    +    "\n\n 10: 1080I50"
         "\r\n"
         "\r\n Enter Choice: "
     
    @@ -1096,7 +1098,7 @@
                                 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 +1199,28 @@
                                         }
                                     }
                                 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 -Naur -x '*.MK' -x '*.DEPEND' -x '*.o' -x '*.o.*' -x '*.ko' '--exclude=bin' '--exclude=build' '--exclude=lib' '--exclude=makerules' '--exclude=utils' ./demos/mcfw_api_demos/mcfw_demo/demo_swms.c ../../../dvrrdk/DVRRDK_04.01.00.02/dvr_rdk/demos/mcfw_api_demos/mcfw_demo/demo_swms.c
    --- ./demos/mcfw_api_demos/mcfw_demo/demo_swms.c	2013-10-23 14:37:56.000000000 +0800
    +++ ../../../dvrrdk/DVRRDK_04.01.00.02/dvr_rdk/demos/mcfw_api_demos/mcfw_demo/demo_swms.c	2014-01-25 21:14:02.237312681 +0800
    @@ -56,7 +56,8 @@
     
             default:
             case VSYS_STD_1080I_60:
    -        case VSYS_STD_1080P_60:
    +        case VSYS_STD_1080I_50:
    +	case VSYS_STD_1080P_60:
             case VSYS_STD_1080P_50:
             case VSYS_STD_1080P_30:
                 *width = 1920;
    diff -Naur -x '*.MK' -x '*.DEPEND' -x '*.o' -x '*.o.*' -x '*.ko' '--exclude=bin' '--exclude=build' '--exclude=lib' '--exclude=makerules' '--exclude=utils' ./mcfw/interfaces/ti_vdis_timings.h ../../../dvrrdk/DVRRDK_04.01.00.02/dvr_rdk/mcfw/interfaces/ti_vdis_timings.h
    --- ./mcfw/interfaces/ti_vdis_timings.h	2013-10-23 14:37:56.000000000 +0800
    +++ ../../../dvrrdk/DVRRDK_04.01.00.02/dvr_rdk/mcfw/interfaces/ti_vdis_timings.h	2014-01-24 14:47:38.869432210 +0800
    @@ -94,6 +94,8 @@
     
     #define VDIS_TIMINGS_1080P_60 "148500,1920/88/148/44,1080/4/36/5,1"
     #define VDIS_TIMINGS_1080P_50 "148500,1920/528/148/44,1080/4/36/5,1"
    +/*#define VDIS_TIMINGS_1080P_50 "74250,1920/528/148/44,1080/2/25/5,0"*/
    +
     #define VDIS_TIMINGS_720P_60  "74250,1280/110/220/40,720/5/20/5,1"
     #define VDIS_TIMINGS_XGA_60   "65000,1024/24/160/136,768/3/29/6,1"
     #define VDIS_TIMINGS_SXGA_60  "108000,1280/48/248/112,1024/1/38/3,1"
    @@ -101,6 +103,8 @@
     #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 -Naur -x '*.MK' -x '*.DEPEND' -x '*.o' -x '*.o.*' -x '*.ko' '--exclude=bin' '--exclude=build' '--exclude=lib' '--exclude=makerules' '--exclude=utils' ./mcfw/src_bios6/links_m3vpss/display/displayLink_drv.c ../../../dvrrdk/DVRRDK_04.01.00.02/dvr_rdk/mcfw/src_bios6/links_m3vpss/display/displayLink_drv.c
    --- ./mcfw/src_bios6/links_m3vpss/display/displayLink_drv.c	2013-10-23 14:37:56.000000000 +0800
    +++ ../../../dvrrdk/DVRRDK_04.01.00.02/dvr_rdk/mcfw/src_bios6/links_m3vpss/display/displayLink_drv.c	2014-01-25 21:33:11.781334141 +0800
    @@ -55,17 +55,21 @@
     }
     
     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_50 == displayRes)
    +	||
    +        (VSYS_STD_1080I_60 == displayRes))
         {
    -        isSdDef = TRUE;
    +        isInterlacedDisplay = TRUE;
         }
    -    return isSdDef;
    +    return isInterlacedDisplay;
     }
     
     static
    @@ -73,7 +77,7 @@
     {
         Bool doPitchDouble = FALSE;
     
    -    if (DisplayLink_drvIsSDDef(pObj)
    +    if (DisplayLink_drvIsInterlacedDislay(pObj->createArgs.displayRes)
             &&
             pObj->displayFormat.fieldMerged[0] == FALSE
             &&
    @@ -905,7 +909,14 @@
                 resolution,
                 &pObj->deiDispPrms.scTarWidth,
                 &pObj->deiDispPrms.scTarHeight);
    -
    +        if (DisplayLink_drvIsInterlacedDislay(resolution))
    +        {
    +            pObj->deiDispPrms.fmt.scanFormat = FVID2_SF_INTERLACED;
    +        }
    +        else
    +        {
    +            pObj->deiDispPrms.fmt.scanFormat = FVID2_SF_PROGRESSIVE;
    +        }
             status = DisplayLink_drvSetDeiDispPrmsIctl(pObj);
         }
         else
    @@ -913,13 +924,21 @@
             System_getOutSize(resolution,
                               &pObj->displayFormat.width,
                               &pObj->displayFormat.height);
    -
    +        if (DisplayLink_drvIsInterlacedDislay(resolution))
    +        {
    +            pObj->displayFormat.scanFormat = FVID2_SF_INTERLACED;
    +        }
    +        else
    +        {
    +            pObj->deiDispPrms.fmt.scanFormat = FVID2_SF_PROGRESSIVE;
    +        }
             status = FVID2_setFormat(
                         pObj->displayHndl,
                         &pObj->displayFormat);
         }
     
         UTILS_assert(status == FVID2_SOK);
    +    pObj->createArgs.displayRes = resolution;
         return(status);
     }
     
    @@ -1072,6 +1091,8 @@
     
         if (pObj->createArgs.displayRes == VSYS_STD_1080I_60
             ||
    +        pObj->createArgs.displayRes == VSYS_STD_1080I_50
    +        ||
             pObj->createArgs.displayRes == VSYS_STD_NTSC
             ||
             pObj->createArgs.displayRes == VSYS_STD_PAL)
    @@ -1080,7 +1101,7 @@
     
             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 +1179,12 @@
         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 +1195,9 @@
             {
                 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 +1224,7 @@
             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,
    @@ -1382,6 +1407,7 @@
             System_displayUnderflowPrint(TRUE, TRUE);
             System_memPrintHeapStatus();
         }
    +    Vps_printf("@@@@@@@@display mode %d @@@@@\n",pObj->createArgs.displayRes);
     
         return 0;
     }
    diff -Naur -x '*.MK' -x '*.DEPEND' -x '*.o' -x '*.o.*' -x '*.ko' '--exclude=bin' '--exclude=build' '--exclude=lib' '--exclude=makerules' '--exclude=utils' ./mcfw/src_bios6/links_m3vpss/system/system_dctrl.c ../../../dvrrdk/DVRRDK_04.01.00.02/dvr_rdk/mcfw/src_bios6/links_m3vpss/system/system_dctrl.c
    --- ./mcfw/src_bios6/links_m3vpss/system/system_dctrl.c	2013-10-23 14:37:56.000000000 +0800
    +++ ../../../dvrrdk/DVRRDK_04.01.00.02/dvr_rdk/mcfw/src_bios6/links_m3vpss/system/system_dctrl.c	2014-01-25 22:23:12.993330522 +0800
    @@ -34,10 +34,12 @@
          {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_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 */
    @@ -244,7 +248,8 @@
         switch(displayRes) {
             case VSYS_STD_1080P_30:
             case VSYS_STD_1080I_60:
    -            clkValue = 74250u;
    +        case VSYS_STD_1080I_50:
    +	    clkValue = 74250u;
             break;
             case VSYS_STD_720P_60:
                 clkValue = 74250;
    diff -Naur -x '*.MK' -x '*.DEPEND' -x '*.o' -x '*.o.*' -x '*.ko' '--exclude=bin' '--exclude=build' '--exclude=lib' '--exclude=makerules' '--exclude=utils' ./mcfw/src_bios6/links_m3vpss/system/system_dctrl_modeInfo.c ../../../dvrrdk/DVRRDK_04.01.00.02/dvr_rdk/mcfw/src_bios6/links_m3vpss/system/system_dctrl_modeInfo.c
    --- ./mcfw/src_bios6/links_m3vpss/system/system_dctrl_modeInfo.c	2013-10-23 14:37:56.000000000 +0800
    +++ ../../../dvrrdk/DVRRDK_04.01.00.02/dvr_rdk/mcfw/src_bios6/links_m3vpss/system/system_dctrl_modeInfo.c	2014-01-24 17:19:04.585193381 +0800
    @@ -40,7 +40,9 @@
             break;
             case VSYS_STD_1080I_60:
                 vencMode = FVID2_STD_1080I_60;
    -        break;
    +        case VSYS_STD_1080I_50:
    +            vencMode = FVID2_STD_1080I_50;
    +	break;
             case VSYS_STD_1080P_60:
                 vencMode = FVID2_STD_1080P_60;
             break;
    diff -Naur -x '*.MK' -x '*.DEPEND' -x '*.o' -x '*.o.*' -x '*.ko' '--exclude=bin' '--exclude=build' '--exclude=lib' '--exclude=makerules' '--exclude=utils' ./mcfw/src_bios6/links_m3vpss/system/system_m3vpss.c ../../../dvrrdk/DVRRDK_04.01.00.02/dvr_rdk/mcfw/src_bios6/links_m3vpss/system/system_m3vpss.c
    --- ./mcfw/src_bios6/links_m3vpss/system/system_m3vpss.c	2013-10-23 14:37:56.000000000 +0800
    +++ ../../../dvrrdk/DVRRDK_04.01.00.02/dvr_rdk/mcfw/src_bios6/links_m3vpss/system/system_m3vpss.c	2014-01-25 22:15:44.813332899 +0800
    @@ -449,7 +449,8 @@
                 break;
             default:
             case VSYS_STD_1080I_60:
    -        case VSYS_STD_1080P_60:
    +        case VSYS_STD_1080I_50:
    +	case VSYS_STD_1080P_60:
             case VSYS_STD_1080P_50:
             case VSYS_STD_1080P_30:
                 *width = 1920;
    diff -Naur -x '*.MK' -x '*.DEPEND' -x '*.o' -x '*.o.*' -x '*.ko' '--exclude=bin' '--exclude=build' '--exclude=lib' '--exclude=makerules' '--exclude=utils' ./mcfw/src_linux/mcfw_api/ti_vdis.c ../../../dvrrdk/DVRRDK_04.01.00.02/dvr_rdk/mcfw/src_linux/mcfw_api/ti_vdis.c
    --- ./mcfw/src_linux/mcfw_api/ti_vdis.c	2013-10-23 14:37:56.000000000 +0800
    +++ ../../../dvrrdk/DVRRDK_04.01.00.02/dvr_rdk/mcfw/src_linux/mcfw_api/ti_vdis.c	2014-01-27 11:27:10.623855841 +0800
    @@ -2034,6 +2034,12 @@
                         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 @@
                         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 @@
                         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 @@
                         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_50);
    +                 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 @@
                     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 @@
                             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 @@
                         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;
    diff -Naur -x '*.MK' -x '*.DEPEND' -x '*.o' -x '*.o.*' -x '*.ko' '--exclude=bin' '--exclude=build' '--exclude=lib' '--exclude=makerules' '--exclude=utils' ./mcfw/src_linux/mcfw_api/usecases/multich_common.c ../../../dvrrdk/DVRRDK_04.01.00.02/dvr_rdk/mcfw/src_linux/mcfw_api/usecases/multich_common.c
    --- ./mcfw/src_linux/mcfw_api/usecases/multich_common.c	2013-10-23 14:37:56.000000000 +0800
    +++ ../../../dvrrdk/DVRRDK_04.01.00.02/dvr_rdk/mcfw/src_linux/mcfw_api/usecases/multich_common.c	2014-01-25 21:18:55.913319402 +0800
    @@ -200,7 +200,8 @@
     
             default:
             case VSYS_STD_1080I_60:
    -        case VSYS_STD_1080P_60:
    +        case VSYS_STD_1080I_50:
    +	case VSYS_STD_1080P_60:
             case VSYS_STD_1080P_50:
             case VSYS_STD_1080P_30:
                 *width = 1920;
    

    7382.hdvpss_1080i.patch.txt
    --- ./packages/ti/psp/vps/hal/src/vpshal_hdvenc.c	2014-01-27 16:40:47.755353332 +0800
    +++ ../../../../../dvrrdk/DVRRDK_04.01.00.02/ti_tools/hdvpss/dvr_rdk_hdvpss/packages/ti/psp/vps/hal/src/vpshal_hdvenc.c	2014-01-27 16:43:31.747355404 +0800
    @@ -3059,12 +3059,11 @@
                 }
             }
     								
    -        dCfg->vsStartLine1 = ((tInfo->vFrontPorch +
    +        dCfg->vsStartLine1 = (tInfo->vFrontPorch +
                                   tInfo->vBackPorch +
                                   tInfo->vSyncLen +
    -                              tInfo->height) / 2) +
    -                              tInfo->vSyncLen +
    -                              tInfo->vBackPorch;
    +			      (tInfo->height >>1) +
    +			      tInfo->vFrontPorch);
         }
         dCfg->vsStartLine0 = tInfo->vFrontPorch;
         #ifdef VPSHAL_HDVENC_ADJUST_TIMING_FOR_SHIFT_ISSUE
    

  •  Hi ,

          Thanks for your answer.

          1、I had added some patches on the dvrRDK4.0 before, the 1080i60 display with usercase capture->dispaly(no swms link) is already ok,but when we add swms link between capture and dispaly,the dispaly is still lost one field. 

          2、can we achieve 1080i60 decode->display in the rdk4.0 with some patches? Or  have to use the DVRRDK4.1?we have dvrrdk_04.01.00.02,is the last realese version?

  • Hi,

    1.   For swMs to be used with interlaced input content, dei based swMsInstId (SYSTEM_SW_MS_SC_INST_DEIHQ_SC or SYSTEM_SW_MS_SC_INST_DEI_SC or SYSTEM_SW_MS_SC_INST_VIP0_DEI_SC) needs to be used.  With non-DEI swMsInstId, swMs assumes input content to be progressive and drops bottom field because of fid mismatch. Only even fields are displayed. Output of swMs is always progressive.

    2.  Following are the changes required to run 1080i interlaced display . All the changes posted, are on top of RDK 4.1.

    a.  Usecase modifications :

    1348.dvrrdk_decode_display_usecase_1080i.patch.txt
    diff --git a/demos/mcfw_api_demos/mcfw_demo/demo_vdec_vdis.c b/demos/mcfw_api_demos/mcfw_demo/demo_vdec_vdis.c
    index 2e18e12..d940f4c 100755
    --- a/demos/mcfw_api_demos/mcfw_demo/demo_vdec_vdis.c
    +++ b/demos/mcfw_api_demos/mcfw_demo/demo_vdec_vdis.c
    @@ -91,7 +91,7 @@ Void VdecVdis_start()
         vsysParams.numDisplays   = 2;
     #else
         vsysParams.numSwMs       = 2;
    -    vsysParams.numDisplays   = 2;
    +    vsysParams.numDisplays   = 1;
     #endif
     
         printf ("--------------- CHANNEL DETAILS-------------\n");
    @@ -173,7 +173,7 @@ Void VdecVdis_start()
         /* Override the context here as needed */
         vdisParams.numChannels = gVdecVdis_config.fileNum;
     
    -    vdisParams.deviceParams[VDIS_DEV_HDMI].resolution   = DEMO_HD_DISPLAY_DEFAULT_STD;
    +    vdisParams.deviceParams[VDIS_DEV_HDMI].resolution   = VSYS_STD_1080I_60;
         /* Since HDCOMP and DVO2 are tied together they must have same resolution */
         vdisParams.deviceParams[VDIS_DEV_HDCOMP].resolution = DEMO_HD_DISPLAY_DEFAULT_STD;
         vdisParams.deviceParams[VDIS_DEV_DVO2].resolution   =
    @@ -227,6 +227,7 @@ Void VdecVdis_start()
         vdisParams.mosaicParams[i].userSetDefaultSWMLayout = TRUE;
     
     #endif
    +    vdisParams.enableHdmiControl = FALSE;
         Vdis_init(&vdisParams);
     
         wallTimeBase = get_current_time_to_msec();
    diff --git a/mcfw/src_linux/mcfw_api/usecases/ti81xx/multich_vdec_vdis.c b/mcfw/src_linux/mcfw_api/usecases/ti81xx/multich_vdec_vdis.c
    index 0f96999..bc9b8e6 100755
    --- a/mcfw/src_linux/mcfw_api/usecases/ti81xx/multich_vdec_vdis.c
    +++ b/mcfw/src_linux/mcfw_api/usecases/ti81xx/multich_vdec_vdis.c
    @@ -83,7 +83,6 @@
      */
     
     
    -
     #define MAX_DEC_OUT_FRAMES_PER_CH                           (5)
     #define MULTICH_VDEC_VDIS_IPCFRAMEEXPORT_NUM_CHANNELS       (16)
     #define MULTICH_VDEC_VDIS_IPCFRAMEEXPORT_FRAME_WIDTH        (720)
    @@ -171,8 +170,8 @@ typedef struct {
         UInt32 ipcInVpssId;
         UInt32 mergeId;
         Bool   enableVideoFrameExport;
    +    UInt32 deiId;
         AvsyncLink_LinkSynchConfigParams   avsyncCfg[VDIS_DEV_MAX];
    -    UInt32 mpSclrId;
     
     } MultiCh_VdecVdisObj;
     
    @@ -202,73 +201,6 @@ static Void MultiCh_setIpcFramesOutInQueInfo(System_LinkQueInfo *inQueInfo)
         }
     }
     
    -static
    -Void mulich_vdec_vdis_set_avsync_vidque_prm(Avsync_SynchConfigParams *queCfg,
    -                                            Int chnum,
    -                                            UInt32 avsStartChNum,
    -                                            UInt32 avsEndChNum,
    -                                            VDIS_DEV vdDevId)
    -{
    -    queCfg->chNum = chnum;
    -    queCfg->audioPresent = FALSE;
    -    if ((queCfg->chNum >= avsStartChNum)
    -        &&
    -        (queCfg->chNum <= avsEndChNum)
    -        &&
    -        (gVsysModuleContext.vsysConfig.enableAVsync))
    -    {
    -        queCfg->avsyncEnable = TRUE;
    -    }
    -    else
    -    {
    -        queCfg->avsyncEnable = FALSE;
    -    }
    -
    -    queCfg->clkAdjustPolicy.refClkType = AVSYNC_REFCLKADJUST_NONE;
    -    queCfg->clkAdjustPolicy.clkAdjustLead = AVSYNC_VIDEO_TIMEBASESHIFT_MAX_LEAD_MS;
    -    queCfg->clkAdjustPolicy.clkAdjustLag  = AVSYNC_VIDEO_TIMEBASESHIFT_MAX_LAG_MS;
    -    queCfg->vidSynchPolicy.maxReplayLead  = AVSYNC_VIDEO_FUTURE_FRAME_DROP_THRESHOLD_MS;
    -    queCfg->vidSynchPolicy.playMaxLag  = 180;
    -    queCfg->vidSynchPolicy.playMaxLead = 0;
    -    queCfg->vidSynchPolicy.doMarginScaling = FALSE;
    -    queCfg->playTimerStartTimeout = 0;
    -    queCfg->playStartMode = AVSYNC_PLAYBACK_START_MODE_WAITSYNCH;
    -    queCfg->ptsInitMode   = AVSYNC_PTS_INIT_MODE_APP;
    -}
    -
    -static
    -Void mulich_vdec_vdis_set_avsync_prm(AvsyncLink_LinkSynchConfigParams *avsyncPrm,
    -                                     UInt32 swMsIdx,
    -                                     VDIS_DEV vdDevId)
    -{
    -    Int i;
    -    Int32 status;
    -
    -    Vdis_getAvsyncConfig(vdDevId,avsyncPrm);
    -    avsyncPrm->displayLinkID        = Vdis_getDisplayId(vdDevId);
    -    avsyncPrm->videoSynchLinkID = gVdisModuleContext.swMsId[swMsIdx];
    -    avsyncPrm->numCh            = gVdecModuleContext.vdecConfig.numChn;
    -    avsyncPrm->syncMasterChnum =  AVSYNC_INVALID_CHNUM;
    -    for (i = 0; i < avsyncPrm->numCh;i++)
    -    {
    -        mulich_vdec_vdis_set_avsync_vidque_prm(&avsyncPrm->queCfg[i],
    -                                               i,
    -                                               0,
    -                                               (0 + gVdecModuleContext.vdecConfig.numChn),
    -                                               vdDevId);
    -    }
    -    if (0 == swMsIdx)
    -    {
    -        Vdis_setAvsyncConfig(VDIS_DEV_HDMI,avsyncPrm);
    -    }
    -    else
    -    {
    -        Vdis_setAvsyncConfig(VDIS_DEV_SD,avsyncPrm);
    -    }
    -
    -    status = Avsync_configSyncConfigInfo(avsyncPrm);
    -    OSA_assert(status == 0);
    -}
     
     Void MultiCh_createVdecVdis()
     {
    @@ -278,12 +210,11 @@ Void MultiCh_createVdecVdis()
         IpcLink_CreateParams        ipcOutVideoPrm;
         IpcLink_CreateParams        ipcInVpssPrm;
         DupLink_CreateParams        dupPrm;
    -    static SwMsLink_CreateParams       swMsPrm[VDIS_DEV_MAX];
         DisplayLink_CreateParams    displayPrm[VDIS_DEV_MAX];
         IpcFramesOutLinkHLOS_CreateParams  ipcFramesOutHostPrm;
         IpcFramesInLinkRTOS_CreateParams   ipcFramesInVpssFromHostPrm;
         MergeLink_CreateParams             mergePrm;
    -    MpSclrLink_CreateParams            mpSclrPrm;
    +    DeiLink_CreateParams        deiPrm;
     
         UInt32 i;
         UInt32 enableGrpx;
    @@ -300,10 +231,9 @@ Void MultiCh_createVdecVdis()
         for (i = 0; i < VDIS_DEV_MAX;i++)
         {
             MULTICH_INIT_STRUCT(DisplayLink_CreateParams,displayPrm[i]);
    -        MULTICH_INIT_STRUCT(SwMsLink_CreateParams ,swMsPrm[i]);
         }
    +    MULTICH_INIT_STRUCT(DeiLink_CreateParams,deiPrm);
     
    -    MULTICH_INIT_STRUCT(MpSclrLink_CreateParams, mpSclrPrm);
     
         MultiCh_detectBoard();
     
    @@ -358,15 +288,13 @@ Void MultiCh_createVdecVdis()
         gMultiCh_VdecVdisObj.ipcOutVideoId  = SYSTEM_VIDEO_LINK_ID_IPC_OUT_M3_0;
         gMultiCh_VdecVdisObj.ipcInVpssId    = SYSTEM_VPSS_LINK_ID_IPC_IN_M3_0;
         gMultiCh_VdecVdisObj.dupId          = SYSTEM_VPSS_LINK_ID_DUP_0;
    -    gMultiCh_VdecVdisObj.mpSclrId       = SYSTEM_LINK_ID_MP_SCLR_INST_0;
    -    gVdisModuleContext.mpSclrId         = SYSTEM_LINK_ID_MP_SCLR_INST_0;
    -    gVdisModuleContext.swMsId[0]        = SYSTEM_LINK_ID_SW_MS_MULTI_INST_0;
     
         gVdisModuleContext.displayId[0]     = SYSTEM_LINK_ID_DISPLAY_0; // ON AND OFF CHIP HDMI
    +    gMultiCh_VdecVdisObj.deiId =  SYSTEM_LINK_ID_DEI_HQ_0;
    +    gVcapModuleContext.deiId[0] = gMultiCh_VdecVdisObj.deiId;
     
         if (gVsysModuleContext.vsysConfig.numDisplays > 1)
         {
    -        gVdisModuleContext.swMsId[1]        = SYSTEM_LINK_ID_SW_MS_MULTI_INST_1;
     #if defined(TI_814X_BUILD) || defined(TI_8107_BUILD)
             gVdisModuleContext.displayId[1]     = SYSTEM_LINK_ID_DISPLAY_2; // SDTV
     #else
    @@ -406,9 +334,16 @@ Void MultiCh_createVdecVdis()
     
             ipcBitsOutHostPrm.inQueInfo.chInfo[i].height =
                 gVdecModuleContext.vdecConfig.decChannelParams[i].maxVideoHeight;
    -
    +        if(gVdecModuleContext.vdecConfig.decChannelParams[i].fieldPicture)
    +        {
             ipcBitsOutHostPrm.inQueInfo.chInfo[i].scanFormat =
    +                SYSTEM_SF_INTERLACED;
    +        }
    +        else
    +        {
    +            ipcBitsOutHostPrm.inQueInfo.chInfo[i].scanFormat =
                 SYSTEM_SF_PROGRESSIVE;
    +        }
     
             ipcBitsOutHostPrm.inQueInfo.chInfo[i].bufType        = 0; // NOT USED
             ipcBitsOutHostPrm.inQueInfo.chInfo[i].codingformat   = 0; // NOT USED
    @@ -530,124 +465,43 @@ Void MultiCh_createVdecVdis()
             mergePrm.inQueParams[1].prevLinkId    = gVdisModuleContext.ipcFramesInVpssFromHostId;
             mergePrm.inQueParams[1].prevLinkQueId = 0;
     
    -        mergePrm.outQueParams.nextLink        = gMultiCh_VdecVdisObj.mpSclrId;
    +        mergePrm.outQueParams.nextLink        = gMultiCh_VdecVdisObj.dupId;
             mergePrm.notifyNextLink               = TRUE;
    -        mpSclrPrm.inQueParams.prevLinkId      = gMultiCh_VdecVdisObj.mergeId;
         }
         else
         {
    -        mpSclrPrm.inQueParams.prevLinkId        = gMultiCh_VdecVdisObj.ipcInVpssId;
    -        ipcInVpssPrm.outQueParams[0].nextLink   = gMultiCh_VdecVdisObj.mpSclrId;
    +        ipcInVpssPrm.outQueParams[0].nextLink   = gMultiCh_VdecVdisObj.dupId;
     
         }
    -#if defined(TI_814X_BUILD) || defined(TI_8107_BUILD)
    -    mpSclrPrm.pathId = MP_SCLR_LINK_SEC0_SC3_VIP0;
    -#else
    -    mpSclrPrm.pathId = MP_SCLR_LINK_SEC1_SC4_VIP1;
    -#endif
    -
    -    mpSclrPrm.numCh = 4;
    -    mpSclrPrm.enableLineSkip = FALSE;
     
    -    mpSclrPrm.outQueParams.nextLink       = gMultiCh_VdecVdisObj.dupId;
    -    dupPrm.inQueParams.prevLinkId         = gMultiCh_VdecVdisObj.mpSclrId;
    +    dupPrm.inQueParams.prevLinkId         = gMultiCh_VdecVdisObj.ipcInVpssId;
    +    ipcInVpssPrm.outQueParams[0].nextLink   = gMultiCh_VdecVdisObj.deiId;
    +    deiPrm.inQueParams.prevLinkId           = gMultiCh_VdecVdisObj.ipcInVpssId;
    +    deiPrm.inQueParams.prevLinkQueId        = 0;
    +    deiPrm.outQueParams[DEI_LINK_OUT_QUE_DEI_SC].nextLink      = gMultiCh_VdecVdisObj.dupId;
    +    deiPrm.enableOut[DEI_LINK_OUT_QUE_DEI_SC]                   = 1;
    +    deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][0].scaleMode = DEI_SCALE_MODE_ABSOLUTE;
    +    deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][0].absoluteResolution.outWidth   = 1920;  
    +    deiPrm.outScaleFactor[DEI_LINK_OUT_QUE_DEI_SC][0].absoluteResolution.outHeight  = 540;
    +    deiPrm.enableDeiForceBypass = TRUE;
    +    deiPrm.interlacedBypassMode     = TRUE;
    +    deiPrm.inputFrameRate[DEI_LINK_OUT_QUE_DEI_SC]      = 30;
    +    deiPrm.outputFrameRate[DEI_LINK_OUT_QUE_DEI_SC]     = 30;
    +    deiPrm.disableInBufferSkip  = TRUE;
    +
    +    dupPrm.inQueParams.prevLinkId = gMultiCh_VdecVdisObj.deiId;
     
         dupPrm.inQueParams.prevLinkQueId      = 0;
         dupPrm.numOutQue                      = gVsysModuleContext.vsysConfig.numDisplays;
    -    dupPrm.outQueParams[0].nextLink       = gVdisModuleContext.swMsId[0];
    -    dupPrm.outQueParams[1].nextLink       = gVdisModuleContext.swMsId[1];
    +    dupPrm.outQueParams[0].nextLink       = gVdisModuleContext.displayId[0];
         dupPrm.notifyNextLink                 = TRUE;
    -#if defined(TI_814X_BUILD) || defined(TI_8107_BUILD)
    -
    -    swMsPrm[0].numSwMsInst = 1;
    -    swMsPrm[0].swMsInstId[0]        = SYSTEM_SW_MS_SC_INST_DEIHQ_SC_NO_DEI;
    -
    -    swMsPrm[0].swMsInstStartWin[0]  = 0;
    -    swMsPrm[0].swMsInstStartWin[1]  = 10;
    -
    -    swMsPrm[1].numSwMsInst = 1;
    -    swMsPrm[1].swMsInstId[0]        = SYSTEM_SW_MS_SC_INST_DEI_SC_NO_DEI;
    -
    -    swMsPrm[1].swMsInstStartWin[0]  = 0;
    -    swMsPrm[1].swMsInstStartWin[1]  = 10;
    -
    -    swMsPrm[0].enableProcessTieWithDisplay = TRUE;
    -    swMsPrm[1].enableProcessTieWithDisplay = FALSE;
    -
    -    /* We do not require dual output, this free up SC3 scalar */
    -    swMsPrm[0].includeVipScInDrvPath = FALSE;
    -    swMsPrm[1].includeVipScInDrvPath = FALSE;
    -#else
    -    swMsPrm[0].swMsInstId[0]        = SYSTEM_SW_MS_SC_INST_DEI_SC_NO_DEI;
    -    swMsPrm[0].swMsInstId[1]        = SYSTEM_SW_MS_SC_INST_VIP1_SC;
    -
    -    swMsPrm[1].swMsInstId[0]        = SYSTEM_SW_MS_SC_INST_DEIHQ_SC_NO_DEI;
    -    swMsPrm[1].swMsInstId[1]        = SYSTEM_SW_MS_SC_INST_VIP0_SC;
    -
    -    swMsPrm[0].numSwMsInst          = 2;
    -
    -    swMsPrm[0].swMsInstStartWin[0]  = 0;
    -    swMsPrm[0].swMsInstStartWin[1]  = 16;
    -
    -    swMsPrm[1].numSwMsInst          = swMsPrm[0].numSwMsInst;
    -    swMsPrm[1].swMsInstStartWin[0]  = swMsPrm[0].swMsInstStartWin[0];
    -    swMsPrm[1].swMsInstStartWin[1]  = swMsPrm[0].swMsInstStartWin[1];
    -
    -    swMsPrm[0].enableProcessTieWithDisplay = TRUE;
    -    swMsPrm[1].enableProcessTieWithDisplay = TRUE;
    -
    -#endif
         for(i=0; i<gVsysModuleContext.vsysConfig.numDisplays; i++)
         {
    -        VDIS_DEV vdDevId = VDIS_DEV_HDMI;
    -
    -        swMsPrm[i].inQueParams.prevLinkId     = gMultiCh_VdecVdisObj.dupId;
    -        swMsPrm[i].inQueParams.prevLinkQueId  = i;
    -        swMsPrm[i].outQueParams.nextLink      = gVdisModuleContext.displayId[i];
    -        swMsPrm[i].numOutBuf                 = MULTICH_NUM_SWMS_MAX_BUFFERS;
    -
    -        /* Disable inQue drop at SwMs as input may arrive very fast in VDEC->VDIS use case */
    -        swMsPrm[i].maxInputQueLen             = SYSTEM_SW_MS_INVALID_INPUT_QUE_LEN;
    -        if (i == 0)
    -        {
    -            vdDevId = VDIS_DEV_HDMI;
    -            swMsPrm[i].maxOutRes              = VSYS_STD_1080P_60;
    -            swMsPrm[i].initOutRes             = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_HDMI].resolution;
    -        }
    -        else if (i == 1)
    -        {
    -#if defined(TI_814X_BUILD) || defined(TI_8107_BUILD)
    -            vdDevId = VDIS_DEV_SD;
    -            swMsPrm[i].maxOutRes              = VSYS_STD_PAL;
    -            swMsPrm[i].outQueParams.nextLink  = SYSTEM_LINK_ID_DISPLAY_2;
    -            swMsPrm[i].initOutRes             = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_SD].resolution;
    -
    -#else
    -            vdDevId = VDIS_DEV_DVO2;
    -            swMsPrm[i].maxOutRes              = VSYS_STD_1080P_60;
    -            swMsPrm[i].initOutRes             = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_DVO2].resolution;
    -#endif
    -        }
    -        /* low cost line skip mode of scaling can be used, when tiler is off */
    -        if(tilerEnable)
    -            swMsPrm[i].lineSkipMode           = FALSE;
    -        else
    -            swMsPrm[i].lineSkipMode           = TRUE;
    -
    -        swMsPrm[i].enableLayoutGridDraw = gVdisModuleContext.vdisConfig.enableLayoutGridDraw;
    -
    -        MultiCh_swMsGetDefaultLayoutPrm(vdDevId, &swMsPrm[i], FALSE);    /* both from 0-16 chnl */
    -
    -        displayPrm[i].inQueParams[0].prevLinkId    = gVdisModuleContext.swMsId[i];
    +        displayPrm[i].inQueParams[0].prevLinkId    = gMultiCh_VdecVdisObj.dupId;
             displayPrm[i].inQueParams[0].prevLinkQueId = 0;
    -        displayPrm[i].displayRes                = swMsPrm[i].initOutRes;
    -        if (i == 1)
    -#if defined(TI_814X_BUILD) || defined(TI_8107_BUILD)
    -                        displayPrm[i].displayRes            = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_SD].resolution;
    -#else
    -                        displayPrm[i].displayRes            = gVdisModuleContext.vdisConfig.deviceParams[VDIS_DEV_DVO2].resolution;
    -#endif
    -        mulich_vdec_vdis_set_avsync_prm(&gMultiCh_VdecVdisObj.avsyncCfg[i],i,vdDevId);
    +        displayPrm[i].displayRes                = VSYS_STD_1080I_60;
    +        displayPrm[i].forceFieldSeparatedInputMode = FALSE;
    +        displayPrm[i].queueInISRFlag = TRUE;
         }
     
         System_linkCreate(gVdecModuleContext.ipcBitsOutHLOSId,&ipcBitsOutHostPrm,sizeof(ipcBitsOutHostPrm));
    @@ -664,13 +518,10 @@ Void MultiCh_createVdecVdis()
             System_linkCreate(gMultiCh_VdecVdisObj.mergeId,&mergePrm,sizeof(mergePrm));
         }
     
    -    System_linkCreate(gMultiCh_VdecVdisObj.mpSclrId, &mpSclrPrm, sizeof(mpSclrPrm));
    +    System_linkCreate(gMultiCh_VdecVdisObj.deiId, &deiPrm, sizeof(deiPrm));
         System_linkCreate(gMultiCh_VdecVdisObj.dupId     , &dupPrm    , sizeof(dupPrm));
     
         for(i=0; i<gVsysModuleContext.vsysConfig.numDisplays; i++)
    -        System_linkCreate(gVdisModuleContext.swMsId[i]  , &swMsPrm[i], sizeof(swMsPrm[i]));
    -
    -    for(i=0; i<gVsysModuleContext.vsysConfig.numDisplays; i++)
             System_linkCreate(gVdisModuleContext.displayId[i], &displayPrm[i], sizeof(displayPrm[i]));
     
         MultiCh_memPrintHeapStatus();
    @@ -701,7 +552,7 @@ Void MultiCh_deleteVdecVdis()
             System_linkDelete(gMultiCh_VdecVdisObj.mergeId);
         }
     
    -    System_linkDelete(gMultiCh_VdecVdisObj.mpSclrId);
    +    System_linkDelete(gMultiCh_VdecVdisObj.deiId);
         System_linkDelete(gMultiCh_VdecVdisObj.dupId);
         System_linkDelete(gMultiCh_VdecVdisObj.ipcOutVideoId );
         System_linkDelete(gMultiCh_VdecVdisObj.ipcInVpssId );
    
     Attached is a patch for decode display usecase , where swMs is replaced by dei link. Decode link output format is YUV420SP, display link expects YUV422I. So dei link is added between dec and display for format conversation. DEI link is configured in bypass mode.  

    b.  Decoder link changes :

    4760.decLink_interlaced_bottom_field_addr_correction.patch.txt
    diff --git a/mcfw/src_bios6/links_m3video/iva_dec/decLink_common.c b/mcfw/src_bios6/links_m3video/iva_dec/decLink_common.c
    index 7969c28..7cd0894 100755
    --- a/mcfw/src_bios6/links_m3video/iva_dec/decLink_common.c
    +++ b/mcfw/src_bios6/links_m3video/iva_dec/decLink_common.c
    @@ -1972,10 +1972,12 @@ static Int32 DecLink_codecGetProcessedData(DecLink_Obj * pObj)
                         actualOutList.frames[1]->fid = FVID2_FID_BOTTOM;
                         actualOutList.frames[1]->addr[0][0]  
                                = ((UInt8 *) actualOutList.frames[0]->addr[0][0] + 
    -                              pFrameInfo->rtChInfo.pitch[0]);
    +                              pFrameInfo->rtChInfo.pitch[0] *  
    +                              ( pFrameInfo->rtChInfo.height + 2 * pFrameInfo->rtChInfo.startY ) );
                         actualOutList.frames[1]->addr[0][1]  
                                = ((UInt8 *) actualOutList.frames[0]->addr[0][1] + 
    -                              pFrameInfo->rtChInfo.pitch[1]);
    +                              pFrameInfo->rtChInfo.pitch[1] * 
    +                              ( ( pFrameInfo->rtChInfo.height >> 1) + ( pFrameInfo->rtChInfo.startY ) ) );
     
                         actualOutList.numFrames++;
                     }
    
    includes fix for proper updation of  address of bottom field after decoding. 

    c.  DEI link changes :

    1. 

    3806.deiLink_disable_inBuffer_skip.patch.txt
    diff --git a/mcfw/interfaces/link_api/deiLink.h b/mcfw/interfaces/link_api/deiLink.h
    index b58ae3d..64fbed2 100755
    --- a/mcfw/interfaces/link_api/deiLink.h
    +++ b/mcfw/interfaces/link_api/deiLink.h
    @@ -361,6 +361,12 @@ typedef struct
              to next links. Used in cases where de-interlacing happens at swms. We need to preserve
              fids till swms in this case.
              interlacedBypassMode = FALSE, data will be de-interlaced */
    +
    +    UInt32                       disableInBufferSkip;
    +    /**< disableInBufferSkip = FALSE, skips input buffer when output buffer is not 
    +         available.
    +         disableInBufferSkip = TRUE, does not skip inBuffer. Process it after out 
    +         buffer is available.*/
     } DeiLink_CreateParams;
     
     /**
    @@ -526,6 +532,7 @@ static inline void DeiLink_CreateParams_Init(DeiLink_CreateParams *pPrm)
         pPrm->enableDualVipOut = FALSE;
         pPrm->enableInputFrameRateUpscale = FALSE;
         pPrm->interlacedBypassMode = FALSE;
    +    pPrm->disableInBufferSkip = FALSE;
     }
     
     #ifdef __cplusplus
    diff --git a/mcfw/src_bios6/links_m3vpss/dei/deiLink_drv.c b/mcfw/src_bios6/links_m3vpss/dei/deiLink_drv.c
    index ba0a655..bb80030 100755
    --- a/mcfw/src_bios6/links_m3vpss/dei/deiLink_drv.c
    +++ b/mcfw/src_bios6/links_m3vpss/dei/deiLink_drv.c
    @@ -1412,6 +1412,112 @@ Int32 DeiLink_drvUpdateInputRtPrm(DeiLink_Obj * pObj, FVID2_Frame *pInFrame, UIn
         return FVID2_SOK;
     }
     
    +Bool DeiLink_drvIsOutQueEnabledForChannel(DeiLink_Obj * pObj,
    +                                          FVID2_Frame *pInFrame,
    +                                          UInt32 outId)
    +{
    +    Bool chRtOutDeiEnableOutQFlag[DEI_LINK_MAX_OUT_QUE];
    +    UInt32 EnabledOutId;
    +    DeiLink_ChObj *pChObj;
    +    
    +    pChObj = &pObj->chObj[pInFrame->channelNum];
    +
    +    if((outId == DEI_LINK_OUT_QUE_VIP_SC) ||
    +       (outId == DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT))
    +    {
    +        if (FALSE == pObj->enableDualVipOut)
    +        {
    +            EnabledOutId = DEI_LINK_OUT_QUE_VIP_SC;
    +
    +            if (pChObj->enableOut[DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT])
    +            {
    +                if (pObj->createArgs.enableDeiForceBypass == TRUE)
    +                {
    +                    chRtOutDeiEnableOutQFlag[DEI_LINK_OUT_QUE_VIP_SC] = 
    +                        pChObj->chRtOutDeiEnableOutQFlag[DEI_LINK_OUT_QUE_VIP_SC] ^ TRUE;
    +                }
    +                if ((pInFrame->fid == 1) ||
    +                        (chRtOutDeiEnableOutQFlag[DEI_LINK_OUT_QUE_VIP_SC]))
    +                    EnabledOutId = DEI_LINK_OUT_QUE_VIP_SC_SECONDARY_OUT;
    +                else
    +                    EnabledOutId = DEI_LINK_OUT_QUE_VIP_SC;
    +            }
    +        }
    +        else
    +        {
    +            return TRUE;   
    +        }
    +    }
    +    else
    +    {
    +        EnabledOutId = DEI_LINK_OUT_QUE_DEI_SC;
    +        if (pChObj->enableOut[DEI_LINK_OUT_QUE_DEI_SC_SECONDARY_OUT])
    +        {
    +            if (pObj->createArgs.enableDeiForceBypass == TRUE)
    +            {
    +               chRtOutDeiEnableOutQFlag[DEI_LINK_OUT_QUE_DEI_SC] = 
    +                    pChObj->chRtOutDeiEnableOutQFlag[DEI_LINK_OUT_QUE_DEI_SC] ^ TRUE;
    +            }
    +            if ((pInFrame->fid == 1) ||
    +                    (pChObj->chRtOutDeiEnableOutQFlag[DEI_LINK_OUT_QUE_DEI_SC]))
    +            {
    +                chRtOutDeiEnableOutQFlag[DEI_LINK_OUT_QUE_DEI_SC_SECONDARY_OUT] = 
    +                    pChObj->chRtOutDeiEnableOutQFlag[DEI_LINK_OUT_QUE_DEI_SC_SECONDARY_OUT] ^ TRUE;
    +                EnabledOutId = DEI_LINK_OUT_QUE_DEI_SC_SECONDARY_OUT;
    +                if (chRtOutDeiEnableOutQFlag[DEI_LINK_OUT_QUE_DEI_SC_SECONDARY_OUT] &&
    +                        pChObj->enableOut[DEI_LINK_OUT_QUE_DEI_SC_TERTIARY_OUT])
    +                {
    +                    EnabledOutId = DEI_LINK_OUT_QUE_DEI_SC_TERTIARY_OUT;
    +                }
    +            }
    +            else
    +            {
    +                EnabledOutId = DEI_LINK_OUT_QUE_DEI_SC;
    +            }
    +        }
    +    }
    +
    +    if(outId == EnabledOutId)
    +    {
    +        return(TRUE);
    +    }
    +    else
    +    {
    +        return(FALSE);
    +    }
    +}
    +
    +Bool DeiLink_drvIsOutbufAvailable(DeiLink_Obj * pObj,
    +                                  FVID2_Frame *pInFrame)
    +{
    +    UInt32 outId, chId;
    +    DeiLink_ChObj *pChObj;
    +    
    +    chId = pInFrame->channelNum;
    +    pChObj = &pObj->chObj[chId];
    +
    +    for(outId = 0 ; outId < DEI_LINK_MAX_OUT_QUE ; outId++)
    +    {
    +        if ((pObj->createArgs.enableOut[outId]) &&
    +                (pChObj->enableOut[outId]))
    +        {
    +            if( DeiLink_drvIsOutQueEnabledForChannel(pObj,
    +                        pInFrame,
    +                        outId) == TRUE)
    +            {
    +                if(Utils_queGetQueuedCount (&pObj->outObj[outId].emptyBufQue[chId]) == 0)
    +                {
    +                    return(FALSE);
    +                }
    +
    +            }
    +        }
    +    }
    +
    +    return (TRUE);
    +
    +}
    +
     Int32 DeiLink_drvMakeFrameLists(DeiLink_Obj * pObj,
                                     FVID2_FrameList * inFrameList,
                                     FVID2_FrameList
    @@ -1443,6 +1549,17 @@ Int32 DeiLink_drvMakeFrameLists(DeiLink_Obj * pObj,
             pChObj = &pObj->chObj[chId];
     
         check_in_que_again:
    +        if(pObj->createArgs.disableInBufferSkip == TRUE)
    +        {
    +            pInFrame = Utils_bufPeekFull(&pChObj->inQue);
    +            if (pInFrame==NULL)
    +                continue;
    +        
    +            if(DeiLink_drvIsOutbufAvailable(pObj, pInFrame) == FALSE)
    +                continue;
    +        }
    +
    +
             Utils_bufGetFullFrame(&pChObj->inQue, &pInFrame, BIOS_NO_WAIT);
     
             memset(&pChObj->deiRtPrm, 0, sizeof(pChObj->deiRtPrm));
    diff --git a/mcfw/src_bios6/links_m3vpss/dei/deiLink_tsk.c b/mcfw/src_bios6/links_m3vpss/dei/deiLink_tsk.c
    index ca7e456..0402a3a 100755
    --- a/mcfw/src_bios6/links_m3vpss/dei/deiLink_tsk.c
    +++ b/mcfw/src_bios6/links_m3vpss/dei/deiLink_tsk.c
    @@ -268,6 +268,7 @@ Int32 DeiLink_putEmptyFrames(Utils_TskHndl * pTsk, UInt16 queId,
         UInt32 chId;
         DeiLink_OutObj *pOutObj = &pObj->outObj[queId];
         Int32 status = FVID2_SOK;
    +    Bool sendNotify = FALSE;
     
         UTILS_assert(queId < DEI_LINK_MAX_OUT_QUE);
         UTILS_assert(pFrameList != NULL);
    @@ -281,5 +282,28 @@ Int32 DeiLink_putEmptyFrames(Utils_TskHndl * pTsk, UInt16 queId,
             status = Utils_quePut(&pOutObj->emptyBufQue[chId], pFrameList->frames[idx], BIOS_NO_WAIT);
             UTILS_assert(status == FVID2_SOK);
         }
    +    
    +    for (chId = 0; chId < pObj->inQueInfo.numCh; chId++)
    +    {
    +        if( Utils_bufGetFullFrameCount(&pObj->chObj[chId].inQue))
    +        {
    +            sendNotify = TRUE;
    +            break;
    +        }
    +    }
    +    
    +    if(sendNotify == TRUE)
    +    {
    +      status = Utils_tskSendCmd(&pObj->tsk,
    +                       SYSTEM_CMD_NEW_DATA);
    +      if (UTILS_ISERROR(status))
    +         {
    +             UTILS_warn("DEILINK :[%s:%d]:"
    +                        "System_sendLinkCmd SYSTEM_CMD_NEW_DATA failed"
    +                        "errCode = %d", __FILE__, __LINE__, status);
    +         }
    +    }
    +    
    +    
         return status;
     }
    
     : Includes modifications to disable input buffer skip in case output buffer is not available.

    2. 

    8765.deiLink_output_offset_correction.patch.txt
    diff --git a/mcfw/src_bios6/links_m3vpss/dei/deiLink_drv.c b/mcfw/src_bios6/links_m3vpss/dei/deiLink_drv.c
    index ba0a655..3697d64 100755
    --- a/mcfw/src_bios6/links_m3vpss/dei/deiLink_drv.c
    +++ b/mcfw/src_bios6/links_m3vpss/dei/deiLink_drv.c
    @@ -1412,6 +1412,43 @@ Int32 DeiLink_drvUpdateInputRtPrm(DeiLink_Obj * pObj, FVID2_Frame *pInFrame, UIn
         return FVID2_SOK;
     }
     
    +Int32 DeiLink_drvModifyInputFramePointer(FVID2_Frame *pInFrame,Bool addOffset)
    +{
    +    System_FrameInfo *pFrameInfo;   
    +    Int32 offset[2],bytesPerPixel;
    +
    +    pFrameInfo = (System_FrameInfo *) pInFrame->appData;
    +    if(pFrameInfo == NULL)
    +    {
    +        Vps_printf("DEILINK : Frameinfo not present!!!\n");
    +        return FVID2_SOK;
    +    }
    +
    +    if(pFrameInfo->rtChInfo.dataFormat == SYSTEM_DF_YUV422I_YUYV)
    +        bytesPerPixel = 2;
    +    else
    +        bytesPerPixel = 1;
    +   
    +    offset[0] = ( pFrameInfo->rtChInfo.pitch[0] * pFrameInfo->rtChInfo.startY ) + 
    +                ( pFrameInfo->rtChInfo.startX * bytesPerPixel );
    +    offset[1] = ( pFrameInfo->rtChInfo.pitch[1] * pFrameInfo->rtChInfo.startY / 2 ) + 
    +                ( pFrameInfo->rtChInfo.startX * bytesPerPixel );
    +
    +    
    +    if(addOffset == TRUE)
    +    {
    +        pInFrame->addr[0][0] = (Ptr)((Int32)pInFrame->addr[0][0] + offset[0]);
    +        pInFrame->addr[0][1] = (Ptr)((Int32)pInFrame->addr[0][1] + offset[1]);
    +    }
    +    else
    +    {
    +        pInFrame->addr[0][0] = (Ptr)((Int32)pInFrame->addr[0][0] - offset[0]);
    +        pInFrame->addr[0][1] = (Ptr)((Int32)pInFrame->addr[0][1] - offset[1]);
    +    }
    +    
    +    return FVID2_SOK;
    +}
    +
     Int32 DeiLink_drvMakeFrameLists(DeiLink_Obj * pObj,
                                     FVID2_FrameList * inFrameList,
                                     FVID2_FrameList
    @@ -1523,6 +1560,7 @@ Int32 DeiLink_drvMakeFrameLists(DeiLink_Obj * pObj,
                 pInFrameInfo = (System_FrameInfo *) pInFrame->appData;
     
                 DeiLink_drvUpdateInputRtPrm(pObj, pInFrame, chId);
    +            DeiLink_drvModifyInputFramePointer(pInFrame, TRUE);
     
                 pChObj->inFrameProcessCount++;
     
    @@ -2019,6 +2057,10 @@ Int32 DeiLink_drvReleaseFrames(DeiLink_Obj * pObj,
     #endif
     
         pObj->inFramePutCount += inFrameList->numFrames;
    +    for(frameId = 0 ; frameId < inFrameList->numFrames ; frameId++)
    +    {
    +        DeiLink_drvModifyInputFramePointer(inFrameList->frames[frameId], FALSE);
    +    }
     
         DeiLink_putLinksEmptyFrames(pObj,
                                     pInQueParams->prevLinkId,
    
    : Includes fix to properly update crop parameters within the link.

    d. Display link changes + hdvpss changes :

    1. 

    7343.dvrrdk_1080i_updated.patch.txt
    diff --git a/demos/link_api_demos/common/chains_swMs.c b/demos/link_api_demos/common/chains_swMs.c
    index 8a6df85..93caf75 100755
    --- a/demos/link_api_demos/common/chains_swMs.c
    +++ b/demos/link_api_demos/common/chains_swMs.c
    @@ -30,7 +30,8 @@ Int32 Chains_swMsGetOutSize(UInt32 outRes, UInt32 * width, UInt32 * height)
                 break;
             default:
             case VSYS_STD_1080I_60:
    -        case VSYS_STD_1080P_60:
    +        case VSYS_STD_1080I_50:
    +	case VSYS_STD_1080P_60:
             case VSYS_STD_1080P_30:
                 *width = 1920;
                 *height = 1080;
    diff --git a/demos/link_api_sd_demo/sd_demo/SD_demo_swMs.c b/demos/link_api_sd_demo/sd_demo/SD_demo_swMs.c
    index 9db959f..2093c4c 100755
    --- a/demos/link_api_sd_demo/sd_demo/SD_demo_swMs.c
    +++ b/demos/link_api_sd_demo/sd_demo/SD_demo_swMs.c
    @@ -30,7 +30,8 @@ Int32 SD_Demo_swMsGetOutSize(UInt32 outRes, UInt32 * width, UInt32 * height)
                 break;
             default:
             case VSYS_STD_1080I_60:
    -        case VSYS_STD_1080P_60:
    +        case VSYS_STD_1080I_50:
    +	case VSYS_STD_1080P_60:
             case VSYS_STD_1080P_30:
                 *width = 1920;
                 *height = 1080;
    diff --git a/demos/mcfw_api_demos/mcfw_demo/demo_display.c b/demos/mcfw_api_demos/mcfw_demo/demo_display.c
    index 45af2c3..4b7820c 100755
    --- a/demos/mcfw_api_demos/mcfw_demo/demo_display.c
    +++ b/demos/mcfw_api_demos/mcfw_demo/demo_display.c
    @@ -93,14 +93,16 @@ char gDemo_ResolutionMenu[] = {
         "\r\n Select Display"
         "\r\n ====================="
         "\r\n"
    -    "\r\n 1: 1080P60"
    -    "\r\n 2: 720P60"
    -    "\r\n 3: XGA"
    -    "\r\n 4: SXGA"
    -    "\r\n 5: NTSC"
    -    "\r\n 6: PAL"
    -    "\r\n 7: 1080P50"
    -    "\r\n 8: 640X480P"
    +    "\r\n 1 : 1080P60"
    +    "\r\n 2 : 720P60"
    +    "\r\n 3 : XGA"
    +    "\r\n 4 : SXGA"
    +    "\r\n 5 : NTSC"
    +    "\r\n 6 : PAL"
    +    "\r\n 7 : 1080P50"
    +    "\r\n 8 : 640X480P"
    +    "\r\n 9 : 1080I60"
    +    "\n\n 10: 1080I50"
         "\r\n"
         "\r\n Enter Choice: "
     
    @@ -1096,7 +1098,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 +1199,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/demos/mcfw_api_demos/mcfw_demo/demo_swms.c b/demos/mcfw_api_demos/mcfw_demo/demo_swms.c
    index 6121500..8bcb9bd 100755
    --- a/demos/mcfw_api_demos/mcfw_demo/demo_swms.c
    +++ b/demos/mcfw_api_demos/mcfw_demo/demo_swms.c
    @@ -56,7 +56,8 @@ Int32 Demo_swMsGetOutSize(UInt32 outRes, UInt32 * width, UInt32 * height)
     
             default:
             case VSYS_STD_1080I_60:
    -        case VSYS_STD_1080P_60:
    +        case VSYS_STD_1080I_50:
    +	case VSYS_STD_1080P_60:
             case VSYS_STD_1080P_50:
             case VSYS_STD_1080P_30:
                 *width = 1920;
    diff --git a/mcfw/interfaces/ti_vdis_timings.h b/mcfw/interfaces/ti_vdis_timings.h
    index 237de76..0fd9df1 100755
    --- a/mcfw/interfaces/ti_vdis_timings.h
    +++ b/mcfw/interfaces/ti_vdis_timings.h
    @@ -94,6 +94,8 @@ static inline int Vdis_sysfsWrite(char *fileName, char *val)
     
     #define VDIS_TIMINGS_1080P_60 "148500,1920/88/148/44,1080/4/36/5,1"
     #define VDIS_TIMINGS_1080P_50 "148500,1920/528/148/44,1080/4/36/5,1"
    +/*#define VDIS_TIMINGS_1080P_50 "74250,1920/528/148/44,1080/2/25/5,0"*/
    +
     #define VDIS_TIMINGS_720P_60  "74250,1280/110/220/40,720/5/20/5,1"
     #define VDIS_TIMINGS_XGA_60   "65000,1024/24/160/136,768/3/29/6,1"
     #define VDIS_TIMINGS_SXGA_60  "108000,1280/48/248/112,1024/1/38/3,1"
    @@ -101,6 +103,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..73b1c10 100755
    --- a/mcfw/src_bios6/links_m3vpss/display/displayLink_drv.c
    +++ b/mcfw/src_bios6/links_m3vpss/display/displayLink_drv.c
    @@ -55,17 +55,21 @@ 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_50 == displayRes)
    +	||
    +        (VSYS_STD_1080I_60 == displayRes))
         {
    -        isSdDef = TRUE;
    +        isInterlacedDisplay = TRUE;
         }
    -    return isSdDef;
    +    return isInterlacedDisplay;
     }
     
     static
    @@ -73,7 +77,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 +909,14 @@ 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;
    +        }
    +        else
    +        {
    +            pObj->deiDispPrms.fmt.scanFormat = FVID2_SF_PROGRESSIVE;
    +        }
             status = DisplayLink_drvSetDeiDispPrmsIctl(pObj);
         }
         else
    @@ -913,13 +924,21 @@ 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;
    +        }
    +        else
    +        {
    +            pObj->deiDispPrms.fmt.scanFormat = FVID2_SF_PROGRESSIVE;
    +        }
             status = FVID2_setFormat(
                         pObj->displayHndl,
                         &pObj->displayFormat);
         }
     
         UTILS_assert(status == FVID2_SOK);
    +    pObj->createArgs.displayRes = resolution;
         return(status);
     }
     
    @@ -1072,6 +1091,8 @@ Int32 DisplayLink_drvDisplayCreate(DisplayLink_Obj * pObj)
     
         if (pObj->createArgs.displayRes == VSYS_STD_1080I_60
             ||
    +        pObj->createArgs.displayRes == VSYS_STD_1080I_50
    +        ||
             pObj->createArgs.displayRes == VSYS_STD_NTSC
             ||
             pObj->createArgs.displayRes == VSYS_STD_PAL)
    @@ -1080,7 +1101,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++)
                 {
    @@ -1114,6 +1135,11 @@ Int32 DisplayLink_drvDisplayCreate(DisplayLink_Obj * pObj)
             pFormat->width = 720;
             pFormat->height = 576;
         }
    +    if (pObj->createArgs.displayRes == VSYS_STD_1080I_60)
    +    {
    +        pFormat->width = 1920;
    +        pFormat->height = 1080;
    +    }
     
         pFormat->fieldMerged[1] = pFormat->fieldMerged[0];
         pFormat->fieldMerged[2] = pFormat->fieldMerged[0];
    @@ -1158,10 +1184,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 = 540;
     
         pObj->enableFieldSeparatedInputMode = FALSE;
     
    @@ -1172,7 +1200,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 +1229,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,
    @@ -1382,6 +1412,7 @@ Int32 DisplayLink_drvPrintRtStatus(DisplayLink_Obj * pObj, UInt32 elaspedTime)
             System_displayUnderflowPrint(TRUE, TRUE);
             System_memPrintHeapStatus();
         }
    +    Vps_printf("@@@@@@@@display mode %d @@@@@\n",pObj->createArgs.displayRes);
     
         return 0;
     }
    diff --git a/mcfw/src_bios6/links_m3vpss/system/system_dctrl.c b/mcfw/src_bios6/links_m3vpss/system/system_dctrl.c
    index 625f947..586feed 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 */
    @@ -244,7 +248,8 @@ Int32 System_getClk(UInt32 displayRes)
         switch(displayRes) {
             case VSYS_STD_1080P_30:
             case VSYS_STD_1080I_60:
    -            clkValue = 74250u;
    +        case VSYS_STD_1080I_50:
    +	    clkValue = 74250u;
             break;
             case VSYS_STD_720P_60:
                 clkValue = 74250;
    diff --git a/mcfw/src_bios6/links_m3vpss/system/system_dctrl_modeInfo.c b/mcfw/src_bios6/links_m3vpss/system/system_dctrl_modeInfo.c
    index 5c5acbc..b724818 100755
    --- a/mcfw/src_bios6/links_m3vpss/system/system_dctrl_modeInfo.c
    +++ b/mcfw/src_bios6/links_m3vpss/system/system_dctrl_modeInfo.c
    @@ -41,6 +41,9 @@ Int32 System_getVencMode(Int32 resolution)
             case VSYS_STD_1080I_60:
                 vencMode = FVID2_STD_1080I_60;
             break;
    +        case VSYS_STD_1080I_50:
    +            vencMode = FVID2_STD_1080I_50;
    +	    break;
             case VSYS_STD_1080P_60:
                 vencMode = FVID2_STD_1080P_60;
             break;
    diff --git a/mcfw/src_bios6/links_m3vpss/system/system_m3vpss.c b/mcfw/src_bios6/links_m3vpss/system/system_m3vpss.c
    index ab3335b..97c8ecf 100755
    --- a/mcfw/src_bios6/links_m3vpss/system/system_m3vpss.c
    +++ b/mcfw/src_bios6/links_m3vpss/system/system_m3vpss.c
    @@ -449,7 +449,8 @@ Int32 System_getOutSize(UInt32 outRes, UInt32 * width, UInt32 * height)
                 break;
             default:
             case VSYS_STD_1080I_60:
    -        case VSYS_STD_1080P_60:
    +        case VSYS_STD_1080I_50:
    +	case VSYS_STD_1080P_60:
             case VSYS_STD_1080P_50:
             case VSYS_STD_1080P_30:
                 *width = 1920;
    diff --git a/mcfw/src_linux/mcfw_api/ti_vdis.c b/mcfw/src_linux/mcfw_api/ti_vdis.c
    index c4e5514..1e3e18d 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_50);
    +                 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;
    diff --git a/mcfw/src_linux/mcfw_api/usecases/multich_common.c b/mcfw/src_linux/mcfw_api/usecases/multich_common.c
    index 94e4db3..5816ab2 100755
    --- a/mcfw/src_linux/mcfw_api/usecases/multich_common.c
    +++ b/mcfw/src_linux/mcfw_api/usecases/multich_common.c
    @@ -200,7 +200,8 @@ Int32 MultiCh_swMsGetOutSize(UInt32 outRes, UInt32 * width, UInt32 * height)
     
             default:
             case VSYS_STD_1080I_60:
    -        case VSYS_STD_1080P_60:
    +        case VSYS_STD_1080I_50:
    +	case VSYS_STD_1080P_60:
             case VSYS_STD_1080P_50:
             case VSYS_STD_1080P_30:
                 *width = 1920;
    
     :  This is an updated patch which has some additional changes including the changes pposted by Badri. 

    2. 

    6712.hdvpss_1080i.patch.txt
    --- ./packages/ti/psp/vps/hal/src/vpshal_hdvenc.c	2014-01-27 16:40:47.755353332 +0800
    +++ ../../../../../dvrrdk/DVRRDK_04.01.00.02/ti_tools/hdvpss/dvr_rdk_hdvpss/packages/ti/psp/vps/hal/src/vpshal_hdvenc.c	2014-01-27 16:43:31.747355404 +0800
    @@ -3059,12 +3059,11 @@
                 }
             }
     								
    -        dCfg->vsStartLine1 = ((tInfo->vFrontPorch +
    +        dCfg->vsStartLine1 = (tInfo->vFrontPorch +
                                   tInfo->vBackPorch +
                                   tInfo->vSyncLen +
    -                              tInfo->height) / 2) +
    -                              tInfo->vSyncLen +
    -                              tInfo->vBackPorch;
    +			      (tInfo->height >>1) +
    +			      tInfo->vFrontPorch);
         }
         dCfg->vsStartLine0 = tInfo->vFrontPorch;
         #ifdef VPSHAL_HDVENC_ADJUST_TIMING_FOR_SHIFT_ISSUE
    

    0317.test.ini is the ini file for decode display usecase.

    Please take all the changes and verify at your end if the usecase is working.

    Regards,

    Reshma

  • Hi,

    I am using modified usecase for cap --- display of 1080i60 video on Mistral MS_Ti814X EVM. DVR-RDK ver is 04.01.00.02.

    I have verified the capture statistics and input has both odd and even fields captured.

    However the output display seems to be split video with top and bottom half without any merging. I have applied the above mentioned patches for the used links. Firstly, I am facing assertion in

    dvr_rdk/mcfw/src_bios6/links_m3vpss/display/displayLink_drv.c

    file in bolded line

    Int32 DisplayLink_drvSetFmt(DisplayLink_Obj * pObj, FVID2_Format *pFormat)
    {
        Int32 status;
    
        /* For the DEI Display instances, set the DEI params */
        if (DisplayLink_drvIsDeiDisplayDrv(pObj))
        {
            status = DisplayLink_drvSetDeiDispPrms(pObj, pFormat);
        }
        else
        {
            status = FVID2_setFormat(pObj->displayHndl, pFormat);
        }
    
        UTILS_assert(status == FVID2_SOK);
        return(status);
    }

    If uncomment this and another assertion check i get the split video showing odd and even fields in top and bottom half as mentioned.

    Regards



  • Hello Noel,

    Check here:
    e2e.ti.com/.../1991493

    BR
    Margarita