【zedboard】移植ffmpeg+jpeg+png+tiff
0赞zedboard上移植opencv,并移植ffmpeg,jpeg,png,tiff。
我是用opencv2.4.9来进行移植的,移植的过程如下:
1、为了方便,设置两个环境变量:
export ZYNQ_CV_BUILD=/home/carl/opencv-2.4.9/build export ZYNQ_CV_INSTALL=/home/carl/opencv-2.4.9/install
2、交叉编译环境肯定是必须的,这里不在废话。
3、依赖库的交叉编译:
(1)zlib-1.2.7
由于zlib中没有--host选项,所以需要预先声明cc变量
unzip zlib127.zip
cd zlib-1.2.7
export CC=arm-xilinx-linux-gnueabi-gcc
./configure --prefix=$ZYNQ_CV_BUILD --shared
make
make install
(2)jpeg-8d
tar -xzvf jpegsrc.v8d.tar.gz
cd jpeg-8d
./configure --prefix=$ZYNQ_CV_BUILD --host=arm-xilinx-linux-gnueabi --enable-shared
make
make install
(3)libpng-1.5.14
libpng编译时需要zlib库的内容,所以需要LDFLAGS以及CFLAGS变量声明。
tar -xzvf libpng-1.5.14.tar.gz
cd libpng-1.5.14
./configure --prefix=$ZYNQ_CV_BUILD --host=arm-xilinx-linux-gnueabi
--with-pkgconfigdir=$ZYNQ_CV_BUILD/lib/pkgconfig LDFLAGS=-L$ZYNQ_CV_BUILD/lib
CFLAGS=-I$ZYNQ_CV_INSTALL/include
make
make install
(4)x264-snapshot-20120528-2245-stable
tar -xjvf x264-snapshot-20120528-2245-stable.tar.bz2
cd x264-snapshot-20120528-2245-stable
./configure --host=arm-linux --cross-prefix=arm-xilinx-linux-gnueabi- --enable-shared --prefix=$ZYNQ_CV_BUILD
make
make install
(5)xvidcore-1.3.2
注意此处一定要禁止汇编。
tar -xzvf xvidcore-1.3.2.tar.gz
cd xvidcore/build/generic // 注意该依赖库configure在build/generic/目录下
./configure --prefix=$ZYNQ_CV_BUILD --host=arm-xilinx-linux-gnueabi --disable-assembly
make
make install
(6)tiff-4.0.3
同理,需要添加zlib支持,因此需要声明LDFLAGS和CFLAGS变量。
tar -xzvf tiff-4.0.3.tar.gz
cd tiff-4.0.3
./configure --prefix=$ZYNQ_CV_BUILD --host=arm-xilinx-linux-gnueabi --enable-shared
LDFLAGS=-L$ZYNQ_CV_BUILD/lib CFLAGS=-I$ZYNQ_CV_BUILD/include
make
make install
(7)ffmpeg-0.10.3
ffmpeg的配置选项较多,需要添加cflas和ldflags声明。
tar -xjvf ffmpeg-0.10.3.tar.bz2
cd fmpeg-0.10.3
./configure --prefix=$ZYNQ_CV_BUILD --enable-shared --disable-static --enable-gpl --enable-cross-compile --arch=arm
--disable-stripping --target-os=linux --enable-libx264 --enable-libxvid --cc=arm-xilinx-linux-gnueabi-gcc --enable-swscale
--extra-cflags=-I$ZYNQ_CV_BUILD/include --extra-ldflags=-L$ZYNQ_CV_BUILD/lib --disable-asm
make
make install
4、依赖库交叉编译后,开始交叉编译OPENCV从网上下载opencv2.4.9的源码后,进入源码目录新建两个文件夹
mkdir build install
cd build
运行cmake图像界面,命令如下
cmake-gui
进行如下配置
配置完成后,点击configure,然后找到with_ffmpeg、with_jpeg、with_png、with_tiff、with_v4l这些选项,将其勾上,其他选项全部去掉
指定安装路径
重新configure,注意以下配置信息
无误后generate
接着make和make install
5、make过程会出现找不到zlib libjpeg等这些库,这个自己也弄了很久,最后发现,需要把交叉编译ffmpeg的库全部拷进交叉编译工具的路里面路径如下
其他的博客好像都不会出错,但是我们好几个人测试了,还真的是不行,得把库拷进这个目录下
/root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/arm-xilinx-linux-gnueabi/libc/usr/lib
6、完成了opencv的交叉编译后,需要进行测试移植有没有成功。
将opencv的库、ffmpeg、jpeg、png的库、qt的库、libstdc++的库全部制成镜像文件,放进SD卡(这一部分参考我的另一份博客)。
7、测试的代码和测试的视频
#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main( int argc, char** argv ) {
VideoCapture cap("input_video");
if (!cap.isOpened()) {
printf("error: failed to open the video file.\n");
return -1;
}
double fps = cap.get(CV_CAP_PROP_FPS);
printf("Frame per seconds: %f\n", fps);
Mat frame;
bool bSuccess = cap.read(frame);
if (!bSuccess) {
printf("error: failed to read the frame from the video file.\n");
return -1;
}
imwrite("first_frame.bmp", frame);
printf("First frame saved.\n");
return 0;
}
将代码交叉编译后,生成可执行文件,和测试视频一起拷进SD中,就可以测试了
运行后能得到第一帧的图片: