⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 v4l_lin.c

📁 这是一个通过video4linux的支持
💻 C
字号:
/******************************林启俊_V4L_采集****************************************************                                      ****作者: 林启俊                         *      ****日期:  2006-11-30                 *             ****                               *                   ****                             *  ALL RIGHTS Reserved  ****   ***版本: 1.0                        *                 ****环境: Linux                         *         ****                                         ****目的: 为3G手机的现场直播而准备    ***申明: 一切解释权本人作解释;不得修改(除非经本人同意),不得发表!****** e_mail:   linqijun211@163.com**********************************************************************************************人生格言:   为人生理想而战斗,不怕辛苦!! 为报答父母而奋斗,不怕劳累!!                     ******************************************************************************************************************说明: 此程序尽力让V4L简单而写,采用调用函数来实现;希望对学习V4L的朋友有所帮助                         ************     我的摄像头只支持两贞采集,我的想法是,每采集一贞就保存了一个图像;所以我设了两个图像文件           *************      /home/linzi.jpeg和/home/linzicheng.jpeg;用的时候可以随便保存到任何地方的                  *************************   Please email to me if you have some problems or advices to me to modify! than you !!                    ***********/ #include "v4l_linqijun.h" int  lin_get_open(char *p)   {       if( (fd=open(p,O_RDWR,0666))<0)          return -1;      else           return 0; }   int   lin_get_capability(int fd, cap* capability)    {  if ( ioctl(fd ,VIDIOCGCAP, capability)<0)            return -1;   else               return 0;}int  lin_get_picture(int fd, pic* pic){     if(ioctl(fd,VIDIOCGPICT,pic)<0)        return -1;    else         return 0;}int lin_set_picture(int fd,pic* pic)   {       pic->colour=50000;                   //没有颜色,黑白的;      pic->hue=0;                     //灰度为0;    //  pic->whiteness=65535;      // pic->contrast=2000;   if(ioctl(fd,VIDIOCSPICT,pic)<0)          return -1;  else        return 0;}int lin_set_window(int fd, win* win){        win->x =0;
        win->y =0 ;
        win->width = 320;
        win->height =240;
      
            if(ioctl(fd,VIDIOCSWIN, win)==-1)                   return -1;      else            return 0;}int lin_get_mbuf(int fd,mb *mbuf){         if(ioctl(fd,VIDIOCGMBUF,mbuf)<0)      return -1;    else          return 0;}    int lin_set_mmap(mm* mmap) {     mmap->width=window.width;      mmap->height=window.height;      mmap->format =picture.palette;       mmap->frame=0;      return 0;}      int lin_memory_map(int fd,int size) {      map=mmap(NULL,size,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0);    if(map==MAP_FAILED)         return -1;    else                        { printf("map address is %p\n",map);                return 0;              }}int lin_start_capture(int fd, mm* mmap){     int j=0;      int frame=0;  if(ioctl(fd,VIDIOCMCAPTURE,mmap)<0)                     //这一定要是mmap,它就是地址了;呵呵       {           perror("\t\n DIOCMCAPTURE\n");          return -1;         }else          printf("\t\nCAPTURE SUCCESS \n");  while(j<mbuf.frames)  {     if (ioctl(fd, VIDIOCSYNC, &frame) < 0)                            {  perror("\t v4l_grab_sync\n"); return -1;}          else          printf(" \t SYNC  success!\n");      frame=(frame+1)%2;           mmap->frame=frame;    if(ioctl(fd,VIDIOCMCAPTURE,mmap)<0)               {perror(" \t\nVIDIOCMCAPTURE\n"); return -1;}           else        printf("\t\n next frame capture sucess\n");    j++;}return 0;}     char* lin_get_mapaddress(int frame) {         char *frameaddress="";     frameaddress=map+mbuf.offsets[frame];     if(frameaddress>0)     {      printf("frameadress is %p\n",frameaddress);      return  frameaddress;     }   else        return NULL;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -