TaterLi 个人博客

Avaota A1 VPU验证

首先,git clone下来:

git clone https://github.com/nickfox-taterli/a527-gstreamer1

要用VPU就要接受系统污染,内核使用BSP版本,因为目前这就是硬限制.除非你很有时间还拿到底层信息.我在Debian 13,要先安装各种包.

apt-get install -y meson ninja-build pkg-config python3-dev libglib2.0-dev flex bison libasound2-dev

我对版本记录了一下,毕竟gst其实是个复杂的系统,真的好多坑.

$ meson --version
1.7.0
$ ninja --version
1.12.1
$ gcc --version | head -1
gcc (Debian 14.2.0-19) 14.2.0

复制所有库到系统库文件夹,这些是全志闭源的,没办法,污染就污染了.

# 复制库文件(包括所有 .so 文件)
sudo cp blobs/*.so /lib/aarch64-linux-gnu/
# 更新库缓存
sudo ldconfig

然后开始编译核心

$ cd sources/gstreamer-1.20.1
$ meson setup builddir \
    --prefix=/usr/local \
    --libdir=lib \
    --buildtype=release \
    -Dtests=disabled -Dexamples=disabled -Dbenchmarks=disabled -Ddoc=disabled

正常会这样输出

gstreamer 1.20.1

    Plugins   : coreelements, coretracers

  User defined options
    benchmarks: disabled
    buildtype : release
    doc       : disabled
    examples  : disabled
    libdir    : lib
    prefix    : /usr/local
    tests     : disabled

Found ninja-1.12.1 at /usr/bin/ninja

配置好就开始编译

$ ninja -C builddir -j4
$ sudo ninja -C builddir install
$ sudo ldconfig

安装完就能运行核心,不过这里没任何库,所以只输出版本号

$ gst-inspect-1.0 --version
gst-inspect-1.0 version 1.20.1
GStreamer 1.20.1

接下来编译插件,我这里不考虑接摄像头,所以V4L2先关闭,才能躲避全志ISP库(我连闭源文件都没找到)

# cd sources/gst-plugins-base-1.20.1
$ meson setup builddir \
    --prefix=/usr/local \
    --libdir=lib \
    --buildtype=release \
    -Dtests=disabled -Dexamples=disabled -Ddoc=disabled \
    -Dgl=disabled -Dpango=disabled -Dogg=disabled -Dvorbis=disabled \
    -Dalsa=enabled -Dx11=disabled -Dxvideo=disabled
$ cd sources/gst-plugins-good-1.20.1
$ meson setup builddir \
    --prefix=/usr/local \
    --libdir=lib \
    --buildtype=release \
    -Dtests=disabled -Dexamples=disabled -Ddoc=disabled \
    -Dcairo=disabled -Dflac=disabled -Djpeg=disabled -Dpng=disabled \
    -Dspeex=disabled -Dtaglib=disabled -Dvpx=disabled -Doss=disabled \
    -Doss4=disabled -Dpulse=disabled -Dsoup=disabled -Dwaveform=disabled -Dv4l2=disabled
$ cd sources/gst-plugins-bad-1.20.1
$ meson setup builddir \
    --prefix=/usr/local \
    --libdir=lib \
    --buildtype=release \
    -Dtests=disabled -Dexamples=disabled -Ddoc=disabled \
    -Dopencv=disabled -Dopenexr=disabled -Dopenh264=disabled -Dopenjpeg=disabled \
    -Dfaad=disabled -Dfaac=disabled -Dfdkaac=disabled -Dsoundtouch=disabled \
    -Dsbc=disabled -Dspandsp=disabled -Dsrtp=disabled -Dwebrtc=disabled \
    -Dcurl=disabled -Dneon=disabled -Drtmp=disabled -Dsctp=disabled \
    -Dsmoothstreaming=disabled -Ddash=disabled -Dhls=disabled \
    -Dmsdk=disabled -Dva=disabled -Dwayland=disabled -Dx11=disabled

这几步都是gst自身,一般是不会出错的,最后编译omx以便获得硬件能力

$ cd sources/gst-omx-1.20.1
$ meson setup builddir \
    --prefix=/usr/local \
    --libdir=lib \
    --buildtype=release \
    -Dtarget=generic \
    -Dtests=disabled -Dexamples=disabled -Ddoc=disabled

到这一步编译的工作完成了,开始写配置文件.

/etc/profile.d/gstreamer.sh

export LD_LIBRARY_PATH=/lib:/lib/aarch64-linux-gnu:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH
export GST_PLUGIN_PATH=/lib/gstreamer-1.0:/lib/aarch64-linux-gnu/gstreamer-1.0:/usr/local/lib/gstreamer-1.0
export XDG_CONFIG_DIRS=/etc/xdg:/etc/xdg
export GST_PLUGIN_SCANNER=/usr/local/libexec/gstreamer-1.0/gst-plugin-scanner

这些环境变量的作用是:

然后配置OMX的配置文件 /etc/xdg/gstomx.conf

[omxh264videoenc]
type-name=GstOMXH264Enc
core-name=/lib/aarch64-linux-gnu/libOmxCore.so
component-name=OMX.allwinner.video.encoder.avc
rank=257
in-port-index=0
out-port-index=1
hacks=event-port-settings-changed-ndata-parameter-swap;video-framerate-integer;syncframe-flag-not-used;no-disable-outport

[omxmjpegvideoenc]
type-name=GstOMXMJPEGEnc
core-name=/lib/aarch64-linux-gnu/libOmxCore.so
component-name=OMX.allwinner.video.encoder.mjpeg
rank=257
in-port-index=0
out-port-index=1
hacks=event-port-settings-changed-ndata-parameter-swap;video-framerate-integer;syncframe-flag-not-used;no-disable-outport

[omxh264dec]
type-name=GstOMXH264Dec
core-name=/lib/aarch64-linux-gnu/libOmxCore.so
component-name=OMX.allwinner.video.decoder.avc
rank=257
in-port-index=0
out-port-index=1
hacks=event-port-settings-changed-ndata-parameter-swap;event-port-settings-changed-port-0-to-1;no-disable-outport

[omxmjpegvideodec]
type-name=GstOMXMJPEGDec
core-name=/lib/aarch64-linux-gnu/libOmxCore.so
component-name=OMX.allwinner.video.decoder.mjpeg
rank=257
in-port-index=0
out-port-index=1
hacks=event-port-settings-changed-ndata-parameter-swap;event-port-settings-changed-port-0-to-1;no-disable-outport

[omxmpeg2videodec]
type-name=GstOMXMPEG2VideoDec
core-name=/lib/aarch64-linux-gnu/libOmxCore.so
component-name=OMX.allwinner.video.decoder.mpeg2
rank=257
in-port-index=0
out-port-index=1
hacks=event-port-settings-changed-ndata-parameter-swap;event-port-settings-changed-port-0-to-1;no-disable-outport

[omxmpeg1videodec]
type-name=GstOMXMPEG1Dec
core-name=/lib/aarch64-linux-gnu/libOmxCore.so
component-name=OMX.allwinner.video.decoder.mpeg1
rank=257
in-port-index=0
out-port-index=1
hacks=event-port-settings-changed-ndata-parameter-swap;event-port-settings-changed-port-0-to-1;no-disable-outport

[omxmpeg4videodec]
type-name=GstOMXMPEG4VideoDec
core-name=/lib/aarch64-linux-gnu/libOmxCore.so
component-name=OMX.allwinner.video.decoder.mpeg4
rank=257
in-port-index=0
out-port-index=1
hacks=event-port-settings-changed-ndata-parameter-swap;event-port-settings-changed-port-0-to-1;no-disable-outport

[omxh263videodec]
type-name=GstOMXH263Dec
core-name=/lib/aarch64-linux-gnu/libOmxCore.so
component-name=OMX.allwinner.video.decoder.h263
rank=257
in-port-index=0
out-port-index=1
hacks=event-port-settings-changed-ndata-parameter-swap;event-port-settings-changed-port-0-to-1;no-disable-outport

[omxhevcvideodec]
type-name=GstOMXH265Dec
core-name=/lib/aarch64-linux-gnu/libOmxCore.so
component-name=OMX.allwinner.video.decoder.hevc
rank=257
in-port-index=0
out-port-index=1
hacks=event-port-settings-changed-ndata-parameter-swap;video-framerate-integer;syncframe-flag-not-used;no-disable-outport

[omxvp8videodec]
type-name=GstOMXVP8Dec
core-name=/lib/aarch64-linux-gnu/libOmxCore.so
component-name=OMX.allwinner.video.decoder.vp8
rank=257
in-port-index=0
out-port-index=1
hacks=event-port-settings-changed-ndata-parameter-swap;video-framerate-integer;syncframe-flag-not-used;no-disable-outport

[omxvp9videodec]
type-name=GstOMXVP9Dec
core-name=/lib/aarch64-linux-gnu/libOmxCore.so
component-name=OMX.allwinner.video.decoder.vp9
rank=257
in-port-index=0
out-port-index=1
hacks=event-port-settings-changed-ndata-parameter-swap;video-framerate-integer;syncframe-flag-not-used;no-disable-outport

[omxavsvideodec]
type-name=GstOMXAVSDec
core-name=/lib/aarch64-linux-gnu/libOmxCore.so
component-name=OMX.allwinner.video.decoder.avs
rank=257
in-port-index=0
out-port-index=1
hacks=event-port-settings-changed-ndata-parameter-swap;event-port-settings-changed-port-0-to-1;no-disable-outport

这样,2个编码器H.264和MJPEG,11个解码器H.264,MJPEG,MPEG1,MPEG2,MPEG4,H.263,H.265,VP8,VP9,AVS全都配置上了.

最后全志的cedarc还有自己的配置.

/etc/cedarc.conf

[paramter]
vdecoder_save_bitstream = 0
vdecoder_save_bitstream_path = /data/camera/bs.dat

vdecoder_save_special_bitstream = 0
vdecoder_save_special_bitstream_path = /data/camera/spec.awsp

vdecoder_save_picture_en = 0
vdecoder_save_picture_start_num = 0
vdecoder_save_picture_total_num = 10
vdecoder_save_picture_path = /data/camera/pic.dat

vdecoder_show_speed_info = 0

vdecoder_printf_log = 0
vdecoder_fbm_printf_log = 0
vdecoder_sbm_printf_log = 0

ve_printf_register = 0

check_malloc_leak = 0

cdc_log_level = 5
vdec_log_level = 3
venc_log_level = 3

CedarC库日志级别讲解一下,其中2=VERBOSE, 3=DEBUG, 4=INFO, 5=WARNING, 6=ERROR.

功能验证

$ gst-inspect-1.0 | grep omx
omx:  omxavsvideodec: OpenMAX AVS Video Decoder
omx:  omxh263videodec: OpenMAX H.263 Video Decoder
omx:  omxh264dec: OpenMAX H.264 Video Decoder
omx:  omxh264videoenc: OpenMAX H.264 Video Encoder
omx:  omxhevcvideodec: OpenMAX H.265 Video Decoder
omx:  omxmjpegvideodec: OpenMAX MJPEG Video Decoder
omx:  omxmjpegvideoenc: OpenMAX Mjpeg Video Encoder
omx:  omxmpeg1videodec: OpenMAX MPEG1 Video Decoder
omx:  omxmpeg2videodec: OpenMAX MPEG2 Video Decoder
omx:  omxmpeg4videodec: OpenMAX MPEG4 Video Decoder
omx:  omxvp8videodec: OpenMAX VP8 Video Decoder
omx:  omxvp9videodec: OpenMAX VP9 Video Decoder

至于编解码测试这件事,你可以直接参考我GitHub项目上写的,就是标准的gst连接罢了.

退出移动版