g2d_blt_flags_h 定义二元光栅操作码,
typedef enum {
...
G2D_ROT_90 = 0x00000100,
G2D_ROT_180 = 0x00000200,
G2D_ROT_270 = 0x00000300,
G2D_ROT_0 = 0x00000400,
G2D_ROT_H = 0x00001000,
G2D_ROT_V = 0x00002000,
...
} g2d_blt_flags_h;
我在使用LVGL的旋转相关的代码(lvgl只处理了0、90、180、270),对接了一下G2D_ROT_H、G2D_ROT_V 。如下lvgl sunxifb_init函数中增加了case LV_DISP_HORIZONTAL和case LV_DISP_VERTICAL。
void sunxifb_init(uint32_t rotated) {
...
case LV_DISP_ROT_270:
sinfo.rotated = G2D_ROT_90;
sinfo.rotatefbp_w = vinfo.yres;
sinfo.rotatefbp_h = vinfo.xres;
fbp_w = vinfo.yres;
fbp_h = vinfo.xres;
fbp_line_length = fbp_w * vinfo.bits_per_pixel / 8;
break;
case LV_DISP_HORIZONTAL:
sinfo.rotated = G2D_ROT_H;//水平镜像
sinfo.rotatefbp_w = vinfo.xres;
sinfo.rotatefbp_h = vinfo.yres;
break;
case LV_DISP_VERTICAL:
sinfo.rotated = G2D_ROT_V;//垂直镜像
sinfo.rotatefbp_w = vinfo.xres;
sinfo.rotatefbp_h = vinfo.yres;
...
}
其中G2D_ROT_H水平镜像是验证ok,只有G2D_ROT_V 垂直镜像的时候,发现显示内容虽然垂直镜像了,但是显示不全,我试过几个分辨率,1920x1080、1024x768都有问题,只有320x320才能正常。
所以我怀疑硬件G2D有垂直镜像是有bug的,但是我不知道如何修改好,驱动看了下也没有对应的寄存器手册有介绍,所以不知道如何处理,还请大佬们给个方向。
正常方向图片(1024x768):
垂直镜像不正常的图片,显示有黑边不全(1024x768):
垂直镜像正常的图片(320x320):