luvcview在arm板上的移植
一直想着在自己的开发板上能回显摄像头中的内容,今天终于有点时间了,试着在网上找了一下,发现支持V4L的摄像头应用程序还真不少。我简单看了一下,luvcview是支持直接回显的。所以就尝试着移植了luvcview。 www.zhishiwu.com
开发环境: 主 机 VM & Ubuntu 10.04
开 发 板 devkit8500 (arm-cortex a8 dm3730)
交叉编译器 arm-2009q1
1. 首先就是要下载luvcview源代码,这个不用多说,到处都是。我这里使用的是 luvcview_20070512.orig.tar.gz,这个包需要SDL库的支持,在网上找找怎么移植就是了。
2. 将压缩包解压到自己的工作目录并进入源码目录: www.zhishiwu.com
#tar xvf /mnt/hgfs/share/luvcview_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