亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? drv-v4l.c

?? 用于arm9以上平臺
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* * interface to the v4l driver * *   (c) 1997-2001 Gerd Knorr <kraxel@bytesex.org> *	2005-3-23 modified by threewater<threewater@up-tech.com> * */#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <math.h>#include <errno.h>#include <fcntl.h>#include <string.h>#include <signal.h>#include <pthread.h>#include <sys/types.h>#include <sys/time.h>#include <sys/ioctl.h>#include <sys/stat.h>#include <sys/mman.h>#include "videodev.h"#include "grab-ng.h"#include "struct-dump.h"#include "struct-v4l.h"#define SYNC_TIMEOUT 5/* ---------------------------------------------------------------------- *//* open+close */static void*   v4l_open(char *device);static int     v4l_close(void *handle);/* attributes */static char*   v4l_devname(void *handle);static int     v4l_flags(void *handle);static struct ng_attribute* v4l_attrs(void *handle);static int     v4l_read_attr(struct ng_attribute*);static void    v4l_write_attr(struct ng_attribute*, int val);/* overlay */static int   v4l_setupfb(void *handle, struct ng_video_fmt *fmt, void *base);static int   v4l_overlay(void *handle, struct ng_video_fmt *fmt, int x, int y,			 struct OVERLAY_CLIP *oc, int count, int aspect);/* capture video */static int v4l_setformat(void *handle, struct ng_video_fmt *fmt);static int v4l_startvideo(void *handle, int fps, unsigned int buffers);static void v4l_stopvideo(void *handle);static struct ng_video_buf* v4l_nextframe(void *handle);static struct ng_video_buf* v4l_getimage(void *handle);/* tuner */static unsigned long v4l_getfreq(void *handle);static void v4l_setfreq(void *handle, unsigned long freq);static int v4l_tuned(void *handle);/* ---------------------------------------------------------------------- */static const char *device_cap[] = {    "capture", "tuner", "teletext", "overlay", "chromakey", "clipping",    "frameram", "scales", "monochrome", NULL};static const char *device_pal[] = {    "-", "grey", "hi240", "rgb16", "rgb24", "rgb32", "rgb15",    "yuv422", "yuyv", "uyvy", "yuv420", "yuv411", "raw",    "yuv422p", "yuv411p", "yuv420p", "yuv410p"};#define PALETTE(x) ((x < sizeof(device_pal)/sizeof(char*)) ? device_pal[x] : "UNKNOWN")static struct STRTAB stereo[] = {    {  0,                  "auto"    },    {  VIDEO_SOUND_MONO,   "mono"    },    {  VIDEO_SOUND_STEREO, "stereo"  },    {  VIDEO_SOUND_LANG1,  "lang1"   },    {  VIDEO_SOUND_LANG2,  "lang2"   },    { -1, NULL },};static struct STRTAB norms_v4l[] = {    {  VIDEO_MODE_PAL,     "PAL"   },    {  VIDEO_MODE_NTSC,    "NTSC"  },    {  VIDEO_MODE_SECAM,   "SECAM" },    {  VIDEO_MODE_AUTO,    "AUTO"  },    { -1, NULL }};static struct STRTAB norms_bttv[] = {    {  VIDEO_MODE_PAL,   "PAL"     },    {  VIDEO_MODE_NTSC,  "NTSC"    },    {  VIDEO_MODE_SECAM, "SECAM"   },    {  3,                "PAL-NC"  },    {  4,                "PAL-M"   },    {  5,                "PAL-N"   },    {  6,                "NTSC-JP" },    { -1, NULL }};static unsigned short format2palette[VIDEO_FMT_COUNT] = {    [ VIDEO_RGB08 ]    = VIDEO_PALETTE_HI240,    [ VIDEO_GRAY ]     = VIDEO_PALETTE_GREY,    [ VIDEO_RGB15_LE ] = VIDEO_PALETTE_RGB555,    [ VIDEO_RGB16_LE ] = VIDEO_PALETTE_RGB565,    [ VIDEO_BGR24 ]    = VIDEO_PALETTE_RGB24,    [ VIDEO_BGR32 ]    = VIDEO_PALETTE_RGB32,    [ VIDEO_YUYV ]     = VIDEO_PALETTE_YUV422,    [ VIDEO_UYVY ]     = VIDEO_PALETTE_UYVY,    [ VIDEO_YUV422P ]  = VIDEO_PALETTE_YUV422P,    [ VIDEO_YUV420P ]  = VIDEO_PALETTE_YUV420P,};/* pass 0/1 by reference */static int                      one = 1, zero = 0;/* ---------------------------------------------------------------------- */struct v4l_handle {    int                      fd;    /* general informations */    struct video_capability  capability;    struct video_channel     *channels;    struct video_tuner       tuner;    struct video_audio       audio;    struct video_picture     pict;    /* attributes */    int                      nattr;    struct ng_attribute      *attr;    int                      input;    int                      audio_mode;        /* overlay */    struct video_buffer      fbuf;    struct video_window      win;    int                      ov_error;    unsigned int             ov_fmtid;    int                      ov_enabled;    int                      ov_on;    /* capture */    int                      use_read;    struct ng_video_fmt      fmt;    long long                start;    int                      fps;        /* capture via read() */    struct ng_video_fmt      rd_fmt;    struct video_window      rd_win;    unsigned int             rd_fmtid;        /* capture to mmap()'ed buffers */    struct video_mbuf        mbuf;    unsigned char            *mmap;    unsigned int             nbuf;    unsigned int             queue;    unsigned int             waiton;    int                      probe[VIDEO_FMT_COUNT];    struct video_mmap        *buf_v4l;    struct ng_video_buf      *buf_me;};typedef struct v4l_handle v4l_device ;v4l_device vd; unsigned char *device_get_address()
{
  return ( vd.mmap +vd.mbuf.offsets[vd.nbuf]);
}struct ng_vid_driver v4l_driver = {    name:          "v4l",    open:          v4l_open,    close:         v4l_close,    get_devname:   v4l_devname,    capabilities:  v4l_flags,    list_attrs:    v4l_attrs,    setupfb:       v4l_setupfb,    overlay:       v4l_overlay,    setformat:     v4l_setformat,    startvideo:    v4l_startvideo,    stopvideo:     v4l_stopvideo,    nextframe:     v4l_nextframe,    getimage:      v4l_getimage,        getfreq:       v4l_getfreq,    setfreq:       v4l_setfreq,    is_tuned:      v4l_tuned,};/* ---------------------------------------------------------------------- */static int alarms;static voidsigalarm(int signal){    alarms++;    fprintf(stderr,"v4l: timeout (got SIGALRM), hardware/driver problems?\n");}static voidsiginit(void){    struct sigaction act,old;        memset(&act,0,sizeof(act));    act.sa_handler  = sigalarm;    sigemptyset(&act.sa_mask);    sigaction(SIGALRM,&act,&old);}/* ---------------------------------------------------------------------- */#define PREFIX "ioctl: "static intxioctl(int fd, int cmd, void *arg){    int rc;    rc = ioctl(fd,cmd,arg);    if (0 == rc && ng_debug < 2)	return 0;    print_ioctl(stderr,ioctls_v4l1,PREFIX,cmd,arg);    fprintf(stderr,": %s\n",(rc == 0) ? "ok" : strerror(errno));    return rc;}/* ---------------------------------------------------------------------- */static voidv4l_add_attr(struct v4l_handle *h, int id, int type,	     int defval, struct STRTAB *choices){    h->attr = realloc(h->attr,(h->nattr+2) * sizeof(struct ng_attribute));    memset(h->attr+h->nattr,0,sizeof(struct ng_attribute)*2);    h->attr[h->nattr].id      = id;    h->attr[h->nattr].type    = type;    h->attr[h->nattr].defval  = defval;    h->attr[h->nattr].choices = choices;    if (ATTR_TYPE_INTEGER == type) {	h->attr[h->nattr].min = 0;	h->attr[h->nattr].max = 65535;    }    if (id < ATTR_ID_COUNT)	h->attr[h->nattr].name = ng_attr_to_desc[id];    h->attr[h->nattr].read    = v4l_read_attr;    h->attr[h->nattr].write   = v4l_write_attr;    h->attr[h->nattr].handle  = h;    h->nattr++;}static void*v4l_open(char *device){    struct v4l_handle *h;    struct STRTAB *inputs;    struct STRTAB *norms;    unsigned int i;    int rc;    h = malloc(sizeof(*h));    if (NULL == h)	return NULL;    memset(h,0,sizeof(*h));    /* open device */    if (-1 == (h->fd = open(device,O_RDWR))) {	fprintf(stderr,"v4l: open %s: %s\n",device,strerror(errno));	goto err;    }    if (-1 == ioctl(h->fd,VIDIOCGCAP,&h->capability))	goto err;    if (ng_debug)	fprintf(stderr, "v4l: open: %s (%s)\n",device,h->capability.name);    fcntl(h->fd,F_SETFD,FD_CLOEXEC);    siginit();    if (ng_debug) {	fprintf(stderr,"  capabilities: ");	for (i = 0; device_cap[i] != NULL; i++)	    if (h->capability.type & (1 << i))		fprintf(stderr," %s",device_cap[i]);	fprintf(stderr,"\n");	fprintf(stderr,"  size    : %dx%d => %dx%d\n",		h->capability.minwidth,h->capability.minheight,		h->capability.maxwidth,h->capability.maxheight);    }    /* input sources */    if (ng_debug)	fprintf(stderr,"  channels: %d\n",h->capability.channels);    h->channels = malloc(sizeof(struct video_channel)*h->capability.channels);    memset(h->channels,0,sizeof(struct video_channel)*h->capability.channels);    inputs = malloc(sizeof(struct STRTAB)*(h->capability.channels+1));    memset(inputs,0,sizeof(struct STRTAB)*(h->capability.channels+1));    for (i = 0; i < h->capability.channels; i++) {	h->channels[i].channel = i;	xioctl(h->fd,VIDIOCGCHAN,&(h->channels[i]));	inputs[i].nr  = i;	inputs[i].str = h->channels[i].name;	if (ng_debug)	    fprintf(stderr,"    %s: %d %s%s %s%s\n",		    h->channels[i].name,		    h->channels[i].tuners,		    (h->channels[i].flags & VIDEO_VC_TUNER)   ? "tuner "  : "",		    (h->channels[i].flags & VIDEO_VC_AUDIO)   ? "audio "  : "",		    (h->channels[i].type & VIDEO_TYPE_TV)     ? "tv "     : "",		    (h->channels[i].type & VIDEO_TYPE_CAMERA) ? "camera " : "");    }    inputs[i].nr  = -1;    inputs[i].str = NULL;    v4l_add_attr(h,ATTR_ID_INPUT,ATTR_TYPE_CHOICE,0,inputs);        /* audios */    if (ng_debug)	fprintf(stderr,"  audios  : %d\n",h->capability.audios);    if (h->capability.audios) {	h->audio.audio = 0;	xioctl(h->fd,VIDIOCGAUDIO,&h->audio);	if (ng_debug) {	    fprintf(stderr,"    %d (%s): ",i,h->audio.name);	    if (h->audio.flags & VIDEO_AUDIO_MUTABLE)		fprintf(stderr,"muted=%s ",			(h->audio.flags&VIDEO_AUDIO_MUTE) ? "yes":"no");	    if (h->audio.flags & VIDEO_AUDIO_VOLUME)		fprintf(stderr,"volume=%d ",h->audio.volume);	    if (h->audio.flags & VIDEO_AUDIO_BASS)		fprintf(stderr,"bass=%d ",h->audio.bass);	    if (h->audio.flags & VIDEO_AUDIO_TREBLE)		fprintf(stderr,"treble=%d ",h->audio.treble);	    fprintf(stderr,"\n");	}	v4l_add_attr(h,ATTR_ID_MUTE,ATTR_TYPE_BOOL,0,NULL);	v4l_add_attr(h,ATTR_ID_AUDIO_MODE,ATTR_TYPE_CHOICE,0,stereo);	if (h->audio.flags & VIDEO_AUDIO_VOLUME)	    v4l_add_attr(h,ATTR_ID_VOLUME,ATTR_TYPE_INTEGER,0,NULL);    }    /* tv norms / tuner */    norms = malloc(sizeof(norms_v4l));    memcpy(norms,norms_v4l,sizeof(norms_v4l));    if (h->capability.type & VID_TYPE_TUNER) {	/* have tuner */	xioctl(h->fd,VIDIOCGTUNER,&h->tuner);	if (ng_debug)	    fprintf(stderr,"  tuner   : %s %lu-%lu",		    h->tuner.name,h->tuner.rangelow,h->tuner.rangehigh);	for (i = 0; norms[i].str != NULL; i++) {	    if (h->tuner.flags & (1<<i)) {		if (ng_debug)		    fprintf(stderr," %s",norms[i].str);	    } else		norms[i].nr = -1;	}	if (ng_debug)	    fprintf(stderr,"\n");    } else {	/* no tuner */	struct video_channel vchan;	memcpy(&vchan, &h->channels[0], sizeof(struct video_channel));	for (i = 0; norms[i].str != NULL; i++) {	    vchan.norm = i;	    if (-1 == xioctl(h->fd,VIDIOCSCHAN,&vchan))		norms[i].nr = -1;	    else if (ng_debug)		fprintf(stderr," %s",norms[i].str);	}	/* restore settings after probe */	memcpy(&vchan, &h->channels[0], sizeof(struct video_channel));	xioctl(h->fd,VIDIOCSCHAN,&vchan);	if (ng_debug)	    fprintf(stderr,"\n");    }    #if 1#define BTTV_VERSION  	        _IOR('v' , BASE_VIDIOCPRIVATE+6, int)    /* dirty hack time / v4l design flaw -- works with bttv only     * this adds support for a few less common PAL versions */    if (-1 != (rc = ioctl(h->fd,BTTV_VERSION,&i))) {	norms = norms_bttv;	if (ng_debug || rc < 0x000700)	    fprintf(stderr,"v4l: bttv version %d.%d.%d\n",		    (rc >> 16) & 0xff,		    (rc >> 8)  & 0xff,		    rc         & 0xff);	if (rc < 0x000700)	    fprintf(stderr,		    "v4l: prehistoric bttv version found, please try to\n"		    "     upgrade the driver before mailing bug reports\n");    }#endif

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本久久一区二区三区| 国产在线精品一区在线观看麻豆| 亚洲国产视频一区二区| 日韩不卡免费视频| 国产一区二区三区电影在线观看| 成人av综合在线| 欧美精品久久99久久在免费线| 日韩精品自拍偷拍| 17c精品麻豆一区二区免费| 亚洲成人三级小说| 国产成人精品免费视频网站| 欧美在线制服丝袜| 精品国产乱码久久久久久久| 亚洲精品日日夜夜| 美美哒免费高清在线观看视频一区二区 | 亚洲午夜在线电影| 久久不见久久见免费视频7| 国产91丝袜在线播放0| 欧美日韩国产经典色站一区二区三区| 久久综合网色—综合色88| 亚洲精品美国一| 狠狠色狠狠色综合系列| 在线免费一区三区| 久久蜜桃av一区精品变态类天堂 | 色综合久久久久综合99| 3d成人动漫网站| 国产精品欧美一区二区三区| 日本vs亚洲vs韩国一区三区二区| 成人aa视频在线观看| 日韩欧美国产wwwww| 亚洲夂夂婷婷色拍ww47| 国产精品一区免费在线观看| 欧美日韩精品免费观看视频| 国产精品久久久久一区二区三区共 | 国产91精品精华液一区二区三区| 欧美在线免费视屏| 日本一二三不卡| 美女视频黄频大全不卡视频在线播放| 91电影在线观看| 国产精品女主播在线观看| 久久国产精品免费| 欧美一卡二卡三卡| 亚洲一二三区视频在线观看| 波多野结衣欧美| 日韩精品一区二区三区在线播放| 午夜免费久久看| 日本乱人伦一区| 1区2区3区国产精品| 国产高清不卡一区二区| 欧美一区二区精品在线| 手机精品视频在线观看| 色狠狠色噜噜噜综合网| 国产精品国模大尺度视频| 国产一区二区在线电影| 日韩欧美专区在线| 日韩在线a电影| 欧美午夜精品久久久久久超碰 | 色悠悠久久综合| 国产精品久久久久四虎| 国产成人综合亚洲网站| 精品sm在线观看| 韩国午夜理伦三级不卡影院| 日韩欧美国产一区在线观看| 首页国产丝袜综合| 欧美精品日韩综合在线| 亚洲第一会所有码转帖| 欧美怡红院视频| 亚洲福利视频导航| 欧美日精品一区视频| 亚洲一二三专区| 欧美日韩久久久久久| 亚洲成在人线免费| 欧美日韩一级二级| 三级精品在线观看| 欧美另类变人与禽xxxxx| 亚州成人在线电影| 在线不卡免费av| 蜜臀久久99精品久久久久宅男| 日韩女优电影在线观看| 久久精品国产精品亚洲综合| 日韩三级在线免费观看| 国产一区二区女| 国产性天天综合网| 成人免费视频网站在线观看| 亚洲欧美在线视频观看| 色久优优欧美色久优优| 亚洲成av人片在www色猫咪| 在线观看91av| 国内精品不卡在线| 国产精品污www在线观看| 色综合久久中文综合久久97| 亚洲午夜精品网| 91精品国模一区二区三区| 激情综合色综合久久综合| 欧美国产成人精品| 在线免费观看成人短视频| 午夜成人免费电影| 精品国产91九色蝌蚪| 成人免费视频视频在线观看免费 | 色琪琪一区二区三区亚洲区| 亚洲一区二三区| 欧美一区二区视频免费观看| 国产主播一区二区三区| 最新不卡av在线| 欧美三级韩国三级日本一级| 麻豆精品视频在线| 国产精品女主播在线观看| 欧美伊人精品成人久久综合97| 日韩国产精品大片| 国产亚洲欧洲一区高清在线观看| 色综合久久88色综合天天6| 午夜精品视频在线观看| xfplay精品久久| 91免费精品国自产拍在线不卡| 婷婷综合五月天| 久久久.com| 欧美无人高清视频在线观看| 久久精品久久综合| 亚洲伦理在线精品| 精品日韩一区二区三区免费视频| 成人深夜福利app| 人人爽香蕉精品| 中文字幕中文字幕一区二区| 91精品国产福利在线观看| 丁香激情综合国产| 日韩av电影天堂| 最新久久zyz资源站| 欧美一二区视频| 色婷婷综合激情| 国产成人在线免费| 日韩成人免费电影| 亚洲三级电影全部在线观看高清| 欧美一区欧美二区| 91免费国产视频网站| 国产综合色视频| 香蕉久久夜色精品国产使用方法 | 国产成人av一区二区三区在线| 一区二区三区四区蜜桃| 久久久不卡影院| 欧美丰满一区二区免费视频 | 精品不卡在线视频| 欧美私模裸体表演在线观看| 黄一区二区三区| 五月婷婷综合在线| 亚洲午夜激情av| 国产欧美精品一区二区色综合朱莉| 欧亚洲嫩模精品一区三区| 久久99热狠狠色一区二区| 亚洲国产精品高清| 欧美大片在线观看一区二区| 色av成人天堂桃色av| 国产91高潮流白浆在线麻豆| 韩国精品主播一区二区在线观看 | 色欧美日韩亚洲| 成人免费视频一区| 精品亚洲成a人| 日产欧产美韩系列久久99| 亚洲欧美日韩国产手机在线| 国产日韩av一区二区| 精品国产91久久久久久久妲己| 91精品国产综合久久精品麻豆 | 亚洲福利一二三区| 亚洲欧美国产三级| 中文字幕精品—区二区四季| 久久色在线视频| 精品毛片乱码1区2区3区| 这里是久久伊人| 欧美日韩一区二区三区在线| 色综合天天综合网天天狠天天 | 亚洲码国产岛国毛片在线| 中国色在线观看另类| 久久久一区二区三区捆绑**| 91精品国产麻豆国产自产在线 | 日本女优在线视频一区二区| 亚洲成人av一区二区| 亚洲影视资源网| 一区二区三区四区蜜桃| 亚洲精品老司机| 伊人开心综合网| 亚洲夂夂婷婷色拍ww47| 亚洲一区二三区| 首页国产欧美久久| 老司机精品视频线观看86| 亚洲777理论| 视频在线观看91| 日韩国产欧美一区二区三区| 免费观看一级欧美片| 久久国产精品区| 国产一区二区三区香蕉| 国产精品88av| 波多野结衣中文字幕一区二区三区| 丁香激情综合五月| 91首页免费视频| 91丝袜美腿高跟国产极品老师| 91免费版pro下载短视频| 色噜噜偷拍精品综合在线| 欧美日韩国产天堂| 日韩欧美美女一区二区三区| 久久久久久久久一| 亚洲视频你懂的|