Navigation

    全志在线开发者论坛

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • 在线文档
    • 社区主页
    1. Home
    2. newcastle
    N
    • Profile
    • Following 0
    • Followers 0
    • my integral 445
    • Topics 6
    • Posts 10
    • Best 1
    • Groups 0

    newcastleLV 3

    @newcastle

    445
    integral
    1
    Reputation
    8
    Profile views
    10
    Posts
    0
    Followers
    0
    Following
    Joined Last Online

    newcastle Unfollow Follow

    Best posts made by newcastle

    • LVGL视频播放界面实现方法

      1.主题

      LVGL视频播放界面实现方法

      2.问题背景

      使用LVGL开发且需要在UI下显示视频或者显示摄像头数据,但是不知道如何实现,要么是只显示UI,要么就只显示视频。

      3.具体表现

      可以看下视频播放的时候有哪些元素。

      在这里插入图片描述

      有播放按钮,进度条,设置等可交互的控件,这些都位于UI层。

      UI的下方就是视频解码后的一帧数据,视频数据位于视频层。

      4.问题分析

      一般UI层位于视频层的上方,如果UI层没有设置透明度,那么会有一个背景色,覆盖了视频层,导致只能看到背景色和一些控制按钮。

      5.根本原因

      首先需要知道有图层的概念,下面的命令可以看到图层的信息:

      root@TinaLinux:/# cat /sys/class/disp/disp/attr/sys
      screen 0:
      de_rate 300000000 hz, ref_fps:59
      mgr0: 1280x800 fmt[rgb] cs[0x204] range[full] eotf[0x4] bits[8bits] err[1] force_sync[1] unblank direct_show[false] iommu[1]
      dmabuf: cache[4] cache max[4] umap skip[0] umap skip max[18]
              lcd output      backlight( 50)  fps:60.0        1280x 800
              err:0   skip:67 irq:2300        vsync:0 vsync_skip:0
         BUF    enable ch[0] lyr[0] z[0] prem[N] a[pixel   0] fmt[ 77] fb[1280, 736; 640, 368; 640, 368] crop[   0,   0,1280, 720] frame[   0,   0,1280, 800] addr[fb200000,fb2e6000,fb359000] flags[0x       0] trd[0,0]
      depth[ 0]    BUF    enable ch[1] lyr[0] z[16] prem[N] a[pixel 255] fmt[  0] fb[1280, 800;1280, 800;1280, 800] crop[   0,   0,1280, 800] frame[   0,   0,1280, 800] addr[ff800000,       0,       0] flags[0x
        0] trd[0,0]
      

      在内核初始化过程中,显示驱动注册/dev/fb0,会申请UI层,可以看到ch[1] lyr[0],一般UI就一个地址addr[ff800000, 0, 0],并且也是最顶层的z[16],混合模式a[pixel 255]表示由应用控制UI层的透明度。

      视频播放(使用TPlayer接口)的时候会通过中间件申请视频图层,可以看到ch[0] lyr[0],并且yuv三个地址一直在变化addr[fb200000,fb2e6000,fb359000],通常视频会放到最底层z[0]。

      当应用没有透明时,因为UI层的zorder比视频层大,因此只能看到UI,看不到视频,所以应用需要“挖空”。

      6.解决办法

      下面代码里的屏幕,一般是指/dev/fb0,LVGL版本是8.3.2。

      使用下面的代码前需要在lv_conf.h中设置参数:

      #define LV_COLOR_SCREEN_TRANSP 1
      
      /* 初始化屏幕风格 */
      static lv_style_t style_scr_act;
      if (style_scr_act.prop_cnt == 0) {
          lv_style_init(&style_scr_act);
          /* 默认不是透明的,后面按需要切换即可 */
          lv_style_set_bg_opa(&style_scr_act, LV_OPA_COVER);
          /* 一定要应用风格,不然也是没有效果的 */
          lv_obj_add_style(lv_scr_act(), &style_scr_act, 0);
      }
      
      /* 这里根据按钮状态,切换不同风格,一种是UI能够透明看到底下的视频,一种是UI覆盖视频,视频就看不到了 */
      if (lv_obj_has_state(btn, LV_STATE_CHECKED)) {
          /* 这里切换为UI透明 */
          lv_label_set_text(label, "Stop");
          /* 这里设置屏幕是透明的 */
          lv_disp_get_default()->driver->screen_transp = 1;
          /* 这里设置屏幕背景是透明的 */
          lv_disp_set_bg_opa(lv_disp_get_default(), LV_OPA_TRANSP);
          /* 这里清空屏幕,不清空的话,可能不会生效 */
          lv_memset_00(lv_disp_get_default()->driver->draw_buf->buf_act,
                  lv_disp_get_default()->driver->draw_buf->size
                          * sizeof(lv_color32_t));
          /* 这里屏幕风格切换为透明的 */
          lv_style_set_bg_opa(&style_scr_act, LV_OPA_TRANSP);
          /* 通知风格变化,需要更新 */
          lv_obj_report_style_change(&style_scr_act);
      } else {
          /* 这里切换为UI不透明,也就是覆盖视频 */
          lv_label_set_text(label, "Play");
          /* 这里设置屏幕是不透明的 */
          lv_disp_get_default()->driver->screen_transp = 0;
          /* 这里设置屏幕背景是不透明的 */
          lv_disp_set_bg_opa(lv_disp_get_default(), LV_OPA_COVER);
          /* 这里屏幕风格切换为不透明的 */
          lv_style_set_bg_opa(&style_scr_act, LV_OPA_COVER);
          /* 通知风格变化,需要更新 */
          lv_obj_report_style_change(&style_scr_act);
      }
      
      posted in GUI
      N
      newcastle

    Latest posts made by newcastle

    • BIGTREETECH CB1(H616)和 树莓派4B CPU对比测试

      一,实物对比图:
      BIGTREETECH CB1的底板接口的分布和树莓派4B是一样的,但是没有树莓派的音频接口,底板也不能放到树莓派4B的官方外壳里,因为底板的背面有一个DSI接口,高度超出了。
      201907xlb43bzmylymyylh.jpg

      二,开发板硬件配置对比
      可以看出H616为4核A53@1.5G,树莓派4B为4核A72@1.5G,树莓派4B的CPU规格略高一些,但它俩都是28nm制程工艺。
      1512E894-0C0E-43cd-8A84-478369EB6BDE.png

      三,CPU规格对比:
      这个上一个ARM官网的对比图。
      77380663-3897-49b1-8AC3-3EE58CF8CDF7.png 83BBD7A5-B490-426d-979F-AB552ADAEBDB.png

      四,室温下CPU温度对比
      使用命令
      cat /sys/class/thermal/thermal_zone0/temp | awk '{print $1/1000}'
      201912g000wn07a7uowwao.jpg 201912emssmleinhf418la.jpg

      五,lscpu命令对比

      其中可以看到H616的BogoMIPS是48,树莓派4B的BogoMIPS是108。

      何为BogoMIPS,MIPS是millions of instructions per second(百万条指令每秒)的缩写,其代表CPU的运算速度,是cpu性能的重要指标。但只能用来粗略计算处理器的性能,并不十分精确。

      201914rmb1nm56mor25zkt.jpg 201913w7g0t4747etqggit.jpg

      六,专业软件对比CPU

      这里我们使用Sysbench这个软件来测试2款CPU的性能。

      Sysbench是一个开源的、模块化的、跨平台的多线程性能测试工具,可以用来进行CPU、内存、磁盘I/O、线程、数据库的性能测试。

      安装使用命令 sudo apt-get install sysbench
      测试CPU命令 sysbench cpu run

      biqu@Hurakan:~$ sysbench cpu run
      sysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)
      
      Running the test with following options:
      Number of threads: 1
      Initializing random number generator from current time
      
      
      Prime numbers limit: 10000
      
      Initializing worker threads...
      
      Threads started!
      
      CPU speed:
          events per second:   502.43
      
      General statistics:
          total time:                          10.0008s
          total number of events:              5028
      
      Latency (ms):
               min:                                    1.98
               avg:                                    1.99
               max:                                    2.19
               95th percentile:                        2.00
               sum:                                 9995.01
      
      Threads fairness:
          events (avg/stddev):           5028.0000/0.00
          execution time (avg/stddev):   9.9950/0.00
      
      biqu@Hurakan:~$ sysbench cpu run
      sysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)
      
      Running the test with following options:
      Number of threads: 1
      Initializing random number generator from current time
      
      
      Prime numbers limit: 10000
      
      Initializing worker threads...
      
      Threads started!
      
      CPU speed:
          events per second:   502.85
      
      General statistics:
          total time:                          10.0005s
          total number of events:              5032
      
      Latency (ms):
               min:                                    1.98
               avg:                                    1.99
               max:                                    2.20
               95th percentile:                        2.00
               sum:                                 9995.15
      
      Threads fairness:
          events (avg/stddev):           5032.0000/0.00
          execution time (avg/stddev):   9.9951/0.00
      
      biqu@Hurakan:~$
      

      tage@raspberrypi:~ $ sysbench cpu run
      sysbench 1.0.20 (using system LuaJIT 2.1.0-beta3)
      
      Running the test with following options:
      Number of threads: 1
      Initializing random number generator from current time
      
      
      Prime numbers limit: 10000
      
      Initializing worker threads...
      
      Threads started!
      
      CPU speed:
          events per second:  1483.27
      
      General statistics:
          total time:                          10.0005s
          total number of events:              14840
      
      Latency (ms):
               min:                                    0.67
               avg:                                    0.67
               max:                                    1.81
               95th percentile:                        0.68
               sum:                                 9994.28
      
      Threads fairness:
          events (avg/stddev):           14840.0000/0.00
          execution time (avg/stddev):   9.9943/0.00
      
      tage@raspberrypi:~ $
      

      其中CPU speed: events per second:CPU速度:每秒完成数 是衡量CPU速度的指标,可以看到在单线程下,BIGTREETECH CB1是502.85,树莓派4B是1483.27。

      总结:通过对2种开发板CPU进行各种对比,可以发现H616和树莓派4B在CPU性能上还是有一定差距的。

      posted in H616系列-OTT
      N
      newcastle
    • LVGL视频播放界面实现方法

      1.主题

      LVGL视频播放界面实现方法

      2.问题背景

      使用LVGL开发且需要在UI下显示视频或者显示摄像头数据,但是不知道如何实现,要么是只显示UI,要么就只显示视频。

      3.具体表现

      可以看下视频播放的时候有哪些元素。

      在这里插入图片描述

      有播放按钮,进度条,设置等可交互的控件,这些都位于UI层。

      UI的下方就是视频解码后的一帧数据,视频数据位于视频层。

      4.问题分析

      一般UI层位于视频层的上方,如果UI层没有设置透明度,那么会有一个背景色,覆盖了视频层,导致只能看到背景色和一些控制按钮。

      5.根本原因

      首先需要知道有图层的概念,下面的命令可以看到图层的信息:

      root@TinaLinux:/# cat /sys/class/disp/disp/attr/sys
      screen 0:
      de_rate 300000000 hz, ref_fps:59
      mgr0: 1280x800 fmt[rgb] cs[0x204] range[full] eotf[0x4] bits[8bits] err[1] force_sync[1] unblank direct_show[false] iommu[1]
      dmabuf: cache[4] cache max[4] umap skip[0] umap skip max[18]
              lcd output      backlight( 50)  fps:60.0        1280x 800
              err:0   skip:67 irq:2300        vsync:0 vsync_skip:0
         BUF    enable ch[0] lyr[0] z[0] prem[N] a[pixel   0] fmt[ 77] fb[1280, 736; 640, 368; 640, 368] crop[   0,   0,1280, 720] frame[   0,   0,1280, 800] addr[fb200000,fb2e6000,fb359000] flags[0x       0] trd[0,0]
      depth[ 0]    BUF    enable ch[1] lyr[0] z[16] prem[N] a[pixel 255] fmt[  0] fb[1280, 800;1280, 800;1280, 800] crop[   0,   0,1280, 800] frame[   0,   0,1280, 800] addr[ff800000,       0,       0] flags[0x
        0] trd[0,0]
      

      在内核初始化过程中,显示驱动注册/dev/fb0,会申请UI层,可以看到ch[1] lyr[0],一般UI就一个地址addr[ff800000, 0, 0],并且也是最顶层的z[16],混合模式a[pixel 255]表示由应用控制UI层的透明度。

      视频播放(使用TPlayer接口)的时候会通过中间件申请视频图层,可以看到ch[0] lyr[0],并且yuv三个地址一直在变化addr[fb200000,fb2e6000,fb359000],通常视频会放到最底层z[0]。

      当应用没有透明时,因为UI层的zorder比视频层大,因此只能看到UI,看不到视频,所以应用需要“挖空”。

      6.解决办法

      下面代码里的屏幕,一般是指/dev/fb0,LVGL版本是8.3.2。

      使用下面的代码前需要在lv_conf.h中设置参数:

      #define LV_COLOR_SCREEN_TRANSP 1
      
      /* 初始化屏幕风格 */
      static lv_style_t style_scr_act;
      if (style_scr_act.prop_cnt == 0) {
          lv_style_init(&style_scr_act);
          /* 默认不是透明的,后面按需要切换即可 */
          lv_style_set_bg_opa(&style_scr_act, LV_OPA_COVER);
          /* 一定要应用风格,不然也是没有效果的 */
          lv_obj_add_style(lv_scr_act(), &style_scr_act, 0);
      }
      
      /* 这里根据按钮状态,切换不同风格,一种是UI能够透明看到底下的视频,一种是UI覆盖视频,视频就看不到了 */
      if (lv_obj_has_state(btn, LV_STATE_CHECKED)) {
          /* 这里切换为UI透明 */
          lv_label_set_text(label, "Stop");
          /* 这里设置屏幕是透明的 */
          lv_disp_get_default()->driver->screen_transp = 1;
          /* 这里设置屏幕背景是透明的 */
          lv_disp_set_bg_opa(lv_disp_get_default(), LV_OPA_TRANSP);
          /* 这里清空屏幕,不清空的话,可能不会生效 */
          lv_memset_00(lv_disp_get_default()->driver->draw_buf->buf_act,
                  lv_disp_get_default()->driver->draw_buf->size
                          * sizeof(lv_color32_t));
          /* 这里屏幕风格切换为透明的 */
          lv_style_set_bg_opa(&style_scr_act, LV_OPA_TRANSP);
          /* 通知风格变化,需要更新 */
          lv_obj_report_style_change(&style_scr_act);
      } else {
          /* 这里切换为UI不透明,也就是覆盖视频 */
          lv_label_set_text(label, "Play");
          /* 这里设置屏幕是不透明的 */
          lv_disp_get_default()->driver->screen_transp = 0;
          /* 这里设置屏幕背景是不透明的 */
          lv_disp_set_bg_opa(lv_disp_get_default(), LV_OPA_COVER);
          /* 这里屏幕风格切换为不透明的 */
          lv_style_set_bg_opa(&style_scr_act, LV_OPA_COVER);
          /* 通知风格变化,需要更新 */
          lv_obj_report_style_change(&style_scr_act);
      }
      
      posted in GUI
      N
      newcastle
    • 创龙AD+全志T3 ad_display 开发案例

      前 言

      本文主要介绍基于全志科技T3(ARM Cortex-A7)处理器的8/16通道AD采集开发案例,使用核芯互联CL1606/CL1616AD芯片,亦适用于ADI AD7606/AD7616。CL1606/CL1616与AD7606/AD7616软硬件兼容。

      备注:

      (1)创龙科技TL7606I模块使用AD芯片为核芯互联CL1606或ADI AD7606,两者均测试通过,且测试步骤无差别。

      (2)创龙科技TL7616P模块使用AD芯片为核芯互联CL1616或ADI AD7616,两者均测试通过,且测试步骤无差别。

      硬件平台:

      创龙科技T3工业评估板
      微信图片_20221110192511.jpg

      TL7606I多通道AD模块
      微信图片_20221110192524.jpg

      TL7616P多通道AD模块
      微信图片_20221110192526.jpg

      1 ad_display案例

      1.1 案例说明

      案例功能:评估板通过SPI接口,使用创龙科技TL7606I/TL7616P模块采集8通道或16通道数据,并通过Qt显示波形。
      案例支持如下2种模式:

      • 单步模式:程序将会采集1024个数据后,显示静态波形。
      • 连续模式:程序将会连续采集数据,并实时显示动态波形。

      程序流程如下图所示。

      微信图片_20221110192534.png

      1.2 案例测试

      1.2.1 TL7606I模块测试
      (1)硬件连接。
      请使用VGA线将评估板VGA OUT接口与VGA显示屏连接。
      由于评估底板拓展接口未预留SPI总线引脚,因此需参考如下方法进行飞线,并且应尽可能使用短线连接,硬件连接如下图所示。

      微信图片_20221110192537.png

      将评估底板SPI FLASH(U6)空贴后的引脚1(SPI CS)、2(SPI MISO)、5(SPI MOSI)、6(SPI CLK)和4(GND)通过飞线引出。

      微信图片_20221110192539.png

      微信图片_20221110192543.png

      案例支持TL7606I模块8通道同时采集与显示。本次测试以TL7606I模块V4和V7通道为例,请将TL7606I模块的V4和V7通道分别正确连接至信号发生器A通道和B通道。信号发生器设置A通道输出频率为1KHz、峰峰值为5Vpp(即幅值为2.5V)的正弦波信号,B通道输出频率为1KHz、峰峰值为2Vpp(即幅值为1V)的正弦波信号,如下图所示。待测信号电压请勿超过模块量程,否则可能会导致模块损坏。

      微信图片_20221110192546.png

      (2)案例测试。

      为确保Qt程序运行的流畅性,评估板将使用eMMC启动模式进行测试,请确保eMMC已固化最新系统。

      请先取出Linux系统启动卡,根据底板丝印将启动方式选择拨码开关拨为0,将评估板上电,系统将从eMMC启动。

      请将案例bin目录下的可执行文件ad_display、"driver\boot_package"目录下的boot_package_vga_ad7606.fex镜像文件和"driver\bin"目录下的ad76x6.ko驱动文件拷贝至评估板文件系统任意目录下。同时,将案例"qwt\libqwt-6.1.3"目录下的所有文件拷贝至评估板文件系统"/usr/local/Qt-5.9.0/lib/"目录下。

      在评估板文件系统boot_package_vga_ad7606.fex镜像文件所在路径下,执行如下命令将其固化至eMMC,并重启系统。

      Target# dd if=boot_package_vga_ad7606.fex of=/dev/mmcblk0 seek=32800
      Target# dd if=boot_package_vga_ad7606.fex of=/dev/mmcblk0 seek=24576
      Target# sync
      Target# reboot
      

      微信图片_20221110192550.png

      评估板系统重启后,进入评估板文件系统执行如下命令加载驱动。加载成功后,将会生成设备节点"/dev/ad7606"。

      Target# insmod ad76x6.ko
      Target# ls /dev/ad7606
      

      微信图片_20221110192552.png

      执行如下命令,关闭默认运行的Qt GUI显示,并使能Qt程序运行环境。

      Target# killall Launcher
      Target# killall -9 MediaUI
      Target# killall -9 CameraUI
      Target# fbinit
      Target# echo 0,0 > /sys/class/disp/disp/attr/fb2ui
      Target# source /qt5.9.sh
      

      微信图片_20221110192554.png

      执行如下命令,查询程序运行参数。

      Target# ./ad_display --help
      

      微信图片_20221110192556.png

      a)单步模式
      执行如下命令,以单步模式采集数据。

      Target#   ./ad_display -d /dev/ad7606 -m 1
      

      参数解析:
      -d:指定设备节点;
      -m:选择运行模式(1表示单步模式,2表示连续模式)。

      同时,VGA显示屏将会显示静态波形,如下图所示。

      微信图片_20221110192601.png

      按下"Ctrl + C"可停止程序运行。
      微信图片_20221110192603.png
      微信图片_20221110192559.png

      b)连续模式
      执行如下命令,以连续模式采集数据。

      Target#   ./ad_display -d /dev/ad7606 -m 2
      

      微信图片_20221110192603.png

      同时,VGA显示屏将会实时显示动态波形,如下图所示。

      微信图片_20221110192607.png

      程序运行过程中,CPU占用率约为26%。

      微信图片_20221110192610.png

      按下"Ctrl + C"可停止程序运行。
      微信图片_20221110192612.png

      posted in 其它全志芯片讨论区
      N
      newcastle
    • 看到一篇V853开发板nfs配置方法,分享一下

      原文链接:http://bbs.eeworld.com.cn/thread-1220718-1-1.html
      作者:dql2016

      网络文件系统,英文 Network File System(NFS),是由 SUN 公司研制的 UNIX 表示层协议 (presentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。 将Ubuntu文件目录挂载到开发板上就能方便的复制文件。

      输入

      make kernel_menuconfig
      

      选择File System->Network File System,如下配置

      捕获.JPG

      重新编译并打包内核

      make -j4
      pack
      

      查看

      cat /proc/filesystems
      

      支持的文件系统,发现多了两个nfs和nfs4

      捕获2.JPG

      ubuntu配置

      安装 NFS 软件包

      sudo apt-get install nfs-kernel-server  # 安装 NFS服务器端
      sudo apt-get install nfs-common         # 安装 NFS客户端
      

      添加 NFS 共享目录

      sudo gedit /etc/exports
      

      若需要把 “/home/allwinner/nfsroot” 目录设置为 NFS 共享目录,请在该文件末尾添加下面的一行:

      /home/allwinner/nfsroot *(rw,sync,no_root_squash)     # * 表示允许任何网段 IP 的系统访问该 NFS 目录
      

      新建“/nfsroot”目录,并为该目录设置最宽松的权限:

      mkdir /home/allwinner/nfsroot
      sudo chmod -R 777 /home/allwinner/nfsroot
      

      测试文件

      捕获4.JPG

      启动 NFS 服务

      sudo /etc/init.d/nfs-kernel-server restart
      

      捕获3.JPG

      开发板上挂载

      mount -o nolock -t nfs 192.168.8.65:/home/allwinner/nfsroot /mnt
      

      捕获5.JPG

      posted in V853系列-AI视觉
      N
      newcastle
    • Reply: repo安装报错 /usr/bin/env: “python”: 没有那个文件或目录 解决方法

      @icpachong 已编辑,感谢老哥分享

      posted in V853系列-AI视觉
      N
      newcastle
    • repo安装报错 /usr/bin/env: “python”: 没有那个文件或目录 解决方法

      转自:http://bbs.eeworld.com.cn/thread-1219304-1-1.html

      根据全志 V853 SDK 下载环境搭建,安装repo时出现如下错误:

      repo help
      /usr/bin/env: “python”: 没有那个文件或目录
      

      解决方案:

      出现这个错误是由于在电脑中没有安装python,或者是因为安装了python2但是没有创建python2到python的软链接;

      注意:一定要安装python2,使用python3不行。

      如果没有安装python直接使用如下命令安装就行:

      sudo apt-get install python
      

      如果安装了python2,只要使用如下命令创建软链接就行:

      sudo ln -s /usr/bin/python2 /usr/bin/python
      

      repo 正确配置好后,输入repo help的打印如下:

      repo help
      warning: Python 3 support is currently experimental. YMMV.
      Please use Python 2.6 - 2.7 instead.
      usage: repo COMMAND [ARGS]
      
      repo is not yet installed.  Use "repo init" to install it here.
      
      The most commonly used repo commands are:
      
        init      Install repo in the current working directory
        help      Display detailed help on a command
      
      For access to the full online help, install repo ("repo init").
      
      posted in V853系列-AI视觉
      N
      newcastle
    • Reply: 如何给SDK增加vision方案

      @zznzzn 路径是哪个,找不到这里

      posted in V853系列-AI视觉
      N
      newcastle
    • Reply: 如何给SDK增加vision方案

      @zznzzn 根目录没有这个目录,在子目录下打到几个这个 target目录 ,那应该是放在哪里呢QQ图片20220908092658.png

      posted in V853系列-AI视觉
      N
      newcastle
    • Reply: 如何给SDK增加vision方案

      @zznzzn 在根目录下运行一下就好了?还是放在指定目录下

      posted in V853系列-AI视觉
      N
      newcastle
    • 如何给SDK增加vision方案

      QQ图片20220908092654.png

      这是怎么弄的呢

      不太理解这一句话,”将补丁包target/下补丁git am +补丁名称打在SDK target目录“

      posted in V853系列-AI视觉
      N
      newcastle