导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页

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

    MR Series
    f133 d1s faq 技术支持
    3
    3
    3659
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • q1215200171
      budbool LV 9 最后由 编辑

      问题背景

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

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

      显示驱动旋转framebuffer配置

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

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

      屏蔽以下3个相关选项:

      CONFIG_SUNXI_DISP2_FB_DISABLE_ROTATE
      
      CONFIG_SUNXI_DISP2_FB_ROTATION_SUPPORT
      
      CONFIG_SUNXI_DISP2_FB_HW_ROTATION_SUPPORT
      

      修改后的代码如下:

      .....
      $(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 \
      
      .....
      

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

      make kernel_menuconfig
      	Device Drivers  --->
      		<*> SUNXI G2D Driver
      		[*]   sunxi g2d mixer module
      		[*]   sunxi g2d rotate module
      

      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旋转)
      

      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>;
          .....
      };
      

      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 接口*/
      }
      

      软件旋转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
      

      视频旋转配置

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

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

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

      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
      

      图片旋转

      待支持.

      H 1 条回复 最后回复 回复 引用 分享 3
      • H
        HQEmbed LV 5 @q1215200171 最后由 q1215200171 编辑

        g2d_rotate_degree = 90是绿屏, 音频有,视频就是绿屏。
        如果是1 是不旋转,这时正常。 是不是G2D旋转出了问题?

        1 条回复 最后回复 回复 引用 分享 0
        • S
          soso90 LV 7 最后由 编辑

          如果是镜像显示,这个接口支持不~~ 或是只能用g2d?

          1 条回复 最后回复 回复 引用 分享 0
          • 1 / 1
          • First post
            Last post

          Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

          行为准则 | 用户协议 | 隐私权政策