IMX6Q的硬编码(VPU)的简化代码移植
简介
在上一篇的文章中,我将imx-vpu的代码实现了编译在开发板的运行过程进行了介绍。但是利用上述代码进行修改和移植却存在较大的难度,也有网友进行了移植,参考连接:
https://blog.csdn.net/mr_zhaojy/article/details/104822264
https://blog.csdn.net/qq_30659437/article/details/109273756
正如NXP社区其中一个老外的话:"Forget about mxc-test and just use gstreamer. "。mxc_test例程好用,但是要分离出你需要的,确实很麻烦。(引用话语)
基于此,NXP的官方也给出了更为简洁的代码引用的方式,即imx-vpuwrap
。利用imx-vpuwarp可以很好的进行VPU图像编码的移植,因为他将文件的输入输出流变得非常简单明了。直接参考示例代码,变能很好的进行代码嵌入和移植。
imx-vpuwrap的代码下载与编译
代码的下载
imx-vpuwrap代码的下载,也可以参考VPU库文件的下载方式,同样是在构建根文件系统下的yocto文件夹下的downloads,./imx-vpuwrap-1.0.68.bin
,运行bin文件后,可以生成文件夹imx-vpuwrap-1.0.68
,
代码的编译
首先需要配置开发环境,将开发的环境变量进行设置,完成设置后,同时将库文件 libvpu.a libvpu.so libvpu.so.4
和头文件 vpu_io.h 和 vpu_lib.h
拷贝到--sysroot
目录下的usr/lib
和usr/include
,然后参考install中的安装方法进行配置和编译安装。配置时注意采用 ./configure --host = arm-poky-linux-gnueabi --prefix = /opt/libvpuwrap
。
之后就是make
make install
编译后会生成libfslvpuwrap.a libfslvpuwrap.so libfslvpuwrap.so.3 libfslvpuwrap.so.3.0.0
以及对应的头文件vpu_wrapper.h
至此完成了改工程文件的安装。
接下来就是看提供的示例代码了。
示例代码的研读
示例代码的编译需要对makefile文件进行修改,主要是配置gcc编译器,目前编译会遇到error: lib/lib_vpu_wrapper.so uses VFP register arguments, vpu_wrapper_timer.o does not
的错误,此种错误是由于arm-poky-linux-gnueabi-gcc -march=armv7-a -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a9 --sysroot=/opt/fsl-imx-x11/4.1.15-2.1.0/sysroots/cortexa9hf-neon-poky-linux-gnueabi
中的 -mfloat-abi=hard
主要是关于浮点运算,采用硬浮点运算。但是我这边也只成功编译了test_dec_arm_elinux
和test_enc_arm_elinux
将编译成功的代码拷贝到开发板中,直接运行。