我用S3C6410做硬件解码,并显示在LCD上。采用的是三星提供的测试代码,我用Qt写了图形界面。我解码时对屏幕的内存映射设置的是640*480,屏幕的分辨率为800*480,也就是说所映射的那一部分用来显示视频,剩下的一部分想放一些按键,但是一运行,所设置的640*480那一块正常显示视频,可是剩下的那一部分也会变黑,不知道为什么。
我觉得很奇怪,因为看代码首先打开fb
dec_fb_fd = open(FB_DEV_NAME, O_RDWR|O_NDELAY);
然后进行映射
win0_fb_addr = (char *)mmap(0, fb_size, PROT_READ | PROT_WRITE, MAP_SHARED, dec_fb_fd, 0)
然后又设置了这一块区域在LCD上的位置,
fb_info_to_driver.Bpp = bpp;
fb_info_to_driver.LeftTop_x = x;
fb_info_to_driver.LeftTop_y = y;
fb_info_to_driver.Width = width;
fb_info_to_driver.Height = height;
然后通过ioctl(dec_fb_fd, FBIOGET_FSCREENINFO, &lcd_info);将fb的信息存放在fb_fix_screeninfo结构体中。
最后将post processor的目的地址设置为fb的首地址,post processor将输出RGB数据,这样就可以在屏幕上显示。
现在的问题是,屏幕全黑是不是因为程序将整个LCD都进行了重绘?但通过上面的分析,他应该仅仅将我映射的那一块区域进行重绘才对啊,请问您有解决的方法吗?恳请帮助