何亚斌

全志 H3 视频硬件编解码库
全志 H3 硬件编解码库一、需求来源公司硬件产品使用了 NanoPi NEO Core 这样一款基于全志 H3 的...
扫描右侧二维码阅读全文
15
2019/01

全志 H3 视频硬件编解码库

全志 H3 硬件编解码库

一、需求来源

公司硬件产品使用了 NanoPi NEO Core 这样一款基于全志 H3 的核心板。由于项目中涉及到视频直播、视频录制,且要求添加 OSD 文字信息,故需要视频编解码操作。而使用软件解码仅能满足 1280×720@25fps 解码性能,且解码时间随图像复杂度波动,再使用软件编码就跑不动 25 帧了,只能寻求视频硬件编解码解决方案。

二、调试经历

1. 内核移植及 Ubuntu Core 移植

由于友善之臂为 NanoPi NEO Core 提供的为 Linux 4.X 的内核并不支持硬件编解码,遂从原厂 BSP 并参考官方文档及友善之臂提供的硬件资料移植了 3.4.39 内核。
移植的官方 3.4.39 内核

移植原厂 BSP 的根本原因主要是需要内核驱动支持: /dev/ion 、 /dev/cedar_dev
设备列表 /dev/ion 、 /dev/cedar_dev

在调试过程中发现提供的编解码库会引起应用程序段错误,最终确认是 gcc 库版本不兼容导致。
重新移植最新 Ubuntu Core 18.04 并使用 gcc 4.9 版本工具链后解决了该问题。

2、编解码库调试

尝试了不同的编解码库,建立了多个工程进行调试(多得自己已经记不清哪些版本 ,一张图足以说明问题)。
坎坷的编解码库调试之路-不同版本库的调试验证

三、解决方案


实测支持 4×720P@30fps MJPEG 解码(解复用), 1×1080P@60fps MJPEG/H264 解码。
实测支持 1×1080P@30fps MJPEG/H264 编码,多路低分辨率编码未测试验证。
实测解码输出支持指定图像格式: YV12 、 NV21 、全志定义的 MB32_420 格式,并支持图像缩放。
实测解码输出支持指定 YV12 、 NV21 、 MB32_420 格式
实测编码输入支持图像格式: YUV420P 、 YUYV422 (部分未测试或未记录)。
编码输入支持图像格式 YUV420P、 YUYV422
编码例程请参考项目目录 /cedarx/demo/demoVencoder/EncoderTest.c
解码例程请参考项目目录 /cedarx/demo/demoVdecoder/demoVdecoder.c
同编同解例程请参考项目目录 /cedarx/demo/demoVencVdec/EncoderDecoderTest.c

四、作品秀

早期单摄像头版本画面。
单摄像头画面

改进后三摄像头合成画面。
三摄像头合成画面

欢迎有河道水质监测及排污口扫描需求的客户来我司参观、交流,寻求合作。
有相关嵌入式软件开发项目亦可联系本人外包。

Last modification:February 25th, 2019 at 11:42 pm

55 comments

  1. hjglwkhfsg

    《漆黑林地与着魔时日:民俗恐怖电影史》记录片高清在线免费观看:https://www.jgz518.com/xingkong/22375.html

  2. emnamnykbp

    你的文章让我感受到了不一样的风景,谢谢分享。 https://www.4006400989.com/qyvideo/27037.html

  3. tubncuyknf

    《七省拳王》动作片高清在线免费观看:https://www.jgz518.com/xingkong/93237.html

  4. ybskdyvmcn

    《端午奇妙游2024》大陆综艺高清在线免费观看:https://www.jgz518.com/xingkong/126310.html

  5. shozozkbnv

    《我独自李食堂》日韩综艺高清在线免费观看:https://www.jgz518.com/xingkong/124683.html

  6. hxfxquvakp

    你的文章充满了智慧,让人敬佩。 http://www.55baobei.com/8CHljKKPVU.html

  7. ghcvpfoegi

    你的文章让我感受到了正能量,非常棒! http://www.55baobei.com/OVhwULdnuw.html

  8. qkadoalkwh

    你的文章让我学到了很多技能,非常实用。 https://www.yonboz.com/video/82301.html

  9. ghgatvbiat

    《钢铁意志》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/1371.html

  10. okyedpaamm

    你的文章让我感受到了艺术的魅力,谢谢! https://www.4006400989.com/qyvideo/18357.html

  11. chfevgqawj

    《人情纸风船》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/4173.html

  12. bmamrjamfl

    《警贼兄弟》动作片高清在线免费观看:https://www.jgz518.com/xingkong/57182.html

  13. ugvxmabcru

    文章的确不错啊https://www.cscnn.com/

  14. ylrssnnqqs

    怎么收藏这篇文章?

  15. qinqin04

    请问测试
    1×1080P@60fps MJPEG/H264 解码,
    1×1080P@30fps MJPEG/H264 编码,
    是同时进行的吗?

  16. 阳光沙滩

    你好,我尝试在orangepipc上编译,提供的库使用jpeg的demo时libaw_mp3dec.so,libaw_wavdec.so,libaw_oggdec.so出现undefined sysmbol:__aeabi_idiv,想问下external的源码有吗,自己编译下

  17. 音视开发同道中人欢迎加qq群 27810038 一起交流

  18. CG

    斌哥,求编译后的硬件编码库,自己编译不过啊,依赖都安装不上。

  19. swxg

    移植后报错如下,出错的地方在库里没有源码,不知道如何下手了
    # ./vencoderdemo -i ./robotica_420.yuv -o robotica_420.264 -n 1 0f 0
    debug : ionAlloc : *** get __GetIonMemOpsS ***
    debug : ionAlloc : begin ion_alloc_open

    verbose: ionAlloc : pid: 1938, g_alloc_context = 0x12b6428

    error : cedarc : check (gVeParam.ic_version) failed:You should know ic version!
    vencoderdemo: ve.c:83: initVELocks: Assertion `0' failed.
    Aborted

    1. CG
      @swxg

      搞定了吗?

  20. 小海

    H616能用这个解码库吗?网上找不到相应地库,我尝试编译报了连接库的错误/usr/bin/ld: cannot find -lcdc_vdecoder

  21. erroot

    你好我用Orangp one H3 的核是用Cedarx 硬件编码 error : ionAlloc : ION_IOC_SUNXI_FLUSH_RANGE failed
    内存同步出错,导致画面有绿色段横杆 大神可以指导一下吗? 可以外包合作!!

    1. tank
      @erroot

      这个问题解决了吗,整了两天了还是这个问题,一点进展没有,如果解决了能给说一下嘛

    2. CG
      @erroot

      兄弟你的硬件编码可以吗?

      1. erroot
        @CG

        编码可以了

        1. 蝈蝈
          @erroot

          大师怎么解决的?“error : ionAlloc : ION_IOC_SUNXI_FLUSH_RANGE failed”

          1. tank
            @蝈蝈

            这个问题解决了吗?

            1. ookk303
              @tank

              你解决了吗
              邮箱1109772809@qq.com

  22. become

    问下楼主,你测试过1080x1920分辨率下,一帧编码耗时多少?我测试下来光是编码耗时在12ms左右。

    1. CG
      @become

      你好在吗?

      1. become
        @CG

        email吧:cheng_wei10613@163.com

    2. CGc
      @become

      become 大牛,我也在弄H3的硬件编码,希望得到大神的指点,有偿!麻烦给下联系方式~十分感谢~

  23. become

    用的ov5640摄像头不支持直接输出yuv420sp或yuv420

    1. CGc
      @become

      你好,become 大神有联系方式吗,希望加一下你!谢谢

    2. 何亚斌
      @become

      摄像头配置成NV12采集,编码配置为YUV420SP即可。

      1. become
        @何亚斌

        我直接用yuyv模式设置的c分量为零就好了

  24. become

    yuyv422格式编码,输入buffer y和c分量是柔在一起的这个怎么传参呢?

  25. 庄生梦

    CdcMemOpen 是定义在什么地方呢? 是内核3.4版本独有的吗?我的是全志的3.10 。已经有现成的驱动节点 /dev/ion 和/dev/cedar_dev 。到

    还是交叉编译的差异。使用的全志SDK中提供的 arm-buildroot-linux-gnueabihf-gcc 。
    希望得到你的帮助。

  26. zhuhuan

    您好,我遇到一个问题运行jpegdemo 是没有问题的 运行其他例子就会包这个错误error : ionAlloc : ION_IOC_ALLOC error

    error : cedarc : pSbmBuf == NULL.
    error : cedarc : h264Context->pBSMamager == NULL
    error : cedarc : BitStreamManager == NULL.
    error : cedarc : BitStreamManager == NULL.

  27. sshen

    求教下是否可以在H5上做呢

    1. sshen
      @sshen

      求教下老板,用了硬编码,芯片发热量是否有降低?相对于用x264库来做的话

      1. 何亚斌
        @sshen

        硬件编解码产热也比较大。我没做过测试,这个应该和编解码的分辨率,图像复杂度都相关的,也不能一概而论。

  28. okshall

    你好,参考博主帖子,实现了硬件编解码,但是想请问下多图层显示怎么实现的啊,谢谢!

    1. tank
      @okshall

      整这个整了好几天,可是一解码就提示ION IOC SUNXI FLUSH RANGE failed,你的出现这个情况了吗?

  29. 潘晓宇

    您好,请教一下,我在运行jpegdemo的时候会提示open /dev/ion failed 和 /dev/cedar_dev failed. 请问是什么原因呢。我用的是nano pi 给的交叉编译工具(arm-linux-gnueabihf),用的libcedarx是gnueabihf_3.10,谢谢

    1. 何亚斌
      @潘晓宇

      确认一下/dev/ion和/dev/cedar_dev设备节点是否存在,如果不存在则说明使用的内核里面没有开启/集成ion和cedar驱动,可以使用官方的BSP内核。

  30. 小陈
    该评论仅登录用户及评论双方可见
  31. 刘根淼
    该评论仅登录用户及评论双方可见
  32. danile

    有偿求源码

    1. wu
      @danile

      测试过V3s、R11、F1c200s、T7,linux下支持硬件编解码。需要联系我,webb_2002@163.com

  33. WCG

    如下
    error : cedarc : format '101' support!
    error : cedarc : unsupported format MJPEG
    error : cedarc : create video engine fail.

    1. 何亚斌
      @WCG

      在main函数中 代码 pVideo = CreateVideoDecoder(); 之前加上 AddVDPlugin(); 如下:
      AddVDPlugin();
      pVideo = CreateVideoDecoder();

      1. vector
        @何亚斌

        实测还是会出现以上错误,请问是怎么回事呢

        1. 何亚斌
          @vector

          确认一下你的库(libcdc_vd_xxx.so的那些库)有没有加到系统目录。调用AddVDPlugin();时会看到加载解码库的信息。将库文件拷贝到/usr/local/lib/cedarx目录下面。
          在/etc/ld.so.conf.d目录下面创建cedarx.conf文件,里面写入内容为你的库路径,即/usr/local/lib/cedarx。然后再运行ldconfig命令。

  34. WCG

    你好,我的H3平台,移植后,运行jpegdemo,出现以下错误,帮忙分析下,谢谢!
    debug : ionAlloc : *** get __GetIonMemOpsS ***
    debug : ionAlloc : begin ion_alloc_open

    verbose: ionAlloc : pid: 738, g_alloc_context = 0x25010

    debug : cedarc :
    >>>>>>>>>>>>>>>>>>>>>>>>>>>>> Cedar Codec

Leave a Comment