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.

How to set configuration for OSD and VENC paramters for YCC16 720x480p video?

Hi,

I want to set the configuration for OSD and VENC paramters for VPBE in DM6437 for YCC16 720x480p video.

The OSD video window0 is RGB888 format, 720x480.    The VENC needs to be configured as YCC16 720x480p digital output.

vid0Params is used to configure OSD windows and vencParam is used to config analog output (I dont need the analog output).  So I setup VENC registers directly to config VENC for YCC16 digital output.

Question: Is there any vencParam to configure VENC to be YCC16 HDTV output?

PSP_VPBEOsdConfigParams vid0Params = {
  PSP_VPSS_FIELD_MODE, // ffmode  -- progressive  
  PSP_VPSS_BITS24,     // bitsPerPixel
  PSP_VPBE_RGB_888,   // colorFormat  
  2176,
  0,                   // leftMargin  
  0,                   // topMargin   
  720,                 // width       
  480,                 // height       
  0,                   // segId       
  PSP_VPBE_ZOOM_IDENTITY,    // hScaling    
  PSP_VPBE_ZOOM_IDENTITY,    // vScaling    
  PSP_VPBE_EXP_IDENTITY,     // hExpansion  
  PSP_VPBE_EXP_IDENTITY,     // vExpansion  
  //callback     // appCallback
  NULL,                       // appCallback 
  // changed
  PSP_VPBE_BLEND0,
  FALSE,
  FALSE,
  PSP_VPBE_CLUTSOURCE_ROM //  PSP_VPBE_CLUTSOURCE_ROM
};


PSP_VPBEVencConfigParams vencParams = {
PSP_VPBE_DISPLAY_NTSC_INTERLACED_COMPOSITE // Display Standard
};

// configure vid0 window
Int config_vid0win_RGB888 ( ) {
  PSP_VPBEChannelParams beinitParams;
  GIO_Attrs gioAttrs = GIO_ATTRS;
  int i=0;

  // create vid0 window channel
  // must create vid0 window 0 always because driver makes sure other windows are within vid0 window!

  beinitParams.id = PSP_VPBE_VIDEO_0;
  beinitParams.params = (PSP_VPBEOsdConfigParams*)&vid0Params;
  vid0Handle = FVID_create( "/VPBE0", IOM_INOUT,NULL, &beinitParams, &gioAttrs );
  if ( NULL == vid0Handle ) {
    return -1;
  } else {
    for ( i=0; i<NO_OF_BUFFERS; i++ )  {
      if ( IOM_COMPLETED == FVID_alloc( vid0Handle, &vid0AllocFB[i] ) ) {
        if ( IOM_COMPLETED != FVID_queue( vid0Handle, vid0AllocFB[i]) ) {
          return -2;        }      }    }     }

 
  // Create venc channel
  beinitParams.id = PSP_VPBE_VENC;
  beinitParams.params = (PSP_VPBEVencConfigParams *)&vencParams;
  vencHandle = FVID_create( "/VPBE0", IOM_INOUT, NULL, &beinitParams, &gioAttrs);
  if ( NULL == vencHandle ) {
    return -1;
  }
 
  return 0;
}

And here is the digital VENC settings.  I set values into VENC registers directly instead of using VENC parameters (because I dont know how to set VENC up for digital output).


int config_venc_YCC422(){
 SYS_VPSS_CLKCTL_Set27MHz();   // VENC uses 27MHz as Pixel Clk
 VENC_SetVMOD_VENC_Reset();
 VENC_SetVMOD_YCC16();    // YCC16
 VENC_SetVMOD_MASTER();    // Master
 VENC_SetVMOD_NTSC_PAL();   // VMD = 0
 VENC_SetVMOD_HDTV();    // HDTV mode, HDMD = 1
 VENC_SetVMOD_SDTV_ntsc_HDTV_525p(); // HDTV 525p mode
 VENC_SetVMOD_ITLC_NoInterlace();   // Non-Interlace ITLC = 1
 VENC_SetVMOD_NSIT_Progressive();   // progressive, NSIT = 1

 VENC_SetVIOCTL_VCLK_ON();   // VCLK is on, VCLK is pixel clock
 VENC_SetVIOCTL_VCLK_Output();  // VCLK is set to output, no HZ
 VENC_SetVIOCTL_VCLKP_Noninverse(); // VCLK is non inverse
 VENC_SetVIOCTL_SYDIR_Output();  // Set Sync signals to output
 VENC_SetVIOCTL_DOMD_Normal();  // set Data output mode as normal
 VENC_SetVIOCTL_YCDIR_OutputON();
 VENC_SetVIOCTL_YCSWAP_NOCHANGE();

 VENC_SetVDPRO_VD_Normal();   // video output normal, disable color bar
// VENC_SetVDPRO_EnableColorBar();  // enable built-in Color Bar, disable video output
 VENC_SetVDPRO_SetColorBar75();  // choose color bar 100 percentage

 VENC_SetSYNCCTL_HsyncON();
 VENC_SetSYNCCTL_VsyncON();
 VENC_SetSYNCCTL_HsyncActL();
 VENC_SetSYNCCTL_VsyncActL();

 VENC_SetHSPLS(VENC_HSPLS);
 VENC_SetVSPLS(VENC_VSPLS);
 VENC_SetHINTVL(VENC_HINT);
 VENC_SetHSTART(VENC_HSTART);
 VENC_SetHVALID(VENC_HVALID);
 VENC_SetVINTVL(VENC_VINT);
 VENC_SetVSTART(VENC_VSTART);
 VENC_SetVVALID(VENC_VVALID);
 VENC_SetHSDLY(VENC_HSDLY);
 VENC_SetVSDLY(VENC_VSDLY);

 VENC_SetYCCCTL_CHM_latch();
 VENC_SetYCCCTL_YCC16_YCbCr();
 VENC_SetYCCCTL_R656_Normal();

 VENC_SetDCLKCTL_DCLK_PatternMode_Enable();
 VENC_SetDCLKCTL_DCLK_PatterWidth(0);
 VENC_SetDCLKPTN0(1);
 VENC_SetDCLKPTN0A(2);

 VENC_SetOSDCLK0_OCPW(0);
 VENC_SetOSDCLK1_OCPT(1);

 VENC_SetVMOD_VENC_Enable();
 return 0;
}

 

 

  • Jason,

    It would have helped me if you had metioned the BIOS PSP version.

    Any way, by looking at your sample code, it looks like the question is related to 1.10.00 or 1.10.03.

    If I am right, then i think you can use the vencParams "PSP_VPBE_DISPLAY_YCC16_DIGITAL_480P" (for digital display standard). Also please refer sample application code "pspdrivers_1_10_03\packages\ti\sdo\pspdrivers\system\dm6437\bios\evmDM6437\video\sample\src\psp_digital_vpbe_sample_application.c" for any further details.  

    Let me know the result. 

    Thanks and Regards,

    Sandeep K