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/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