Mjpg-Streamer 拍照功能移植

原文地址:http://wenku.baidu.com/view/7105e6c15fbfc77da269b1f4

http://bbs.csdn.net/topics/350052487十三楼尝试一下

摄像头移植

一、环境

主机环境 :ubuntu 10.10         目标板 :FS-S5PC100

 主机工具链 :gcc-4.4.5        交叉工具链 :arm-unknown-linux-gnueabi-gcc

  摄像头 :ZC301

注意事项:

自己制作文件系时,需要将交叉编译工具链中的库文件拷贝到文件系统中。

2  调试时使用nfs挂载,调试完成后,将zImage和yaffs文件系统(yaffs可读写)烧入开发板。

二、移植过程

1、配置内核使内核支持芯片为ZC301的摄像头
   Make menuconfig

   DeviceDrivers --->

          <*>Multimedia support --->

                   <*>Video For Linux

                   [*]Enable Video For Linux API 1 (DEPRECATED) (NEW)

                    [*]Video capture adapters (NEW) --->

                              [*]V4L USB devices (NEW) --->

                                       <*>USB Video Class (UVC)

                                       [*]UVC input events device support (NEW)

                                <*>USB ZC0301[P] webcam support (DEPRECATED)

2、重新编译内核 makezImage

3、mjpg-streamer的移植

关于mjpg-streamer的资料可以在下面这个网址查看:http://sourceforge.net/apps/mediawiki/mjpg-streamer/index.php?title=Main_Page

mjpg-streamer的移植需要jpeg的库,所以我们先移植jpeg的库

(1)jpeg库的移植

 1)jpeg源码包通过下面这个网址下载          http://www.ijg.org/files/jpegsrc.v8b.tar.gz

 2)解压源码包在/home/linux/ 目录下解压:            tarxvf jpegsrc.v8b.tar.gz

 3)配置源码,在/home/linux/目录下创建jpeg目录mkdirjpeg

                cd jpeg-8b

           执行    ./configure --prefix=/home/linux/jpeg  --host=arm-unknwn-linux-gnueabi

  4)编译               make

  5)安装               makeinstall

  6)拷贝库到文件系统中        cp /home/linux/jpeg/lib/libjpeg.so.8   /source/rootfs/lib

(2)mjpg-streamer的移植

        1)mjpg-stream源码包通过下面这个网址下载  http://sourceforge.net/projects/mjpg-streamer/

        2)解压源码                tarxvf mjpg-streamer-r63.tar.gz

         3)修改源码                cdmjpg-streamer-r63

                修改顶层makefile及plugins目录中的各级makefile,将所有

                CC=gcc

                修改为               CC=arm-unknown-linux-gnueabi-gcc

        修改plugins/input_uvc/Makfile

                修改                CFLAGS+= -O2 -DLINUX -D_GNU_SOURCE -Wall -shared –fPIC

                为                CFLAGS+= -O2 -DLINUX -D_GNU_SOURCE -Wall -shared -fPIC -I/home/linux//jpeg/include

                修改

                $(CC)$(CFLAGS) -ljpeg -o $@ input_uvc.c v4l2uvc.lojpeg_utils.lo dynctrl.lo

                为

                $(CC)$(CFLAGS) -ljpeg -L/home/linux/jpeg/lib -o $@ input_uvc.c v4l2uvc.lo jpeg_utils.lo dynctrl.lo

       4)编译                make

       5)将mjpeg可执行文件拷贝到文件系统的/bin目录下   cpmjpg-streamer  /source/rootfs/bin

在文件系统中创建mjpg目录,将所有的动态库拷贝到该目录下

              mkdir/source/rootfs/mjpg

                cp*.so /source/rootfs/mjpg  {6个so文件}

将mjpeg_streamer-r63目录下的/www目录拷贝到文件系统中

cp  /www/ -a   /source/rootfs/  -rf -rf

4 运行

       在WINDOWS下 运行viewer.exe或运行解压文件中的www目录下的所有文件复制到你当前的BOA服务器指定的目录下。

同时要将www目录下的cambozla.jarbodybg.gif ,favicon.ico, favicon.png,  sidebarbg.gif拷贝到你的BOA服务器下。

打开开开发板将boa服务器运行起来

    ./etc/boa/boa&

输入下面一行命令:

./bin/mjpg_streamer  -i  "/mjpg/input_uvc.so-d /dev/video0"  -o  "/mjpg/output_http.so -w  /www/  "

 在linux系统的浏览器中,输入如下地址:  

 http://192.168.1.200:8080

显示界面如下图所示:

           

 

 

5 拍照功能的实现

由于mjpg_stream中output-file.so能实现连续拍照的功能,不能实现单拍或连拍几张的功能所以需要对output_file原码进行修改。

#  cd mjpg-streamer-rc63/plugins/output_file

#  vim output_file.c

在96行 函数 void*worker_thread(void *arg) 体中加入以下代码:

charbuf[10];   //

intflags = 0;   //拍照标志,1:表示11张照片,2:表示1张照片

intfd_com = 0; //打开管道的文件描述符

 

   stop_num = 0; //拍照计数

  if ( access(“/tmp/webcom”,F_OK) < 0 )    //创建有名管道用于接收拍照命令

{

   if ( mkfifo(“/tmp/webcom”,0666 ) < 0)

   {

       Printf(“ photo fifo create failed\n”);

}

}

  fd_com = open (“/tmp/webcom”,O_RDONLY,0666);

  if (fd < 0)

{

       perror (“open the file webcom error”);

}

 

在while( ok >= 0 && !pglobal->stop){ 后加入

  if (flags == 0)

{

       while(1)

 {

       reade(fd_com,buf,sizeof(buf));

if(strncmp(buf,”danger”,6) == 0)    //拍11张照片

{

       flags = 1;

    bzero(buf,sizeof(buf));

    break;

}

if(strncmp(buf,”one”,3) == 0)   //拍1张照片

{

       flags = 2;

    bzero(buf,sizeof(buf));

    break;

}

 

}

}

 

在if (delay > 0){

   usleep(1000*delay);

}后加入

stop_num++

if(flags == 1)        //判断拍照的数量

{

       if ( stop_num > 9)

   {

stop_num= 0;

flsgs= 0;

}

}

elseif (flags == 2)

{

stop_num= 0;

flags= 0;

}

所以只要向有名管道/tmp/webcom写入danger就能连拍11张照片,写入one就拍一张照片。

 

注:拍照功能实现:

./bin/mjpg_streamer  –i  “/mjpeg/input_uvc.so –d  /dev/video0” -o “/mjpeg/output_file.so   –f  /pice -d  15000 ”  &  echo  danger >  /dev/video0

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值