luvcview在arm板上的移植


 


一直想着在自己的开发板上能回显摄像头中的内容,今天终于有点时间了,试着在网上找了一下,发现支持V4L的摄像头应用程序还真不少。我简单看了一下,luvcview是支持直接回显的。所以就尝试着移植了luvcview。  www.2cto.com  


开发环境: 主     机 VM & Ubuntu 10.04


                开 发 板 devkit8500 (arm-cortex a8 dm3730)


                交叉编译器 arm-2009q1


 


1. 首先就是要 下载luvcview源代码,这个不用多说,到处都是。我这里使用的是 luvcview_20070512.orig.tar.gz,这个包需要SDL库的支持,在网上找找怎么移植就是了。


2. 将压缩包解压到自己的工作目录并进入 源码目录:  www.2cto.com  


    #tar xvf /mnt/hgfs/share/lu vcview_20070512.orig.tar.gz


3. 修改Makefile文件,这里有关键的几行是必须要修改的。


        CC=gcc


        CPP=g++


        INSTALL=install


        APP_BINARY=luvcview


        BIN=/usr/local/bin


        SDLLIBS = $(shell sdl-config --libs) 


        SDLFLAGS = $(shell sdl-config --cflags)


        #LIBX11FLAGS= -I/usr/X11R6/include -L/usr/X11R6/lib


----->>>


       TARGET=arm-none-linux-gnueabi-


       CC=$(TARGET)gcc


       CPP=$(TARGET)g++


       INSTALL=install


       APP_BINARY=luvcview


       BIN=/usr/local/bin


       SDLLIBS = -L/work/prj/root-dev/usr/local/lib -lSDL


       SDLFLAGS = /work/prj/root-dev/usr/local/include


其中SDLLIBS和SDLFLAGS标识了SDL库的头文件和库文件所在的目录,我的放在/work/prj/root-dev/usr/local/下,这里顺便说一下,建议在家在移植一些库时,尽量将这些库安装在一个固定的目录下面,方便后面移植其它库时使用,例如我将前面移植的一些基础库全部安装到/work/prj/root-dev/目录下,后面再用时,就不用东找西找了。


3. 源代码修改 luvcview.c


       (1). #include <X11/Xlib.h> 


--->>> //#include <X11/Xlib.h>


       (2). static Uint32 SDL_VIDEO_Flags =SDL_ANYFORMAT | SDL_DOUBLEBUF | SDL_RESIZABLE;


--->>> static Uint32 SDL_VIDEO_Flags = SDL_ANYFORMAT | SDL_RESIZABLE;// | SDL_DOUBLEBUF;


       (3). int format = V4L2_PIX_FMT_MJPEG;


--->>> int format = V4L2_PIX_FMT_YUYV;


 


4. 直接make编译就可以了,然后将luvcview拷到开发板上,插上USB摄像头,运行luvcview就可以在LCD上看到图像了。


 


****


(1) 注释掉SDL_DOUBLEBUF是因为在luvcview的代码里面没有调用SDL_Flip,所以用双buffer无法显示。如果不想注释掉SDL_DOUBLEBUF,那就需要在主循环里面增加一句


    /* main big loop */


    while (videoIn->signalquit) {


        ……


        


        SDL_Flip(pscreen);


 


        SDL_Delay(10);


    }


(2) V4L2_PIX_FMT_MJPEG改成V4L2_PIX_FMT_YUYV是因为通过V4L接口取出来的图像数据都是YUV格式的,除非你的摄像头支持mjpeg格式。当然也可以不修改源码,而在运行luvcview时增加一个参数运行,如:./luvcview -f yuv