S5pc100 TVout用法(2)

一.开始TVOUT

//******************************************************************//

 

 TVOUT_OUTPUT_IF tTVoutIF;
 tTVoutIF.dispMode = TVOUT_NTSC_443;
 tTVoutIF.outMode = TVOUT_OUTPUT_COMPOSITE;

 

//open tvout driver
 hTVoutDrv=CreateFile(L"TVD0:",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,0);
 if(hTVoutDrv==INVALID_HANDLE_VALUE)
 {
  RETAILMSG(1,(TEXT("[VDE:ERR]TVD0 Open Device Failed/r/n")));
  
 }
 //request resource
 if(!DeviceIoControl(hTVoutDrv,IOCTL_STDA_RSC_REQUEST_TVOUT_INTERFACE,NULL,0,NULL,0,&dwBytes,NULL))
 {
  RETAILMSG(1,(TEXT("[VDE:ERR]DeviceIoControl: IOCTL_STDA_RSC_REQUEST_TVOUT_INTERFACE Failed/r/n")));
 }
 //configure tvout interface
 dwBytes=0;
  if(!DeviceIoControl(hTVoutDrv,IOCTL_STDA_TVOUT_INIT_INTERFACE_PARAM,&tTVoutIF,sizeof(TVOUT_OUTPUT_IF),NULL,0,&dwBytes,NULL))
 {
  RETAILMSG(1,(TEXT("[VDE:ERR]DeviceIoControl: IOCTL_STDA_TVOUT_INIT_INTERFACE_PARAM Failed/r/n")));
 }
  dwBytes=0;
  //start display on tv
 if(!DeviceIoControl(hTVoutDrv,IOCTL_STDA_TVOUT_START,NULL,0,NULL,0,&dwBytes,NULL))
 {
  RETAILMSG(1,(TEXT("[VDE:ERR]DeviceIoControl: IOCTL_STDA_TVOUT_START Failed/r/n")));
 }

 
//**********************************************************************************//

二、停止TVOUT

//Stop tvout
 if(!DeviceIoControl(hTVoutDrv,IOCTL_STDA_TVOUT_STOP,NULL,0,NULL,0,&dwBytes,NULL))
 {
  RETAILMSG(1,(TEXT("[VDE:ERR]DeviceIoControl: IOCTL_STDA_TVOUT_STOP Failed/r/n")));
 }


dwBytes=0;
 //release resource
   if(!DeviceIoControl(hTVoutDrv,IOCTL_STDA_RSC_RELEASE_TVOUT_INTERFACE,NULL,0,NULL,0,&dwBytes,NULL))
 {
  RETAILMSG(1,(TEXT("[VDE:ERR]DeviceIoControl: IOCTL_STDA_RSC_RELEASE_TVOUT_INTERFACE Failed/r/n")));
 }

//**********************************************************************************//

三、SHOW GRP0 ON TV

STDA_ARG_GRP_BASIC_PARAM tGrp;
 tGrp.bWinBlending = FALSE;
 tGrp.uiAlpha = 0x0;
 tGrp.uiPriority = 2;
 tGrp.color = VM_DIRECT_RGB565;
 tGrp.bBlankChange = FALSE;
 tGrp.bPixelBlending = FALSE;
 tGrp.bPreMul = FALSE;
 
 tGrp.uiBlankColor = 0x0;
 tGrp.uiBaseAddress = 0x00000000;
 tGrp.uiSpan = 800;
 tGrp.uiWidth = 720;
 tGrp.uiHeight = 480;
 tGrp.uiSrcOffsetX = 40;
 tGrp.uiSrcOffsetY = 0;
 tGrp.uiDestOffsetX = 0;
 tGrp.uiDestOffsetY = 0;


 //request resource
 if(!DeviceIoControl(hTVoutDrv,IOCTL_STDA_RSC_REQUEST_GRAPHIC_0,NULL,0,NULL,0,&dwBytes,NULL))
 {
  RETAILMSG(1,(TEXT("[VDE:ERR]DeviceIoControl: IOCTL_STDA_RSC_REQUEST_GRAPHIC_0 Failed/r/n")));
 }


 //configure grp0
  if(!DeviceIoControl(hTVoutDrv,IOCTL_STDA_RSC_REQUEST_VIDEO_PROCESSOR,&tGrp,sizeof(STDA_ARG_GRP_BASIC_PARAM),NULL,0,&dwBytes,NULL))
 {
  RETAILMSG(1,(TEXT("[VDE:ERR]DeviceIoControl: IOCTL_STDA_RSC_REQUEST_VIDEO_PROCESSOR Failed/r/n")));
 }

 //show grp on TV
 if(!DeviceIoControl(hTVoutDrv,IOCTL_STDA_GRP0_START,NULL,0,NULL,0,&dwBytes,NULL))
 {
  RETAILMSG(1,(TEXT("[VDE:ERR]DeviceIoControl: IOCTL_STDA_GRP0_START Failed/r/n")));
 }

//*********************************************************************************//

四、Hide grp0

//stop grp0

if(!DeviceIoControl(hTVoutDrv,IOCTL_STDA_GRP0_STOP,NULL,0,NULL,0,&dwBytes,NULL))
 {
  RETAILMSG(1,(TEXT("[VDE:ERR]DeviceIoControl: IOCTL_STDA_GRP0_STOP Failed/r/n")));
 }
    dwBytes=0;
 //release resource
 if(!DeviceIoControl(hTVoutDrv,IOCTL_STDA_RSC_RELEASE_GRAPHIC_0,NULL,0,NULL,0,&dwBytes,NULL))
 {
  RETAILMSG(1,(TEXT("[VDE:ERR]DeviceIoControl: IOCTL_STDA_RSC_RELEASE_GRAPHIC_0 Failed/r/n")));
 }

//***********************************************************************************//

五、show video on TV

 STDA_ARG_VIDEO_BASIC_PARAM tVideoParam;
 tVideoParam.bWinBlending = FALSE;
 tVideoParam.uiAlpha = 0;
 tVideoParam.uiTopYAddress = DisplayBuffPhyAddr;
 tVideoParam.uiTopCAddress = cbcr_phy_addr;
 tVideoParam.srcImgEndian = TVOUT_LITTLE_ENDIAN_MODE;
 tVideoParam.uiImgWidth = DisplayBufWidth;
 tVideoParam.uiImgHeight = DisplayBufHeight;
 tVideoParam.uiSrcOffsetX = DisplayOffsetX;
 tVideoParam.uiSrcOffsetY = DisplayOffsetY;
 tVideoParam.uiSrcWidth = DisplayWidth;
 tVideoParam.uiSrcHeight = DisplayHeight;
 tVideoParam.uiDestHeight = 720;
 tVideoParam.uiDestWidth = 480;
 tVideoParam.uiDestOffsetX = 0;
 tVideoParam.uiDestOffsetY = 0;


 //request resource
 if(!DeviceIoControl(hTVoutDrv,IOCTL_STDA_RSC_REQUEST_VIDEO_PROCESSOR,NULL,0,NULL,0,&dwBytes,NULL))
 {
  RETAILMSG(1,(TEXT("[VDE:ERR]DeviceIoControl: IOCTL_STDA_RSC_REQUEST_VIDEO_PROCESSOR Failed/r/n")));
 }
 //configure
  if(!DeviceIoControl(hTVoutDrv,IOCTL_STDA_RSC_REQUEST_VIDEO_PROCESSOR,&tVideoParam,sizeof(STDA_ARG_VIDEO_BASIC_PARAM),NULL,0,&dwBytes,NULL))
 {
  RETAILMSG(1,(TEXT("[VDE:ERR]DeviceIoControl: IOCTL_STDA_RSC_REQUEST_VIDEO_PROCESSOR Failed/r/n")));
 }
  //showvideo on TV
 if(!DeviceIoControl(hTVoutDrv,IOCTL_STDA_VL_START,NULL,0,NULL,0,&dwBytes,NULL))
 {
  RETAILMSG(1,(TEXT("[VDE:ERR]DeviceIoControl: IOCTL_STDA_VL_START Failed/r/n")));
 }

//*********************************************************************************//

六、hide video

//stop video

 if(!DeviceIoControl(hTVoutDrv,IOCTL_STDA_VL_STOP,NULL,0,NULL,0,&dwBytes,NULL))
 {
  RETAILMSG(1,(TEXT("[VDE:ERR]DeviceIoControl: IOCTL_STDA_VL_STOP Failed/r/n")));
 }
    dwBytes=0;
 //release resource
 if(!DeviceIoControl(hTVoutDrv,IOCTL_STDA_RSC_RELEASE_VIDEO_PROCESSOR,NULL,0,NULL,0,&dwBytes,NULL))
 {
  RETAILMSG(1,(TEXT("[VDE:ERR]DeviceIoControl: IOCTL_STDA_RSC_RELEASE_VIDEO_PROCESSOR Failed/r/n")));
 }

//******************************************************************************************//

 

 

你可能感兴趣的:(S5pc100 TVout用法(2))