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

📄 v4lxif.cc

📁 这个软件的功能同我上次传的那个avifile.也是linux上的一个用于多媒体应用的源码。
💻 CC
📖 第 1 页 / 共 2 页
字号:
v4l1if::~v4l1if(){#ifdef v4lDEBUG  debug("v4l1: ::~v4l1if begin");#endif  // mute all  int i;  for (i = 0; i < vcap.audios; i++)     if (vaudio[i].flags & VIDEO_AUDIO_MUTABLE) {      vaudio[i].flags |= VIDEO_AUDIO_MUTE;      if ( -1 == ioctl(devv4l,VIDIOCSAUDIO,&vaudio[i]) )	VIF_FATAL("v4l1: VIDIOC_S_AUDIO in ::v4l1if");    }  smute= true;#if 1  if (ggrab > gsync) {    if ( -1 == ioctl(devv4l,VIDIOCSYNC,0) )      VIF_WARN("v4l1: VIDIOCSYNC in ::~v4l1if");    else      gsync++;  }#endif  // capture off  if ( -1 == ioctl(devv4l, VIDIOCCAPTURE, &zero) )    fatal("v4l1: ioctl VIDIOCCAPTURE in v4l1if::~v4l1if");    if ((char*)-1 != grabbermem) munmap(grabbermem,msize);    free(vchan);  free(vaudio);#ifdef v4lDEBUG  debug("v4l1: ::~v4l1if end");#endif }void v4l1if::setCapture( bool on ){  if ( -1 == ioctl(devv4l, VIDIOCCAPTURE, (on?&one:&zero) ) )    VIF_FATAL("v4l1: VIDIOCCAPTURE in ::setCapture");  scapture= on;}void v4l1if::setFreq( unsigned long freq ){  if ( -1 == ioctl(devv4l, VIDIOCSFREQ, &freq) )    VIF_FATAL("v4l1: VIDIOC_S_FREQ in ::setFreq");}void v4l1if::setPicBrightness( int bri ){#ifdef PREREAD  if ( -1 == ioctl(devv4l, VIDIOCGPICT, &vpic) )    VIF_FATAL("v4l1: VIDIOC_G_PICT in ::setBrightness");#endif  vpic.brightness= (bri+128)<<8;  if ( -1 == ioctl(devv4l, VIDIOCSPICT, &vpic) )    VIF_FATAL("v4l1: VIDIOC_S_PICT in ::setBrightness");}void v4l1if::setPicConstrast( int contr ){#ifdef PREREAD  if ( -1 == ioctl(devv4l, VIDIOCGPICT, &vpic) )    VIF_FATAL("v4l1: VIDIOC_G_PICT in ::setContrast");#endif  vpic.contrast= contr<<7;  if ( -1 == ioctl(devv4l, VIDIOCSPICT, &vpic) )    VIF_FATAL("v4l1: VIDIOC_S_PICT in ::setContrast");}void v4l1if::setPicColor( int color ){#ifdef PREREAD  if ( -1 == ioctl(devv4l, VIDIOCGPICT, &vpic) )    VIF_FATAL("v4l1: VIDIOC_G_PICT in ::setColor");#endif  vpic.colour= color<<7;  if ( -1 == ioctl(devv4l, VIDIOCSPICT, &vpic) )    VIF_FATAL("v4l1: VIDIOC_S_PICT in ::setColor");}void v4l1if::setPicHue( int hue ){#ifdef PREREAD  if( -1 == ioctl(devv4l, VIDIOCGPICT, &vpic) )    VIF_FATAL("v4l1: VIDIOC_G_PICT in ::setHue");#endif  vpic.hue= (hue+128)<<8;  if ( -1 == ioctl(devv4l, VIDIOCSPICT, &vpic) )    VIF_FATAL("v4l1: VIDIOC_S_PICT in ::setHue");}void v4l1if::setChannel( int source ){  if((source<0)||(source>=vcap.channels))    fprintf(stderr, "warning: no such channel %d\n", source);#ifdef v4lDEBUG  debug("v4l1: setChannel %d",source);#endif#if 0  if ( -1 == ioctl(devv4l, VIDIOCSCHAN, &source) )    VIF_WARN("v4l1: VIDIOC_S_CHAN in ::setChannel");#else  if ( -1 == ioctl(devv4l, VIDIOCSCHAN, &vchan[source]) )    VIF_WARN("v4l1: VIDIOC_S_CHAN in ::setChannel");#endif  achan= source;  aaudio= source;}void v4l1if::setChannelNorm( int norm ){#ifdef v4lDEBUG  debug("v4l1: setChannelNorm %d",norm);#endif  vchan[achan].norm= norm;  if ( -1 == ioctl(devv4l, VIDIOCSCHAN, &vchan[achan]) )    VIF_WARN("v4l1: VIDIOC_S_CHAN in ::setChannelNorm");}void v4l1if::setTuner( int no ){  atuner= no;}void v4l1if::setTunerMode( int norm ){  vtuner.tuner= atuner;#ifdef PREREAD  if ( -1 == ioctl(devv4l, VIDIOCGTUNER, &vtuner) )    VIF_FATAL("v4l1: VIDIOC_G_TUNER in ::setTunerMode");#endif  vtuner.mode= norm;  if ( -1 == ioctl(devv4l, VIDIOCSCHAN, &vtuner) )    VIF_FATAL("v4l1: VIDIOC_S_TUNER in ::setTunerMode");  warning("v4l1: Use ::setChannelNorm to set input NORM in ::setTunerMode");}void v4l1if::setAudioMute( bool on ){  if ( vaudio[aaudio].flags & VIDEO_AUDIO_MUTABLE ) {    if ( -1 == ioctl(devv4l,VIDIOCGAUDIO,&vaudio[aaudio]) )      VIF_FATAL("v4l1: VIDIOC_G_AUDIO in ::setMute");        if ( on )       vaudio[aaudio].flags |= VIDEO_AUDIO_MUTE;    else      vaudio[aaudio].flags &= ~VIDEO_AUDIO_MUTE;        if ( -1 == ioctl(devv4l,VIDIOCSAUDIO,&vaudio[aaudio]) )      VIF_FATAL("v4l1: VIDIOC_S_AUDIO in ::setMute");        smute= on;  }#ifdef v4lDEBUG  debug("v4l1: setAudioMute [%d] %s",aaudio,smute?"muted":"unmuted");#endif}void v4l1if::setAudioVolume( int vol ){#ifdef PREREAD  if ( -1 == ioctl(devv4l,VIDIOCGAUDIO,&vaudio[aaudio]) )    VIF_FATAL("v4l1: VIDIOC_G_AUDIO in ::setVolume");#endif  vaudio[aaudio].volume= vol;  if ( -1 == ioctl(devv4l,VIDIOCSAUDIO,&vaudio[aaudio]) )    VIF_FATAL("v4l1: VIDIOC_S_AUDIO in ::setVolume");}void  v4l1if::setAudioMode( int mode ){#ifdef PREREAD  if ( -1 == ioctl(devv4l,VIDIOCGAUDIO,&vaudio[aaudio]) )    VIF_FATAL("v4l1: VIDIOC_G_AUDIO in ::setAudioMode");#endif#ifdef v4lDEBUG  debug("v4l1: setAudioMode= %d [%s]",mode,audiodescr[mode]);#endif  vaudio[aaudio].mode= mode;  if ( -1 == ioctl(devv4l,VIDIOCSAUDIO,&vaudio[aaudio]) )    VIF_FATAL("v4l1: VIDIOC_S_AUDIO in ::setAudioMode");}void v4l1if::setPalette( int pal ){#ifndef GUILESS    x11_format = ((unsigned int)pal < sizeof(format2palette)/sizeof(unsigned short))?format2palette[pal]:0;  vpic.palette= x11_format;  if ( vpic.palette == 0 ) {    VIF_FATAL_STR("v4l1: unsupported overlay video format <%s> in ::v4l1if",		  format_desc[x11_format]);  }#else  vpic.palette = VIDEO_RGB15_LE;#endif /* GUILESS */#ifdef v4lDEBUG  //debug("v4l1: palette= %s, %s",PALETTE(vpic.palette),format_desc[pal]);#endif  if ( -1 == ioctl(devv4l, VIDIOCSPICT, &vpic) )    VIF_FATAL("v4l1: VIDIOC_S_PICT in ::v4l1if");}bool v4l1if::getAudioMute(){  if ( -1 == ioctl(devv4l,VIDIOCGAUDIO,&vaudio[aaudio]) )    VIF_FATAL("v4l1: VIDIOC_G_AUDIO in ::getMute");#ifdef v4lDEBUG  debug("v4l1: getAudioMute %s, %d",	(vaudio[aaudio].flags & VIDEO_AUDIO_MUTE)?"true":"false",	vaudio[aaudio].flags);#endif  return ( vaudio[aaudio].flags & VIDEO_AUDIO_MUTE );}int  v4l1if::getAudioVolume(){  if ( -1 == ioctl(devv4l,VIDIOCGAUDIO,&vaudio[aaudio]) )    VIF_FATAL("v4l1: VIDIOC_G_AUDIO in ::getVolume");  return vaudio[aaudio].volume;}int  v4l1if::getAudioMode(){  if ( -1 == ioctl(devv4l,VIDIOCGAUDIO,&vaudio[aaudio]) )    VIF_FATAL("v4l1: VIDIOC_G_AUDIO in ::getAudioMode");#ifdef v4lDEBUG  debug("v4l1: getAudioMode= %d",vaudio[aaudio].mode);#endif  return vaudio[aaudio].mode;}unsigned long v4l1if::getTunerSignal(){  vtuner.tuner= atuner;  if ( -1 == ioctl(devv4l, VIDIOCGTUNER, &vtuner) )    VIF_FATAL("v4l1: VIDIOC_G_TUNER in ::getTunerSignal");  return vtuner.signal;}int v4l1if::getTunerMode(){  vtuner.tuner= atuner;  if ( -1 == ioctl(devv4l, VIDIOCGTUNER, &vtuner) )    VIF_FATAL("v4l1: VIDIOC_G_TUNER in ::getTunerMode");  return vtuner.mode;}int v4l1if::getTunerFlags(){  vtuner.tuner= atuner;  if ( -1 == ioctl(devv4l, VIDIOCGTUNER, &vtuner) )    VIF_FATAL("v4l1: VIDIOC_G_TUNER in ::getTunerFlags");  return vtuner.flags;}bool v4l1if::capAudioVolume(){  if ( -1 == ioctl(devv4l,VIDIOCGAUDIO,&vaudio[aaudio]) )    VIF_FATAL("v4l1: VIDIOC_G_AUDIO in ::capAudioVolume");  return ( vaudio[aaudio].flags & VIDEO_AUDIO_VOLUME );}bool v4l1if::capAudioMutable(){  if ( -1 == ioctl(devv4l,VIDIOCGAUDIO,&vaudio[aaudio]) )    VIF_FATAL("v4l1: VIDIOC_G_AUDIO in ::capAudioMutable");  return ( vaudio[aaudio].flags & VIDEO_AUDIO_MUTABLE );}bool v4l1if::capTunerStereo(){  vtuner.tuner= atuner;  if ( -1 == ioctl(devv4l, VIDIOCGTUNER, &vtuner) )    VIF_FATAL("v4l1: VIDIOC_G_TUNER in ::getTunerMode");  return vtuner.flags & VIDEO_TUNER_STEREO_ON;}bool v4l1if::capTunerNorm(){  vtuner.tuner= atuner;  if ( -1 == ioctl(devv4l, VIDIOCGTUNER, &vtuner) )    VIF_FATAL("v4l1: VIDIOC_G_TUNER in ::getTunerMode");  return vtuner.flags & VIDEO_TUNER_NORM;}void v4l1if::capCapSize( unsigned int *minw, unsigned int *minh, unsigned int *maxw, unsigned int *maxh ){ #if 0  *minw= vcap.minwidth; *minh= vcap.minheight;   *maxw= vcap.maxwidth; *maxh= vcap.maxheight;#else  *minw= vcap.minwidth;  *minh= vcap.minheight;  *maxw= maxwidth[vchan[achan].norm];  *maxh= maxheight[vchan[achan].norm]; #endif#ifdef v4lDEBUG  debug("v4l1: minw %d, maxw %d, minh %d, maxh %d in ::capCapSize",*minw,*maxw,*minh,*maxh);#endif}int v4l1if::addCapAClip( int x1,int y1, unsigned int x2, unsigned int y2, int xadj, int yadj ){//    return 0;  if ( vcap.type & VID_TYPE_CLIPPING ) {#ifdef v4lDEBUG    debug("v4l1: addCapAClip: [%d] %dx%d+%d+%d",nrofclips,x2-x1,y2-y1,x1-xadj,y1-yadj);#endif    if ( cliprecs[nrofclips].x !=  x1 - xadj ||	 cliprecs[nrofclips].y != y1 - yadj ||	 cliprecs[nrofclips].width != (int)x2 - x1 ||	 cliprecs[nrofclips].height != (int)y2 - y1 )      clipTabChanged= true;    cliprecs[nrofclips].x= x1 - xadj;    cliprecs[nrofclips].y= y1 - yadj;    cliprecs[nrofclips].width= x2 - x1;    cliprecs[nrofclips].height= y2 - y1;    nrofclips++;  }  return nrofclips;}int v4l1if::setCapAClip( int x, int y, unsigned int width, unsigned int height ){//    return 0;#if 0  if ( -1 == ioctl(devv4l, VIDIOCGWIN, &vwin) )    VIF_FATAL("v4l1: VIDIOC_G_WIN in ::setCapAClip");#endif#ifdef v4lDEBUG_CAP  debug("v4l1: setCapAClip: flags %d, chromakey %d",vwin.flags,vwin.chromakey);#endif  if ( vcap.type & VID_TYPE_CHROMAKEY ) {    vwin.chromakey  = 0;    /* XXX */  }  vwin.flags= 0;  if ( vcap.type & VID_TYPE_CLIPPING ) {    vwin.clips= cliprecs;    vwin.clipcount= nrofclips;  }    vwin.x= x;  vwin.y= y;  vwin.height= height;  vwin.width= width;#ifdef v4lDEBUG_CAP  debug("v4l1: setCapAClip new values: %d, %d, %d, %d",x,y,width,height);#endif  return nrofclips;}int v4l1if::applyCapAClip( int n ){//    return 0;  int ox,oy,oh,ow;  // save old values  ox=vwin.x;  oy=vwin.y;  ow=vwin.width;  oh=vwin.height;#ifdef v4lDEBUG_CAP  debug("v4l1: applyCapAClip given %d, %d, %d, %d [%d]",x,y,width,height,nrofclips);#endif  if ( n == 0 ) {    vwin.clipcount= n;  }    if ( -1 == ioctl(devv4l, VIDIOCSWIN, &vwin) )    VIF_FATAL("v4l1: VIDIOC_S_WIN in ::setCapAClip");#if 1#if 0  if ( -1 == ioctl(devv4l, VIDIOCGWIN, &vwin) )    VIF_FATAL("v4l1: VIDIOC_G_WIN in ::setCapAClip");  if ( vwin.x != x ) vwin.x=x;  if ( vwin.y != y ) vwin.y=y;  if ( vwin.height != height ) vwin.height= height;  if ( vwin.width != width ) vwin.width= width;#else  // set old values  vwin.x= ox;  vwin.y= oy;  vwin.height= oh;  vwin.width= ow;#endif#endif #if 0  vpic.palette = x11_format;#ifdef v4lDEBUG  //debug("v4l1: palette=%s",PALETTE(vpic.palette));#endif  if ( -1 == ioctl(devv4l, VIDIOCSPICT, &vpic) )    VIF_FATAL("v4l1: VIDIOC_S_PICT in ::v4l1if");   if ( -1 == ioctl(devv4l, VIDIOCGPICT, &vpic) )    VIF_FATAL("v4l1: VIDIOC_G_PICT in ::v4l1if");#ifdef v4lDEBUG   //debug("v4l1: palette=%s",PALETTE(vpic.palette));#endif#endif  return n;}void v4l1if::getCapAClip( int *x,int *y, unsigned int *width, unsigned int *height ){//return 0;#if 0  if ( -1 == ioctl(devv4l, VIDIOCGWIN, &vwin) )    VIF_FATAL("v4l1: VIDIOC_G_WIN in ::getCapAClip");#endif  *x= vwin.x;  *y= vwin.y;  *height= vwin.height;  *width= vwin.width;#ifdef v4lDEBUG_CAP  debug("v4l1: getCapAClip: %d, %d, %d, %d",*x,*y,*width,*height);#endif}bool v4l1if::grabSetParams( bool fixed, int * width, int * height, int palette ){  if ( fixed ) {    vgrab[0].width= *width;    vgrab[0].height= *height;  } else {    *width= vgrab[0].width= vwin.width;    *height= vgrab[0].height= vwin.height;  }  vgrab[0].frame=0;  vgrab[0].format= palette;  memcpy(&(vgrab[1]),&(vgrab[0]),sizeof(struct video_mmap));  vgrab[1].frame=1;  grabCapture( true );  return true;}char * v4l1if::grabCapture( bool single ){  // even frame: 0  // odd frame:  1  char * rmem;  if ( !single && (ggrab == gsync) )     if ( !grabOne( geven ? 0 : 1 ) ) return NULL;    if ( !grabOne( geven ? 1 : 0 ) ) return NULL;  if ( ggrab > gsync+1 ) {    grabWait( geven ? 0 : 1 );    rmem= (grabbermem + vmbuf.offsets[ geven ? 0 : 1 ]);  } else {    grabWait( geven ? 1 : 0 );    rmem= (grabbermem + vmbuf.offsets[ geven ? 1 : 0 ]);  }  geven= !geven;      return rmem;}bool v4l1if::grabOne( int frame ){  if ( -1 == ioctl(devv4l,VIDIOCMCAPTURE,&(vgrab[frame])) ) {    if (errno == EAGAIN) {      VIF_WARN("v4l1: Grabber chip can't sync");      return false;    } else {      VIF_FATAL_STR("v4l1: VIDIOCMCAPTURE in ::grabOne: %s",strerror(errno));    }  }  ggrab++;  return true;}void v4l1if::grabWait( int frame ){  if ( -1 == ioctl(devv4l,VIDIOCSYNC,&(vgrab[frame].frame)) ) {    VIF_WARN_STR("v4l1: VIDIOCSYNC in ::grabWait (frame %d)",frame);  } else gsync++;}//==============================================================================// local Variables: ***// compile-command: "make v4lx" ***// End: ***

⌨️ 快捷键说明

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