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;
}