导航

    全志在线开发者论坛

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

    LVGL如何显示摄像头采集的数据?

    V Series
    9
    17
    5951
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • C
      cruise33 LV 6 最后由 编辑

      请问LVGL支持显示摄像头采集的数据吗?如果支持,大概怎么操作呢?

      aldfaaa D 2 条回复 最后回复 回复 引用 分享 0
      • aldfaaa
        whycan矿工-小叶 LV 7 @cruise33 最后由 编辑

        @cruise33 LVGL和采集摄像头数据两者不相干; 只是完成了后者可以用前者配合显示

        C 1 条回复 最后回复 回复 引用 分享 1
        • C
          chengwei_peng LV 6 最后由 编辑

          现在应该是没有LVGL的插件支持摄像头数据采集吧。可以先使用V4L2 ioctl采集数据,然后将采集到的YUV数据给LVGL显示。

          C 1 条回复 最后回复 回复 引用 分享 0
          • C
            cruise33 LV 6 @aldfaaa 最后由 编辑

            @aldfaaa 了解,感谢回复!

            1 条回复 最后回复 回复 引用 分享 0
            • C
              cruise33 LV 6 @chengwei_peng 最后由 编辑

              @chengwei_peng 能直接显示YUV么?应该要将YUV转成RGB,再给LVGL显示吧?

              WhycanService 1 条回复 最后回复 回复 引用 分享 0
              • WhycanService
                WhycanService LV 8 @cruise33 最后由 编辑

                @cruise33 lvgl输出的话要转,但是如果使用多图层,图层是支持yuv直出的,可以不用转换

                1 条回复 最后回复 回复 引用 分享 0
                • C
                  cruise33 LV 6 最后由 编辑

                  1. LVGL跟多图层是怎么配合的?用virvi2vo显示摄像头图像,再加上LVGL,显示就被LVGL覆盖了
                  2. LVGL是怎么输出指针中的数据?用lv_img_set_src的方式不可行(只支持内部数组、外部图片文件和bin文件等)
                  3. framebuffer、disp、DE这三者是啥关系?
                  1 条回复 最后回复 回复 引用 分享 0
                  • C
                    cruise33 LV 6 最后由 编辑

                    通过mpp采集摄像头数据,经g2d缩放转成rgb给lvgl能正常显示了(数组方式),但帧率有点低,有更好的做法吗? 要显示摄像头数据的话,最好用vo模块来显示吧,如果想在其基础上,加lvgl的UI控件,应该怎么操作呢?

                    A 1 条回复 最后回复 回复 引用 分享 0
                    • A
                      anruliu LV 6 @cruise33 最后由 编辑

                      @cruise33 用virvi2vo显示摄像头图像后,再加上LVGL,显示就被LVGL覆盖了,是因为UI是在最上层,需要挖空摄像头部分的数据,可以清空framebuffer后,设置背景为透明的,参考如下代码

                              if (lv_obj_has_state(btn, LV_STATE_CHECKED)) {
                                  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);
                                  /* Empty the buffer, not emptying will cause the UI to be opaque */
                                  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 {
                                  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);
                              }
                      

                      并且lv_conf.h中#define LV_COLOR_SCREEN_TRANSP 1

                      C 1 条回复 最后回复 回复 引用 分享 0
                      • C
                        cruise33 LV 6 @anruliu 最后由 编辑

                        @anruliu 感谢指导!
                        按着思路尝试设置背景透明,清空framebuffer,但屏幕还是白茫茫一片
                        6b1cff91-9155-49af-a526-f7a75fadc918-image.png

                        操作如下:

                        1. LV_COLOR_SCREEN_TRANSP设为1
                          fa8d6ccb-b606-43ce-aba0-e5b7a66d930d-image.png

                        2. 代码

                            for(i=0;i<VIPP2VO_NUM;i++)
                            {
                        		CreateVIPP2VOLink(i, &stContext);
                        	    result = AW_MPI_ISP_SwitchIspConfig(stContext.mConfigPara.mVIPP2VOConfigArray[i].mIspDev, stContext.mConfigPara.mIspWdrSetting);
                        	    if(result != SUCCESS)
                        	        printf("fatal error! isp switch wdr[%d] fail[%d]", stContext.mConfigPara.mIspWdrSetting, result);
                            }
                        
                            static lv_style_t style_scr_act;
                            lv_style_init(&style_scr_act);
                            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);
                        

                        是这样操作吗?lv_disp_get_default()就是获取默认屏幕吗

                        我看网上教程有类似的操作,做了好些尝试也不管用
                        0bfd8ed2-f869-4910-88cb-5a7842c70634-image.png

                        A 1 条回复 最后回复 回复 引用 分享 0
                        • A
                          anruliu LV 6 @cruise33 最后由 编辑

                          @cruise33 要应用你设置的风格啊

                          lv_obj_add_style(lv_scr_act(), &style_scr_act, 0);
                          
                          C 2 条回复 最后回复 回复 引用 分享 0
                          • C
                            cruise33 LV 6 @anruliu 最后由 编辑

                            此回复已被删除!
                            1 条回复 最后回复 回复 引用 分享 0
                            • C
                              cruise33 LV 6 @anruliu 最后由 编辑

                              @anruliu 我搞定了,感谢感谢!! 这样就可以了

                                  static lv_style_t style_scr_act;
                                  lv_style_init(&style_scr_act);
                                  lv_style_set_bg_opa(&style_scr_act, LV_OPA_TRANSP);
                                  lv_obj_add_style(lv_scr_act(), &style_scr_act, 0);
                                  lv_disp_set_bg_opa(lv_scr_act(), LV_OPA_TRANSP);
                              
                              D 1 条回复 最后回复 回复 引用 分享 0
                              • D
                                dybzz2 LV 2 @cruise33 最后由 编辑

                                @cruise33 你好 能分享一下源码 怎么实现的吗 感谢

                                B 1 条回复 最后回复 回复 引用 分享 0
                                • B
                                  biubiu LV 5 @dybzz2 最后由 编辑

                                  @dybzz2 韦老师那边有参考:https://www.bilibili.com/video/BV1rF411f7Fw

                                  P 1 条回复 最后回复 回复 引用 分享 0
                                  • P
                                    proc_c LV 3 @biubiu 最后由 编辑

                                    @biubiu 在 LVGL如何显示摄像头采集的数据? 中说:

                                    @dybzz2 韦老师那边有参考:https://www.bilibili.com/video/BV1rF411f7Fw

                                    你好,我看这个视频中韦老师写的代码,nv12 转 jpg的部分是使用的 cpu转化的,可以提供一下 g2d 转化的实现代码吗?

                                    1 条回复 最后回复 回复 引用 分享 0
                                    • D
                                      dtly11223344 LV 2 @cruise33 最后由 编辑

                                      @cruise33 ,请教一下怎么实现LVGL显示摄像头内容以及播放音视频,可以有偿,谢谢!

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

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

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