何亚斌

全志 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

4 comments

  1. danile

    有偿求源码

  2. 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();

  3. 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