carlpc

【zedboard】移植ffmpeg+jpeg+png+tiff

0
阅读(4213)

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中,就可以测试了

test-ARM_2559.zip


运行后能得到第一帧的图片:



通过把图片格式改成jpg等格式就能测试其他库是否可用。