• 全志F133(D1s)芯片 如何在Tina下进行显示旋转?


    问题背景

    目前显示多基于横屏的情况设计布局, UI, 图片, 视频等显示. 而常用到的MIPI屏大多都是竖屏, 为避免重新调整布局, 显示提供了竖屏旋转成横屏的显示方式, 节省客户开发时间.

    显示旋转有硬件G2D旋转方式, 软件算法旋转方式, 可根据自己的方案屏情况, 测试对比两种方式选择使用, 主要评估内存占用, 时间效率, 旋转效果.

    显示驱动旋转framebuffer配置

    1.由于此前公版默认在modules.mk屏蔽了屏旋转相关配置, 如果你的版本是禁用旋转的, 需要把相关配置去掉.

    路径:target/allwinner/f133-common/modules.mk
    
    • 1

    屏蔽以下3个相关选项:

    CONFIG_SUNXI_DISP2_FB_DISABLE_ROTATE
    
    CONFIG_SUNXI_DISP2_FB_ROTATION_SUPPORT
    
    CONFIG_SUNXI_DISP2_FB_HW_ROTATION_SUPPORT
    
    • 1
    • 2
    • 3
    • 4
    • 5

    修改后的代码如下:

    .....
    $(eval $(call KernelPackage,net-rtl8821cs))
    
    define KernelPackage/sunxi-disp
      SUBMENU:=$(VIDEO_MENU)
      TITLE:=sunxi-disp support
      KCONFIG:=\
    	  CONFIG_DISP2_SUNXI=m \
    	  #CONFIG_SUNXI_DISP2_FB_DISABLE_ROTATE=y \
    	  #CONFIG_SUNXI_DISP2_FB_ROTATION_SUPPORT=n \
    	  #CONFIG_SUNXI_DISP2_FB_HW_ROTATION_SUPPORT=y \
    	  CONFIG_DISP2_SUNXI_BOOT_COLORBAR=n \
    	  CONFIG_DISP2_SUNXI_DEBUG=y \
    	  CONFIG_DISP2_SUNXI_COMPOSER=n \
    	  CONFIG_DISP2_SUNXI_SUPPORT_SMBL=y \
    
    .....
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    2.硬件旋转需要确保G2D驱动已经使能

    make kernel_menuconfig
    	Device Drivers  --->
    		<*> SUNXI G2D Driver
    		[*]   sunxi g2d mixer module
    		[*]   sunxi g2d rotate module
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.打开显示驱动旋转支持

    make kernel_menuconfig
    	Device Drivers  --->
    		Graphics support  ---> 
    			Frame buffer Devices  --->
    				 Video support for sunxi  --->
    				 	DISP2 Framebuffer rotation support (Disable rotation)  --->
    				 		 ( ) Disable rotation
    						 ( ) Software rotation support  	(不要选这个,方案未支持)
    						 (X) Hardware(G2D) rotation support (选择G2D旋转)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    4.dts配置

    board.dts 和 uboot-board.dts同步修改.

    &disp{
        .....
        disp_rotation_used       = <1>;/* 使能旋转功能 */
        degree0                  = <3>; /* X:screen index; 0:0 degree; 1:90 degree; 3:270 degree */
        fb0_width                = <1280>;/*fb 的长宽交换*/
        fb0_height               = <800>;
        .....
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    5.旋转后framebuffer编程是需要注意,旋转后的buffer不会直接显示到屏幕上, 需要在应用刷屏的地方调用FBIOPAN_DISPLAY接口.同步旋转后的buffer到LCD上.

    以修改公版旋转的GUI刷屏示例:

    路径:package/gui/littlevgl-6/lv_drivers/display/fbdev.c

    void fbdev_flush(lv_disp_drv_t * drv, const lv_area_t * area, lv_color_t * color_p){
    ....
        lv_disp_flush_ready(drv);
        ioctl(fbfd, FBIOPAN_DISPLAY, &vinfo); /*函数最后,在刷屏函数后面,调用 FBIOPAN_DISPLAY 接口*/
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    软件旋转LVGL UI配置

    公版上lvgl-6上做了UI旋转算法, 软件交换打点位置达成旋转. 该做法纯软件, 不需要改动其他配置, 在原来未旋转的基础上,修改LV_UI_ROTATE_DIRECTION宏即可.

    路径:lv_conf.h

    /* UI rotation:
    * - 0:  no rotate
    * - 1:  90°
    * - 2: 180°
    * - 3: 270°
    */
    
    #define LV_UI_ROTATE_DIRECTION     0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    视频旋转配置

    视频旋转有 解码器旋转 和 G2D旋转 两种方式.

    1.编码器旋转(VE),使用TPlayerSetRotate接口,注意该接口不支持LBC模式, 不支持H265视频旋转.具体请参考文档.

    函数原型: int TPlayerSetRotate(TPlayer* p,TplayerVideoRotateTyperotateDegree);
    功能 设置视频旋转的角度
    参数 p: 通过 TPlayerCreate 函数创建的 TPlayer 指针; rotateDegree: 视频旋转的角度
    返回值 成功返回 0,失败返回-1。
    调用说明 这个函数需要在 TPlayerSetDataSource() 函数之前调用
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.G2D旋转:

    方式一:(1)TPlayerSetG2dRotate()接口使用G2D做旋转。该接口在TPlayerCreate()之后调用。

    方式二:(2)直接在在配置文件中配置默认旋转,文件路径:

    package/allwinner/tina_multimedia/tplayer/configs/f133_linux_cedarx.conf

    48 #use g2d module to rotate the video. notice:F133/R528
    49 g2d_rotate_flag = 1
    50 g2d_rotate_degree = 1
    
    • 1
    • 2
    • 3

    图片旋转

    待支持.

    原贴链接:https://bbs.aw-ol.com/topic/2600/
    资源获取、问题讨论可以到全志在线开发者社区进行:https://www.aw-ol.com
    全志及开发者最新动态可以关注全志在线微信公众号

  • 相关阅读:
    盛世古董乱世金-数据库稳定到底好不好?
    [附源码]java毕业设计中达小区物业管理系统
    合并两个有序数组
    飞睿智能高精度、低功耗测距,无线室内定位UWB芯片如何改变智能家居
    this指针和相关的用处——C++
    MySQL索引的数据结构
    缓存一致性(cache coherency)解决方案:MESI 协议状态转换详解
    基于SSM框架的杰森摄影工作室选片系统的设计和开发论文
    Flink CDC-MySQL CDC配置及DataStream API实现代码...可实现监控采集多个数据库的多个表
    浅析泵站自动化技术的发展趋势
  • 原文地址:https://blog.csdn.net/weixin_43094346/article/details/127959003