在RV1126装debian/ubuntu之后,读取imx415数据

在RV1126装debian/ubuntu之后,读取imx415数据 Marc 2023-07-20 13:47:44 2050

有需求要在1126用python, 并且当然, 要读摄像头, 折腾了半天.

首先, 从哪里拿数据?
1126上面, 拿数据的设备节点有好个,

raw数据读取的点, 就是VICAP设备节点,
isp的尾端, 就是媒体节点为mainpath.
ispp的尾端, 就是媒体节点为rk_ispp_scale0/rk_m_by_pass等
区别是, VICAP是从摄像头直接取数据, 拿到的是raw数据, 张这样:

怎么看怎么别扭是吧, 但是这样是对的, 因为是GB10格式.

mainpath的节点可以从isp后面拿, 但是只支持从当IMX415接在CSI 1的时候, 而易百纳的板子如果要把IMX415接到CSI1, 需要改设备树, 我先想想更简单的办法.

最后就是在ispp的后端, 就是平时rkmedia接数据的地方, 获取数据, 但是需要ispserver, 就是ispp服务, ispp本身在firefly的镜像里面是没有的, 哐哐一通移植, 现在我移植已经有了点心得了, 简单来说, 你看, 在buildroot的镜像中, 其实是有ispserver这个东西的, 包括依赖的库之类, 那么思路就简单了, 直接复制到板子上, 再用ldd ispserver, 看看都依赖啥:

root@firefly:/app# ldd ispserver
        linux-vdso.so.1 (0xaefa2000)
        libpthread.so.0 => /lib/arm-linux-gnueabihf/libpthread.so.0 (0xa6f6b000)
        librkaiq.so => /usr/lib/librkaiq.so (0xa6d6e000)
        libgdbus.so => /usr/lib/libgdbus.so (0xa6d53000)
        libIPCProtocol.so => /usr/lib/libIPCProtocol.so (0xa6d27000)
        libglib-2.0.so.0 => /usr/lib/arm-linux-gnueabihf/libglib-2.0.so.0 (0xa6c46000)
        libdbus-1.so.3 => /lib/arm-linux-gnueabihf/libdbus-1.so.3 (0xa6c05000)
        libjson-c.so.3 => /usr/lib/arm-linux-gnueabihf/libjson-c.so.3 (0xa6bed000)
        libstdc++.so.6 => /usr/lib/arm-linux-gnueabihf/libstdc++.so.6 (0xa6ae2000)
        libm.so.6 => /lib/arm-linux-gnueabihf/libm.so.6 (0xa6a67000)
        libgcc_s.so.1 => /lib/arm-linux-gnueabihf/libgcc_s.so.1 (0xa6a3e000)
        libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xa6942000)
        /lib/ld-linux-armhf.so.3 (0xa6f90000)
        libdbus-c++-1.so.0 => /usr/lib/libdbus-c++-1.so.0 (0xa6914000)
        librkdb.so => /usr/lib/librkdb.so (0xa6902000)
        libsqlite3.so.0 => /usr/lib/arm-linux-gnueabihf/libsqlite3.so.0 (0xa6845000)
        libpcre.so.3 => /lib/arm-linux-gnueabihf/libpcre.so.3 (0xa67e8000)
        libsystemd.so.0 => /lib/arm-linux-gnueabihf/libsystemd.so.0 (0xa6771000)
        libdl.so.2 => /lib/arm-linux-gnueabihf/libdl.so.2 (0xa675e000)
        librt.so.1 => /lib/arm-linux-gnueabihf/librt.so.1 (0xa6748000)
        liblzma.so.5 => /lib/arm-linux-gnueabihf/liblzma.so.5 (0xa671e000)
        liblz4.so.1 => /usr/lib/arm-linux-gnueabihf/liblz4.so.1 (0xa66f9000)
        libgcrypt.so.20 => /lib/arm-linux-gnueabihf/libgcrypt.so.20 (0xa6645000)
        libgpg-error.so.0 => /lib/arm-linux-gnueabihf/libgpg-error.so.0 (0xa6621000)

上面是我已经修复了依赖的情况, 如果发现有not found, 直接从buildroot镜像中复制过去就行了. 复制到/usr/lib下面即可.

接下来直接跑起来, 报了个空指针的错误, 一看, 哦, 所得寺内, 原来是找不到xml文件, 这个isp比如配合ispp调制后的xml一起食用才行, 那还不简单, 直接继续从buildroot镜像中, 把这个xml复制到板子的/etc/iqfiles目录, 这个目录默认也是没有的, 直接mkdir创建一个.

然后就简单了, 先用ispserver &命令, 让ispserver在后台跑起来, 然后直接用v4l2-ctl截图即可:

v4l2-ctl -d /dev/video31 --set-fmt-video=width=1920,height=1080,pixelformat=NV12 --stream-mmap=3 --stream-skip=10 --stream-to=test.yuv --stream-count=1 --stream-poll 

因为这个video31是scale0, 是可以缩放的, 所以你想要啥大小都行, 格式我这里就用nv12, 但是支持的格式有:

 v4l2-ctl --list-formats-ext -d /dev/video31
 ...
        [0]: 'NV16' (Y/CbCr 4:2:2)
        [1]: 'NV12' (Y/CbCr 4:2:0)
        [2]: 'GREY' (8-bit Greyscale)
        [3]: 'YUYV' (YUYV 4:2:2)
        [4]: 'UYVY' (UYVY 4:2:2)

就它了, 因为到时候解码会容易点, 太偏僻的编码方式, 看不到图.

一切顺利, 就会看到产生一个test.yuv文件, 大小为192010803/2 = 3110400字节, 然后用yuvviewer打开即可:

拉流的话, 只需要把rkmedia的那套拉到板子上相信也不难了.

最后再说一下, 如果板子装了ubuntu/debian没法直接用adb, 就先装nfs-common, 然后mount 开发pc的nfs盘, 才方便传文件.
另外, 需要参考我之前的文章, 把ubuntu换成firefly的debian, 因为我发现ubuntu用着十分不得劲…

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
Marc
红包 5 3 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
Marc
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区