在WINCE下通过
- C/C++ code
HANDLE hVideoDrv = CreateFile( L"TVD0:", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, 0); STDA_ARG_GRP_BASIC_PARAM tGrp; DWORD dwBytes; if(!DeviceIoControl(hVideoDrv, IOCTL_STDA_RSC_REQUEST_TVOUT_INTERFACE, NULL, 0, NULL, 0, &dwBytes, NULL)) { } TVOUT_OUTPUT_IF tTVoutIF; tTVoutIF.dispMode = TVOUT_720P_60; tTVoutIF.outMode = TVOUT_OUTPUT_HDMI_YCBCR;//TVOUT_OUTPUT_COMPONENT_YPBPR_PROGRESSIVE;//TVOUT_OUTPUT_HDMI_YCBCR; if(!DeviceIoControl(hVideoDrv, IOCTL_STDA_TVOUT_INIT_INTERFACE_PARAM, &tTVoutIF, sizeof(TVOUT_OUTPUT_IF), NULL, 0, &dwBytes, NULL)) { } if(!DeviceIoControl(hVideoDrv, IOCTL_STDA_TVOUT_START, NULL, 0, NULL, 0, &dwBytes, NULL)) { } //add graphic if(!DeviceIoControl(hVideoDrv, IOCTL_STDA_RSC_REQUEST_GRAPHIC_0, NULL, 0, NULL, 0, &dwBytes, NULL)) { // error is occurred } HDC hWinmain; unsigned int DispPhyAddr; hWinmain = ::GetDC (NULL); ExtEscape(hWinmain, DRVESC_GET_FB_PHY_ADDR, 0, NULL, sizeof(DispPhyAddr), (LPSTR)&DispPhyAddr); ::ReleaseDC (NULL, hWinmain); // RETAILMSG(1, (TEXT("DispPhyAddr = 0x%x\r\n"),DispPhyAddr)); 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 = DispPhyAddr; tGrp.uiSpan = 1280; tGrp.uiWidth = 1280; tGrp.uiHeight = 720; tGrp.uiSrcOffsetX = 0; tGrp.uiSrcOffsetY = 0; tGrp.uiDestOffsetX = 50; tGrp.uiDestOffsetY = 24; tGrp.uiScaleEnH = 0; tGrp.uiScaleEnV = 0; if(!DeviceIoControl(hVideoDrv, IOCTL_STDA_GRP0_INIT_PROCESSING_PARAM, &tGrp, sizeof(STDA_ARG_GRP_BASIC_PARAM), NULL, 0, &dwBytes, NULL)) { // error is occurred } if(!DeviceIoControl(hVideoDrv, IOCTL_STDA_GRP0_START, NULL, 0, NULL, 0, &dwBytes, NULL)) { // error is occurred }
启用了HDMI,
但是遇到了两个问题:
1.我的WINCE编译时设置的分辨率是1280*720,上面的程序也是这样的分辨率,但是连接电视以后,图像比显示屏稍微大了10~20个像素,显示不全,但是如果电视机(本身物理像素是1920*1080的)采用“点对点”的缩放方式,可以显示出整个WINCE屏幕,但是又不是全屏,所以不符合要求,在示例程序中,似乎调用了某种方法把显示设置为正好全屏,我看了两天他的代码,未找到此法...
2.开启HDMI后,使用开发板的按键或者播放视频时,有一定几率中断HDMI连接?在桌面还好,打开一些文件夹后,此现象尤为严重;至于视频播放,只要一放就会频繁中断HDMI连接,而且视频显示不出来...
研究数天未果,还望各位指点一二...在此先谢过了
------解决方案--------------------
最好自动识别电视的分辨率
------解决方案--------------------
可以通过HDMI中的IIC接口获取显示器的分辨率,之前在TCC8902上面这么用过。
HDMI不稳定,可能跟硬件有关,
我在TCC8902上播放1080P的高清视频,效果非常好,没有出现连接中断的情况。
------解决方案--------------------
HDMI示例程序 就是一打开这个TV驱动,然后和IOControl 函数做一些通信,设置一下驱动,设置HDMI的分辨率和输出就是了,三星文档有的。如果楼主的不行,可能原因是:
1、HDMI 硬件布线不良,阻抗等没做好,HDMI 1.6G那么高的频率非常恐怖的
2、就是驱动没完善了。
我的S5pv210 很紧迫在HDMI上,这个搞完才算有点爽,楼主,这帖子我跟定了。
一起来玩。明天开始搞。