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

📄 v4lxif.h

📁 这个软件的功能同我上次传的那个avifile.也是linux上的一个用于多媒体应用的源码。
💻 H
字号:
/*     kwintv, Video4Linux compatible KDE application    Copyright (C) 1998 Moritz Wenk (wenk@mathematik.uni-kl.de)    This program is free software; you can redistribute it and/or modify    it under the terms of the GNU General Public License as published by    the Free Software Foundation; either version 2 of the License, or    (at your option) any later version.    This program is distributed in the hope that it will be useful,    but WITHOUT ANY WARRANTY; without even the implied warranty of    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    GNU General Public License for more details.    You should have received a copy of the GNU General Public License    along with this program; if not, write to the Free Software    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.*/#ifndef V4LIF_H#define V4LIF_H/* GUILESS should be defined if this interface will be used for a text-console   application - define it in config.h (using autoconf) */#include <config.h>#include "wintv.h"#include <linux/videodev.h>//#define PREREAD#define V4L_DEVICE "/dev/video"int con_printf(const char* fmt, ...);#define warning con_printf#define debug con_printf#define fatal con_printf/* WANT_V4L_DEBUG should be set in config.h/autoconf */#ifdef WANT_V4L_DEBUG#define v4lDEBUG#endif#define MAXCLIPRECS 100const bool on  = true;const bool off = false;struct STRTAB {    int  nr;    char *str;};struct STRSTRTAB {  int nr;  char *str;  char *description;};#if 0static struct STRSTRTAB device_cap[] = {  { VID_TYPE_CAPTURE, "capture","Can capture to memory" },  { VID_TYPE_TUNER, "tuner","Has a tuner of some form" },  { VID_TYPE_TELETEXT, "teletext","Has teletext capability" },  { VID_TYPE_OVERLAY, "overlay", "Can overlay its image onto the frame buffer" },  { VID_TYPE_CHROMAKEY, "chromakey", "Overlay is Chromakeyed" },  { VID_TYPE_CLIPPING, "clipping", "Overlay clipping is supported" },  { VID_TYPE_FRAMERAM, "frameram","Overlay overwrites frame buffer memory" },  { VID_TYPE_SCALES, "scales", "The hardware supports image scaling" },  { VID_TYPE_MONOCHROME, "monochrome", "Image capture is grey scale only" },  { VID_TYPE_SUBCAPTURE, "subcapture", "Capture can be of only part of the image" },  { -1, NULL, NULL }};static char *device_pal[] = {    "-", "grey", "hi240", "rgb16", "rgb24", "rgb32", "rgb15",    "yuv422", "yuyv", "uyvy", "yuv420", "yuv411", "raw",    "yuv422p", "yuv411p", NULL};#endif#define PALETTE(x) ((x < sizeof(device_pal)/sizeof(char*)) ? device_pal[x] : "UNKNOWN")#define AUDIOMODES 4#if 0static struct STRTAB audiomode[] = {    {  0, "&Autodetection"    },    {  VIDEO_SOUND_MONO, "&Mono"     },    {  VIDEO_SOUND_STEREO, "&Stereo (NICAM)" },    {  VIDEO_SOUND_LANG1, "Language &1"   },    {  VIDEO_SOUND_LANG2, "Language &2"   },    { -1, NULL,     },};#endifstatic char * unknown = "???";static char * audiodescr[] = { "autodetection","mono","stereo",unknown,			       "language 1",unknown,unknown,unknown,"language 2" };#if 0static struct STRTAB norms_bttv[] = {    {  0, "PAL" },    {  1, "NTSC" },    {  2, "SECAM" },    {  3, "PAL-NC" },    {  4, "PAL-M" },    {  5, "PAL-N" },    {  6, "NTSC-JP" },    { -1, NULL }};static struct STRTAB ifname[] = {  {  0, "no interface"  },  {  1, "Video4Linux"  },  {  2, "Video4Linux 2"  },  { -1, NULL,     },};#endif struct restab {  int id;  int w,h;  char * lname;  char * sname;};#if 0static struct restab cv_dimensions[] = {  { 0, 160, 120, "160 x 120 (1/4 NTSC)", "160 x 120" },  { 1, 192, 144, "192 x 144 (1/4 PAL)" , "192 x 144" },  { 2, 320, 240, "320 x 240 (1/2 NTSC)", "320 x 240" },  { 3, 384, 288, "384 x 288 (1/2 PAL)" , "384 x 288" },  { 4, 400, 300, "400 x 300 (default)" , "400 x 300" },  { 5, 640, 480, "640 x 480 (NTSC)"    , "640 x 480" },  { 6, 768, 576, "768 x 576 (PAL)"     , "768 x 576" },  { -1, 0,  5, NULL  }, /* do not channge anything below */  { -1, 0,  5, NULL  },  { -1, 0,  5, NULL  },};#endif//--------------------------------------------------------------------------------//--------------------- the virtual interface ------------------------------------//--------------------------------------------------------------------------------class v4lxif {public:  enum v4lxif_version { none, v4l1, v4l2 };  v4lxif( const char * _device = V4L_DEVICE, v4lxif_version _ifv = v4l1 );  virtual ~v4lxif();  v4lxif_version interface() { return ifv; }  // rest is virtual  // set   virtual void setCapture( bool on ) = 0;          // de/activate overlay capturing  virtual void setFreq( unsigned long freq ) = 0;  // in 1/16th MHz  virtual void setPicBrightness( int bri ) = 0;    //  -127 .. 127  virtual void setPicConstrast( int contr ) = 0;   //  0 .. 511  virtual void setPicColor( int color ) = 0;       //  0 .. 511  virtual void setPicHue( int hue ) = 0;           //  -127 .. 127  virtual void setChannel( int source ) = 0;       // input source like Tuner, Camera  virtual void setChannelNorm( int norm ) = 0;     // VIDEO_TUNER_PAL, _NTSC, _SECAM, _AUTO  virtual void setTuner( int no ) = 0;             // Nr of Tuner (any card aviable with more than one ??)  virtual void setTunerMode( int norm ) = 0;       // (VIDEO_TUNER_PAL, _NTSC, _SECAM, _AUTO)   virtual void setAudioMute( bool on ) = 0;        // toggle mute   virtual void setAudioVolume( int vol ) = 0;      // set volume of TV card  virtual void setAudioBalance( int bal ) = 0;     // set balance  virtual void setAudioMode( int mode ) = 0;       // VIDEO_SOUND_MONO, _STEREO, _LANG1, _LANG2  virtual void setPalette( int pal ) = 0;          // set the pallette  // get  virtual bool getCapture() = 0;                   // overlay captureing enabled?  virtual int getChannelActive() = 0;              // get active input source  virtual int getTunerActive() = 0;                // get active tuner  virtual int getTunerMode() = 0;                  // VIDEO_MODE_PAL, _NTSC, _SECAM, _AUTO  virtual unsigned long getTunerSignal() = 0;      // Signal strength if known - between 0-65535  virtual int getTunerFlags() = 0;                 // VIDEO_TUNER_*  virtual int getAudioAcitve() = 0;                // get active audio  virtual bool getAudioMute() = 0;                 // get mute state  virtual int  getAudioVolume() = 0;               // get vol  virtual int  getAudioBalance() = 0;              //   virtual int  getAudioMode() = 0;                 // VIDEO_SOUND_MONO, _STEREO, _LANG1, _LANG2    // getChannel  virtual int getChannelType() = 0;                // VIDEO_TYPE_TV, _CAMERA  virtual int getChannelNorm() = 0;                // norm set for this channel  // capAutio  virtual bool capAudioVolume() = 0;               // tv card capable to set volume?  virtual bool capAudioMutable() = 0;              // tv card capable to mute/unmute?  // capTuner  virtual bool capTunerStereo() = 0;               // tuner sees stereo?  virtual bool capTunerNorm() = 0;                 // tuner has settable norm  // capChannel    virtual bool capChannelAudio( int no ) = 0;      // active channel has audio  virtual bool capChannelNorm( int no ) = 0;       // " has setable norm  virtual bool capChannelTuner(int no  ) = 0;      // " has a tv tuner  virtual char * capChannelName( int no ) = 0;     // name of channel  // capCap  virtual int capCapChannelC() = 0;                // number of channels ( = input devices )  virtual int capCapAudioC() = 0;                  // " of audios  virtual char * capCapName() = 0;                 // name of interface  virtual int capCapType() = 0;                    // type ", VID_TYPE_*  virtual void capCapSize( unsigned int *minw,              /* TV screen min/max size */			   unsigned int *minh,			   unsigned int *maxw,			   unsigned int *maxh ) = 0;  // clipping stuff for capture area setup  virtual void resetCapAClip() = 0;  virtual int addCapAClip( int x1, int y1, unsigned int x2, unsigned int y2, int xadj=0, int yadj=0 ) = 0;  virtual int setCapAClip( int x,int y, unsigned int width, unsigned int height ) = 0;  virtual void getCapAClip( int *x,int *y, unsigned int *width, unsigned int *height ) = 0;  virtual int applyCapAClip( int nclips ) = 0;  virtual bool changedCapAClip() = 0;  // additional  virtual int getWWidth() = 0;  virtual int getWHeight() = 0;  // frame buffer  virtual unsigned int getFBheight() = 0;  virtual unsigned int getFBwidth() = 0;  virtual unsigned int getFBdepth() = 0;  virtual unsigned int getFBbpl() = 0;  // capture image stuff  virtual bool grabSetParams( bool fixed, int * width, int * height, int palette ) = 0;  virtual char * grabCapture( bool single ) = 0;   // single=false for stream captureing    virtual int isOk() =0;protected:  v4lxif_version ifv;  const char * device;      // name of the video4linux-device  int devv4l;               // the video4linux-device};//--------------------------------------------------------------------------------//--------------------- the video 4 linux interface -------------------------------//--------------------------------------------------------------------------------class v4l1if : public v4lxif {public:  v4l1if( const char* mem=0, const char * _device = V4L_DEVICE, int _bpp = 0, int _palette = 0 );  v4l1if( int );  ~v4l1if();  void setCapture( bool on );  void setFreq( unsigned long freq );  void setPicBrightness( int bri );         //  -127 .. 127  void setPicConstrast( int contr );        //  0 .. 511  void setPicColor( int color );            //  0 .. 511  void setPicHue( int hue );                //  -127 .. 127  void setChannel( int source );            //  input channel, Tuner,   void setChannelNorm( int norm );  void setTuner( int no );                  //  tuner, if more than one exists  void setTunerMode( int norm );            //  PAL, NTSC, SECAM, AUTO  void setAudio( int source );  void setAudioMute( bool on );  void setAudioVolume( int vol );  void setAudioBalance( int bal ) {}  void setAudioMode( int mode );  void setPalette( int pal );  inline bool getCapture() { return scapture; }    // getTuner  inline int getTunerActive() { return atuner; }  int getTunerMode();  unsigned long getTunerSignal();  int getTunerFlags();  // getAudio  inline int getAudioAcitve() { return aaudio; }  bool getAudioMute();  int  getAudioVolume();  int  getAudioBalance() { return 0; }  int  getAudioMode();  // getChannel  int getChannelType() { return vchan[achan].type; }  int getChannelNorm() { return vchan[achan].norm; }  inline int getChannelActive() { return achan; }  // capAudio  bool capAudioVolume();  bool capAudioMutable();  // capTuner  bool capTunerStereo();  bool capTunerNorm();  // capChannel  inline bool capChannelAudio( int no ) { return (vchan[no].flags & VIDEO_VC_AUDIO); }  inline bool capChannelNorm( int no ) { return true; /*return vchan[no].flags & VIDEO_VC_NORM;*/ }  inline bool capChannelTuner( int no ) { return (vchan[no].flags & VIDEO_VC_TUNER); }  inline char * capChannelName( int no ) { return vchan[no].name; }  // capCap  inline int capCapChannelC() { return vcap.channels; }  inline int capCapAudioC() { return vcap.audios; }  inline char * capCapName() { return &(vcap.name[0]); }  inline int capCapType() { return vcap.type; }  void capCapSize( unsigned int *minw, unsigned int *minh, unsigned int *maxw, unsigned int *maxh );  // clipping stuff  inline void resetCapAClip() { nrofclips= 0; clipTabChanged= false; }  int addCapAClip( int x1, int y1, unsigned int x2, unsigned int y2, int xadj=0, int yadj=0 );  int setCapAClip( int x, int y, unsigned int width, unsigned int height );  void getCapAClip( int *x, int *y, unsigned int *width, unsigned int *height );  int applyCapAClip( int nclips );  bool changedCapAClip() { return clipTabChanged; }  // additional  int getWWidth() { return vwin.width; }  int getWHeight() { return vwin.height; }  // frame buffer  inline unsigned int getFBheight() { return vbuf.height; }  inline unsigned int getFBwidth() { return vbuf.width; }  inline unsigned int getFBdepth() { return vbuf.depth; }  inline unsigned int getFBbpl() { return vbuf.bytesperline; }  // capture image stuff  bool grabSetParams( bool fixed, int * width, int * height, int palette );  char * grabCapture( bool single );    int isOk() {return _state;}private:  bool grabOne( int frame );  void grabWait( int frame );    // video 4 linux   // frame buffer  struct video_buffer vbuf;   // capabilities  struct video_capability vcap;   struct video_channel *vchan;  struct video_tuner vtuner;  struct video_picture vpic;  struct video_audio *vaudio;  // grabbing stuff  struct video_mmap vgrab[2];  struct video_mbuf vmbuf;  char * grabbermem;                   // memory for snapshot  (was: unchar)  int msize;                           // size of memory for grabbermem  // capture area stuff  struct video_window vwin;   struct video_clip cliprecs[MAXCLIPRECS];    // list of clips  int nrofclips;  // additional  int achan;  // the active channel set by setChannel()  int aaudio; // the active audio set by setAudio()  int atuner; // active tuner set by setTuner()  bool scapture, smute;  int gsync,ggrab;  bool geven;  unsigned int pixmap_bytes,x11_format;  bool setupok;  bool clipTabChanged;    int _state;};//--------------------------------------------------------------------------------//--------------------- the video 4 linux II interface ---------------------------//--------------------------------------------------------------------------------#endif// local Variables: ***// folded-file: t ***// compile-command-1: "make kwintvg" ***// compile-command-2: "make" ***// End: ***

⌨️ 快捷键说明

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