一.开始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")));
}
//******************************************************************************************//