当前位置: 代码迷 >> WinCE >> !在WINCE上使用S5PV210的HDMI输出时遇到的有关问题
  详细解决方案

!在WINCE上使用S5PV210的HDMI输出时遇到的有关问题

热度:61   发布时间:2016-04-28 12:41:23.0
求助!在WINCE下使用S5PV210的HDMI输出时遇到的问题
在WINCE下通过

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的分辨率和输出就是了,三星文档有的。如果楼主的不行,可能原因是: