导航

    全志在线开发者论坛

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

    哪吒板上用display显示yuv格式数据直接蓝屏

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

      在哪吒板上,将摄像头数据用display显示,LCD屏只有蓝屏,大家有遇到过没,求高手指点

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

        具体是怎么操作的呢?

        H 1 条回复 最后回复 回复 引用 分享 0
        • H
          Honey130602 LV 5 @tigger 最后由 编辑

          @tigger 目标是把CVBS摄像头采集的数据通过DE显示
          1、内核配置部分:TVD
          tvd.jpg
          然后display的配置也勾选上了
          disp.jpg
          目的想通过DE显示摄像头采集的数据。
          2、应用程序部分

          • 打开摄像头
            dev_video = "/dev/video4";
            video_fd = open(dev_video, O_RDWR /* required */ | O_NONBLOCK, 0);

          • 初始化display
            if((dispfd = open("/dev/disp",O_RDWR)) == -1)
            {
            printf("open display device fail!\n");
            return -1;
            }

          下面是常规流程:

          • 查询摄像头能力并设置格式,摄像头是用的800*480的
            ioctl(video_fd, VIDIOC_S_FMT, &video_format)

          • 向驱动申请缓冲区,申请了4个buffer
            ioctl(video_fd, VIDIOC_REQBUFS, &video_requestbuffers)

          • 内核地址映射到应用层地址
            先ioctl(video_fd, VIDIOC_QUERYBUF, &video_buffer),然后再mmap

          • 将缓冲区放入到采集队列
            ioctl(video_fd, VIDIOC_QBUF, &video_buffer)

          • 启动摄像头采集
            ioctl(video_fd, VIDIOC_STREAMON, &opt_type)

          • while循环反复出队列入队列
            while.jpg

          • 最后是disp_set_addr函数
            setaddr.jpg

          最后直接整个屏幕全蓝,啥都没有,之前已经做过尝试,把yuv的数据存成文件,图像是对的,手动转rgb,通过fb0显示,图像也是对的,但是只要通过display显示就不对了。

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

            @honey130602 可以用package/utils/yuview来测试显示一张yuv图片。另外蓝屏的时候可以执行cat /sys/class/disp/disp/attr/sys看看图层信息哪里有异常。

            H 1 条回复 最后回复 回复 引用 分享 0
            • H
              Honey130602 LV 5 @anruliu 最后由 编辑

              @anruliu 感谢,已经尝试了,用yuview没问题,可以显示之前摄像头捕获的一帧数据存成的yuv文件,然后后面用cat /sys/class/disp/disp/attr/sys显示的信息如下,但是不晓得怎么看这个有没有异常:
              下面是执行应用程序前的:
              root@TinaLinux:/# cat /sys/class/disp/disp/attr/sys
              screen 0:
              de_rate 300000000 hz, ref_fps:60
              mgr0: 800x480 fmt[rgb] cs[0x204] range[full] eotf[0x4] bits[8bits] err[0] force_sync[0] unblank direct_show[false] iommu[1]
              dmabuf: cache[0] cache max[0] umap skip[0] overflow[0]
              lcd output backlight( 50) fps:60.2 800x 480
              err:0 skip:221 irq:44264 vsync:0 vsync_skip:0
              BUF enable ch[1] lyr[0] z[16] prem[N] a[pixel 255] fmt[ 0] fb[ 800, 480; 800, 480; 800, 480] crop[ 0, 0, 800, 480] frame[ 0, 0, 800, 480] addr[ffe00000, 0, 0] flags[0x 0] trd[0,0] depth[ 0]

              下面是执行应用程序捕获摄像头数据后的:
              root@TinaLinux:/mnt/exUDISK# cat /sys/class/disp/disp/attr/sys
              screen 0:
              de_rate 300000000 hz, ref_fps:60
              mgr0: 800x480 fmt[rgb] cs[0x204] range[full] eotf[0x4] bits[8bits] err[0] force_sync[0] unblank direct_show[false] iommu[1]
              dmabuf: cache[0] cache max[0] umap skip[0] overflow[0]
              lcd output backlight( 50) fps:60.2 800x 480
              err:317 skip:347 irq:48078 vsync:0 vsync_skip:0
              BUF enable ch[0] lyr[0] z[1] prem[N] a[globl 255] fmt[ 76] fb[ 800, 480; 400, 240; 0, 0] crop[ 0, 0, 800, 480] frame[ 0, 0, 800, 480] addr[42600000,4265dc00, 0] flags[0x 0] trd[0,0] depth[ 0] BUF enable ch[1] lyr[0] z[16] prem[N] a[pixel 255] fmt[ 0] fb[ 800, 480; 800, 480; 800, 480] crop[ 0, 0, 800, 480] frame[ 0, 0, 800, 480] addr[ffe00000, 0, 0] flags[0x 0] trd[0,0] depth[ 0]

              1 条回复 最后回复 回复 引用 分享 0
              • H
                Honey130602 LV 5 最后由 编辑

                我现在有点怀疑,是不是我的摄像头不是mplane导致的,内核代码中,貌似如果不是mplane,很多都直接返回了,所以是否这样导致地址异常。。。

                1 条回复 最后回复 回复 引用 分享 0
                • H
                  Honey130602 LV 5 最后由 编辑

                  嗯,终于出来了,强制将驱动包括tvd和v4l2层的改为支持mplane,但是只用一个plane,在应用程序中分配地址,并传递userptr给DE,显示参考yuview的,显示效果不错,很流畅,CPU占用率不到3%

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

                    @honey130602 6666👏

                    1 条回复 最后回复 回复 引用 分享 0
                    • H
                      hameyou LV 4 最后由 编辑

                      不错参考yuview里面的示例程序,在F1c200s上实现了直接读取AHD解码芯片出来1920*1080的NV21数据并在LCD上实时显示。

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

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

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