您尚未登录。

楼主 #1 2020-10-06 22:57:31

逸俊晨晖
会员
注册时间: 2018-08-29
已发帖子: 151
积分: 137.5

V3s使用gstreamer的插件openmax调用cedar硬解码,荔枝派zero测试通过

前置要求:
基于aodzip的cedar:
https://whycan.com/t_4219.html
完成以上操作后 要保证能在/dev目录下找到cedar_dev和ion


基本思路:
aodzip已经搞出了libcedar和openmax
全志的硬编解码库(即libcedarc\library\arm-linux-gnueabihf里面的库)可以操作设备/dev/cedar_dev
libcedar可以操作全志硬编解码库和设备/dev/ion
openmax是对libcedar的操作封装 用于作为ffmpeg和gstreamer的编解码器插件
全志已经对openmax操作libcedar做好了适配 我们可以用支持openmax插件的音视频编解码器进行硬件编解码
aodzip原贴里有人提到过可以使用gstreamer1.0进行验证 本贴就是通过gstreamer1.0的插件openmax调用cedar进行H264解码

注意:openmax可以作为ffmpeg的编码器插件 不能直接作为ffmpeg的解码器插件 有个例外 树莓派可用使用openmax作为ffmpeg的解码器插件 这个是特殊接口


gstremer适配:

buildroot:
因为全志的硬编解码库默认是用glibc编译的 所以要确定buildroot使用的c库是glibc
打开buildroot菜单

make menuconfig

检查
Toolchain->C library (glibc)

添加openmax组件
Target packages->Audio and video applications->bellagio

添加gstreamer组件
Target packages->Audio and video applications->gstreamer 1.x

同目录下

enable command-line parser
enable tracing subsystem
enable gst-debug trace support
enable plugin registry
install gst-launch & gst-inspect

添加gstreamer插件
同目录下

gst1-plugins-base
    videotestsrc
videoconvert
videorate

gst1-plugins-bayer2rgb-neon

gst1-plugins-good 
avi (*.avi video)
    videofilter

gst1-plugins-bad
    autoconvert
    videoparsers
    videosignal
    fbdev            对fb设备操作的支持 选择后才能输出在fb上
    fdk-aac

gst1-libav                    这个是ffmpeg的解码库 可以做个软解对比
gst-omx                这个是openmax的插件接口

选择好后保存编译

make

openmax接口修改:
此时编译好后gstreamer的openmax插件接口是不可以正常使用的
使用全志的openmax插件解码器进行解码时会出现gstreamer协商错误
这是因为全志在openmax插件上新定义了颜色空间 而gstreamer的openmax接口不知道 所以我们要让gstreamer的openmax接口知道
(在文件libcedarc\openmax\include\OMX_IVCommon.h中的OMX_COLOR_FORMATTYPE枚举型下可以看到全志扩展了两个类型)
(在文件libcedarc\openmax\vdec\inc\omx_vdec_config.h的宏定义#define COLOR_FORMAT_DEFAULT           OMX_COLOR_FormatYVU420Planar 可以知道解码默认输出YVU420即YV12)

在gstreamer的openmax接口添加全志的颜色空间定义:

进入目录

cd output/build/gst-omx-1.16.0/

修改文件

vim omx/gstomxvideo.c

在函数gst_omx_video_get_format_from_omx的switch下添加case

case OMX_COLOR_FormatYVU420Planar:
format = GST_VIDEO_FORMAT_YV12;
break;

保存退出
:wq

在当前目录下删掉buildroot对于gst-omx的编译构建标记

rm .stamp_built .stamp_configured .stamp_target_installed .stamp_staging_installed

回到buildroot目录下

cd ../../../

再次编译

make

此时 带gstream和openmax的文件系统构建完成
开机进行硬解码验证

gst-omx注册:

gstreamer使用openmax前要先进行注册

先备份一下注册文件

cp /etc/xdg/gstomx.conf /etc/xdg/gstomx.conf.bck

修改gst-omx插件注册文件

vi /etc/xdg/gstomx.conf

(注意使用vi时不要用方向键 不然可能会乱码 用hjkl键移动光标)

可以发现有两个omxh264dec 对这两个项 添加或者替换以下键值对

core-name=/usr/lib/libOmxCore.so
component-name=OMX.allwinner.video.decoder.avc
hacks=no-component-role;no-disable-outport
(最后这个no-disable-outport一定要加 不然无法解码)
此时注册gst-omx成功

最后一步!!!!!!
以下命令验证
使用gstreamer的插件openmax调用cedar硬解码

gst-launch-1.0 filesrc location=bad_apple.mp4 ! qtdemux ! h264parse ! omxh264dec ! autovideoconvert ! fbdevsink

命令简析
filesrc location=        要解码的文件
qtdemux             解容器 输出视频流
h264parse             流格式转换
omxh264dec         输入视频流 输出帧
autovideoconvert     帧格式转换
fbdevsink             显示在fb

使用ffmpeg的h264解码器进行软解 对比效果

gst-launch-1.0 filesrc location=bad_apple.mp4 ! qtdemux ! avdec_h264 ! autovideoconvert ! fbdevsink

验证平台:
硬件 荔枝派zero
linux 主线内核5.2荔枝派官方的
启动方式 TF卡
h264文件 bad_apple.mp4

其余的硬件编解码器可以用同样的方式使用
f1c100s也可以这样使用

至此 硬解码连接通用音视频解码器的最后一公里已经完成了 主要的多媒体功能已经步入正轨 标志着v3s和f1c100s可以摆脱方案商的奇怪sdk 使用主流的开发框架进行开发

最后感谢前人的努力 感谢aodzip 感谢挖坑网 感谢晕哥

离线

楼主 #2 2020-10-06 23:36:52

逸俊晨晖
会员
注册时间: 2018-08-29
已发帖子: 151
积分: 137.5

Re: V3s使用gstreamer的插件openmax调用cedar硬解码,荔枝派zero测试通过

对比一下硬解和软解的命令
gst-launch-1.0 filesrc location=bad_apple.mp4 ! qtdemux ! h264parse ! omxh264dec ! autovideoconvert ! fbdevsink
gst-launch-1.0 filesrc location=bad_apple.mp4 ! qtdemux ! avdec_h264 ! autovideoconvert ! fbdevsink
硬解比软件多用了个gstreamer元件 h264parse
这是因为avdec_h264的sink(输入)视频流格式可以是avc和byte-stream 而omxh264dec的sink只能是byte-stream
而qtdemux的src(输出)的视频流格式是avc 所以 要用元件 h264parse  将avc转化为byte-stream 给omxh264dec 不然是无法解码的

最近编辑记录 逸俊晨晖 (2020-10-06 23:37:08)

离线

楼主 #4 2020-10-06 23:56:31

逸俊晨晖
会员
注册时间: 2018-08-29
已发帖子: 151
积分: 137.5

Re: V3s使用gstreamer的插件openmax调用cedar硬解码,荔枝派zero测试通过

硬解码输出帧格式
omxh264dec解出来的帧为yvu420(YV12)然后经过元件 autovideoconvert 转换为BGR格式给fbdev显示
那能不能直接让解码器直接输出BGR格式呢?全志硬解码api上是支持的
但是openmax修改输出格式还没试验成功 目前发现

1.在文件libcedarc\openmax\vdec\src\omx_vdec_aw_decoder_linux.c中
结构体成员eOutputPixelFormat被直接赋值帧格式常量 可能直接修改这个常量就可以输出其他格式

2.然后在文件libcedarc\openmax\vdec\inc\omx_vdec_config.h
的宏定义#define COLOR_FORMAT_DEFAULT                  OMX_COLOR_FormatYVU420Planar 修改后可以改变默认的omx认为的帧格式

这两处应该是很大关系的

离线

楼主 #5 2020-10-07 00:00:13

逸俊晨晖
会员
注册时间: 2018-08-29
已发帖子: 151
积分: 137.5

Re: V3s使用gstreamer的插件openmax调用cedar硬解码,荔枝派zero测试通过

达克罗德 说:

666,太厉害了!
如果要解码后和UI的layer合成叠加思路是怎么样的呢?

这个之前在荔枝派linux群听人说过 要在坑卓里扒出de 有了de后可以分层输出图像 会出4个fb设备对应不同的层 而且fb设备除了可以显示rgb外 还可以直接显示yuv 还有硬件放缩 透明度 等功能

离线

楼主 #8 2020-10-07 09:35:11

逸俊晨晖
会员
注册时间: 2018-08-29
已发帖子: 151
积分: 137.5

Re: V3s使用gstreamer的插件openmax调用cedar硬解码,荔枝派zero测试通过

aodzip 说:

图层叠加直接用libdrm就可以

f1c100s的drm是可以直接用的
v3s的不能 驱动有问题 要去改

离线

楼主 #10 2020-10-07 14:11:33

逸俊晨晖
会员
注册时间: 2018-08-29
已发帖子: 151
积分: 137.5

Re: V3s使用gstreamer的插件openmax调用cedar硬解码,荔枝派zero测试通过

镜像和使用方法
gst-omx硬解码镜像.zip

离线

楼主 #14 2020-10-10 10:18:20

逸俊晨晖
会员
注册时间: 2018-08-29
已发帖子: 151
积分: 137.5

Re: V3s使用gstreamer的插件openmax调用cedar硬解码,荔枝派zero测试通过

达克罗德 说:
逸俊晨晖 说:
aodzip 说:

图层叠加直接用libdrm就可以

f1c100s的drm是可以直接用的
v3s的不能 驱动有问题 要去改

drm支持硬件叠加?以前玩过简单的drm,还不知道有这个功能

可以硬件叠加层 还能硬件层混色 直接操作libdrm就行
目前发现f1c100s主线操作libdrm混色时 背景层透明度一定要为满 不然背景层前景层都不显示 也就是说libdrm还是有一定的问题
v3s主线操作libdrm就直接不能显示

离线

楼主 #16 2020-10-12 22:36:11

逸俊晨晖
会员
注册时间: 2018-08-29
已发帖子: 151
积分: 137.5

Re: V3s使用gstreamer的插件openmax调用cedar硬解码,荔枝派zero测试通过

zhuyang220 说:

请教下v3s或者f1c100s上 有没有h264硬件编码的能力?

有的

离线

楼主 #19 2020-10-15 23:12:09

逸俊晨晖
会员
注册时间: 2018-08-29
已发帖子: 151
积分: 137.5

Re: V3s使用gstreamer的插件openmax调用cedar硬解码,荔枝派zero测试通过

f1c100_ 说:

我用f1c100s试了下出现这个错误:
Setting pipeline to PAUSED ...
ERROR: Pipeline doesn't want to pause.
ERROR: from element /GstPipeline:pipeline0/GstOMXH264Dec-omxh264dec:omxh264dec-omxh264dec0: Could not initialize supporting library.
Additional debug info:
gstvideodecoder.c(2530): gst_video_decoder_change_state (): /GstPipeline:pipeline0/GstOMXH264Dec-omxh264dec:omxh264dec-omxh264dec0:
Failed to open decoder
Setting pipeline to NULL ...
Freeing pipeline

我在builroot没有看到gst1-plugins-bayer2rgb-neon这个选项,跟这个有关系吗

你这个是gst-omx注册失败的问题 把我发文件里的那个注册文件替换你原来的文件

离线

楼主 #20 2020-10-15 23:14:34

逸俊晨晖
会员
注册时间: 2018-08-29
已发帖子: 151
积分: 137.5

Re: V3s使用gstreamer的插件openmax调用cedar硬解码,荔枝派zero测试通过

luoguojian6 说:

好东西,F1C100s看规格书只有JPG编码而已

你这找资料能力和阅读能力要提升

离线

楼主 #27 2020-10-29 00:30:41

逸俊晨晖
会员
注册时间: 2018-08-29
已发帖子: 151
积分: 137.5

Re: V3s使用gstreamer的插件openmax调用cedar硬解码,荔枝派zero测试通过

tianjjff 说:

我直接在sysroot目录里OMX_IVCommon.h增加了这个OMX_COLOR_FormatYVU420Planar,可以编译通过了,不知道这样行不行

这个东西是定义在全志提供的omx接口里的 你看看你的buildroot是不是没正确添加libcedar

离线

楼主 #28 2020-10-29 00:36:20

逸俊晨晖
会员
注册时间: 2018-08-29
已发帖子: 151
积分: 137.5

Re: V3s使用gstreamer的插件openmax调用cedar硬解码,荔枝派zero测试通过

不要引用整个一楼 帖子拉长了不好阅读

离线

楼主 #33 2020-11-05 01:00:25

逸俊晨晖
会员
注册时间: 2018-08-29
已发帖子: 151
积分: 137.5

Re: V3s使用gstreamer的插件openmax调用cedar硬解码,荔枝派zero测试通过

hanzixi_angel 说:

# gst-launch-1.0 filesrc location=bad_apple.mp4 ! qtdemux ! h264parse ! omxh264d
ec ! autovideoconvert ! fbdevsink
WARNING: erroneous pipeline: no element "omxh264dec"

报错 no element "omxh264dec"   无法播放视频   软解是可以播放的   
查看/usr/lib目录并没有/usr/lib/libOmxCore.so这个文件   请问这个文件是如何生成的   是buildroot编译生成的吗

libcedarc\openmax\omxcore\Makefile.am说明此路径产生libOmxCore.so 没有就说明前置贴没配好 就是帖子顶部那个链接

离线

楼主 #37 2020-11-26 22:23:21

逸俊晨晖
会员
注册时间: 2018-08-29
已发帖子: 151
积分: 137.5

Re: V3s使用gstreamer的插件openmax调用cedar硬解码,荔枝派zero测试通过

40楼
看gstreamer相关资料

41楼
gst-omx认不出全志在openmax自己定义的颜色空间
看一楼的openmax接口修改部分
一种可能是没按照我说的添加颜色空间 另一种可能是添加了 但是buildroot编译标记没清理好导致改的没编译

42楼
gst对omx注册失败
看一楼的gst-omx注册部分

离线

楼主 #47 2021-01-07 23:44:39

逸俊晨晖
会员
注册时间: 2018-08-29
已发帖子: 151
积分: 137.5

Re: V3s使用gstreamer的插件openmax调用cedar硬解码,荔枝派zero测试通过

用歪朵拉的老法师们 看这个帖子
https://whycan.com/t_5824.html

离线

楼主 #48 2021-01-07 23:48:12

逸俊晨晖
会员
注册时间: 2018-08-29
已发帖子: 151
积分: 137.5

Re: V3s使用gstreamer的插件openmax调用cedar硬解码,荔枝派zero测试通过

流氓兔 说:
yuanhao0230 说:
逸俊晨晖 说:

镜像和使用方法
gst-omx硬解码镜像.zip

大神,可否帮忙生成一个f1v100s+800*480的镜像,感激不尽啊……

https://whycan.com/files/members/3078/2020-12-19_105626.png

我的荔枝派视频解码时候, cpu占用率100%, 这样正常吗?

硬解出来的YV12要经过软件转换成RGB再显示在屏幕上 估计是这里占了CPU 把DE用起来就会占这么多了

离线

楼主 #50 2021-01-15 01:40:21

逸俊晨晖
会员
注册时间: 2018-08-29
已发帖子: 151
积分: 137.5

Re: V3s使用gstreamer的插件openmax调用cedar硬解码,荔枝派zero测试通过

R1CHIE 说:

大佬你好,请问你用的buildroot是哪个版本的?2017.08是没有gst1-plugins-bayer2rgb-neon这个选项的。

buildroot-2019.08 没有的话去掉看看行不行

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn