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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? grab-ng.c

?? It s a tool designed to extract as much information as possible from Bluetooth devices without the r
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * next generation[tm] xawtv capture interfaces * * (c) 2001 Gerd Knorr <kraxel@bytesex.org> * */#define NG_PRIVATE#include "config.h"#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <string.h>#include <pthread.h>#include <dirent.h>#include <fnmatch.h>#include <errno.h>#include <ctype.h>#include <inttypes.h>#include <fcntl.h>#include <sys/time.h>#include <sys/types.h>#include <sys/stat.h>#include <dlfcn.h>#ifndef RTLD_NOW# define RTLD_NOW RTLD_LAZY#endif#include "grab-ng.h"int  ng_debug          = 0;int  ng_log_bad_stream = 0;int  ng_log_resync     = 0;int  ng_chromakey      = 0x00ff00ff;int  ng_ratio_x        = 4;int  ng_ratio_y        = 3;int  ng_jpeg_quality   = 75;char ng_v4l_conf[256]  = "v4l-conf";/* --------------------------------------------------------------------- */const unsigned int ng_vfmt_to_depth[VIDEO_FMT_COUNT] = {    0,               /* unused   */    8,               /* RGB8     */    8,               /* GRAY8    */    16,              /* RGB15 LE */    16,              /* RGB16 LE */    16,              /* RGB15 BE */    16,              /* RGB16 BE */    24,              /* BGR24    */    32,              /* BGR32    */    24,              /* RGB24    */    32,              /* RGB32    */    16,              /* LUT2     */    32,              /* LUT4     */    16,		     /* YUYV     */    16,		     /* YUV422P  */    12,		     /* YUV420P  */    0,		     /* MJPEG    */    0,		     /* JPEG     */    16,		     /* UYVY     */    0,		     /* MPEG     */};const char* ng_vfmt_to_desc[VIDEO_FMT_COUNT] = {    "none",    "8 bit PseudoColor (dithering)",    "8 bit StaticGray",    "15 bit TrueColor (LE)",    "16 bit TrueColor (LE)",    "15 bit TrueColor (BE)",    "16 bit TrueColor (BE)",    "24 bit TrueColor (LE: bgr)",    "32 bit TrueColor (LE: bgr-)",    "24 bit TrueColor (BE: rgb)",    "32 bit TrueColor (BE: -rgb)",    "16 bit TrueColor (lut)",    "32 bit TrueColor (lut)",    "16 bit YUV 4:2:2 (packed, YUYV)",    "16 bit YUV 4:2:2 (planar)",    "12 bit YUV 4:2:0 (planar)",    "MJPEG (AVI)",    "JPEG (JFIF)",    "16 bit YUV 4:2:2 (packed, UYVY)",    "MPEG video",};/* --------------------------------------------------------------------- */const unsigned int   ng_afmt_to_channels[AUDIO_FMT_COUNT] = {    0,  1,  2,  1,  2,  1,  2, 0};const unsigned int   ng_afmt_to_bits[AUDIO_FMT_COUNT] = {    0,  8,  8, 16, 16, 16, 16, 0};const char* ng_afmt_to_desc[AUDIO_FMT_COUNT] = {    "none",    "8bit mono",    "8bit stereo",    "16bit mono (LE)",    "16bit stereo (LE)",    "16bit mono (BE)",    "16bit stereo (BE)",    "MPEG audio",};/* --------------------------------------------------------------------- */const char* ng_attr_to_desc[] = {    "none",    "norm",    "input",    "volume",    "mute",    "audio mode",    "color",    "bright",    "hue",    "contrast",};/* --------------------------------------------------------------------- */void ng_init_video_buf(struct ng_video_buf *buf){    memset(buf,0,sizeof(*buf));    pthread_mutex_init(&buf->lock,NULL);        pthread_cond_init(&buf->cond,NULL);}void ng_release_video_buf(struct ng_video_buf *buf){    int release;    pthread_mutex_lock(&buf->lock);    buf->refcount--;    release = (buf->refcount == 0);    pthread_mutex_unlock(&buf->lock);    if (release && NULL != buf->release)	buf->release(buf);}void ng_print_video_buf(char *tag, struct ng_video_buf *buf){    fprintf(stderr,"buf %5s: %dx%d [%s]\n",	    tag, buf->fmt.width, buf->fmt.height,	    ng_vfmt_to_desc[buf->fmt.fmtid]);}void ng_copy_video_buf(struct ng_video_buf *dst, struct ng_video_buf *src){    memcpy(dst->data, src->data, src->size);    dst->size = src->size;    dst->info = src->info;}void ng_wakeup_video_buf(struct ng_video_buf *buf){    pthread_cond_signal(&buf->cond);}void ng_waiton_video_buf(struct ng_video_buf *buf){    pthread_mutex_lock(&buf->lock);    while (buf->refcount)	pthread_cond_wait(&buf->cond, &buf->lock);    pthread_mutex_unlock(&buf->lock);}static int malloc_video_bufs;static int malloc_audio_bufs;static void ng_free_video_buf(struct ng_video_buf *buf){    free(buf->data);    free(buf);    malloc_video_bufs--;}struct ng_video_buf*ng_malloc_video_buf(void *handle, struct ng_video_fmt *fmt){    struct ng_video_buf *buf;    buf = malloc(sizeof(*buf));    if (NULL == buf)	return NULL;    ng_init_video_buf(buf);    buf->fmt  = *fmt;    buf->size = fmt->height * fmt->bytesperline;    if (0 == buf->size)	buf->size = fmt->width * fmt->height * 3;    buf->data = malloc(buf->size);    if (NULL == buf->data) {	free(buf);	return NULL;    }    buf->refcount = 1;    buf->release  = ng_free_video_buf;    malloc_video_bufs++;    return buf;}struct ng_audio_buf*ng_malloc_audio_buf(struct ng_audio_fmt *fmt, int size){    struct ng_audio_buf *buf;    buf = malloc(sizeof(*buf)+size);    memset(buf,0,sizeof(*buf));    buf->fmt  = *fmt;    buf->size = size;    buf->data = (char*)buf + sizeof(*buf);    malloc_audio_bufs++;    return buf;}void ng_free_audio_buf(struct ng_audio_buf *buf){    malloc_audio_bufs--;    free(buf);}static void __fini malloc_bufs_check(void){    OOPS_ON(malloc_video_bufs > 0, "malloc_video_bufs is %d (expected 0)",	    malloc_video_bufs);    OOPS_ON(malloc_audio_bufs > 0, "malloc_audio_bufs is %d (expected 0)",	    malloc_audio_bufs);}/* --------------------------------------------------------------------- */struct ng_attribute*ng_attr_byid(struct ng_devstate *dev, int id){    struct list_head     *item;    struct ng_attribute  *attr;        list_for_each(item, &dev->attrs) {	attr = list_entry(item, struct ng_attribute, device_list);	if (attr->id == id)	    return attr;    }    return NULL;}struct ng_attribute*ng_attr_byname(struct ng_devstate *dev, char *name){    struct list_head     *item;    struct ng_attribute  *attr;        list_for_each(item, &dev->attrs) {	attr = list_entry(item, struct ng_attribute, device_list);	if (0 == strcasecmp(attr->name,name))	    return attr;    }    return NULL;}const char*ng_attr_getstr(struct ng_attribute *attr, int value){    int i;        if (NULL == attr)	return NULL;    if (attr->type != ATTR_TYPE_CHOICE)	return NULL;    for (i = 0; attr->choices[i].str != NULL; i++)	if (attr->choices[i].nr == value)	    return attr->choices[i].str;    return NULL;}intng_attr_getint(struct ng_attribute *attr, char *value){    int i,val;        if (NULL == attr)	return -1;    if (attr->type != ATTR_TYPE_CHOICE)	return -1;    for (i = 0; attr->choices[i].str != NULL; i++) {	if (0 == strcasecmp(attr->choices[i].str,value))	    return attr->choices[i].nr;    }    if (isdigit(value[0])) {	/* Hmm.  String not found, but starts with a digit.	   Check if this is a valid number ... */	val = atoi(value);	for (i = 0; attr->choices[i].str != NULL; i++)	    if (val == attr->choices[i].nr)		return attr->choices[i].nr;	    }    return -1;}voidng_attr_listchoices(struct ng_attribute *attr){    int i;        fprintf(stderr,"valid choices for \"%s\": ",attr->name);    for (i = 0; attr->choices[i].str != NULL; i++)	fprintf(stderr,"%s\"%s\"",		i ? ", " : "",		attr->choices[i].str);    fprintf(stderr,"\n");}intng_attr_int2percent(struct ng_attribute *attr, int value){    int range,percent;    range   = attr->max - attr->min;    percent = (value - attr->min) * 100 / range;    if (percent < 0)	percent = 0;    if (percent > 100)	percent = 100;    return percent;}intng_attr_percent2int(struct ng_attribute *attr, int percent){    int range,value;    range = attr->max - attr->min;    value = percent * range / 100 + attr->min;    if (value < attr->min)	value = attr->min;    if (value > attr->max)	value = attr->max;    return value;}intng_attr_parse_int(struct ng_attribute *attr, char *str){    int value,n;    if (0 == sscanf(str,"%d%n",&value,&n))	/* parse error */	return attr->defval;    if (str[n] == '%')	value = ng_attr_percent2int(attr,value);    if (value < attr->min)	value = attr->min;    if (value > attr->max)	value = attr->max;    return value;}/* --------------------------------------------------------------------- */voidng_ratio_fixup(int *width, int *height, int *xoff, int *yoff){    int h = *height;    int w = *width;    if (0 == ng_ratio_x || 0 == ng_ratio_y)	return;    if (w * ng_ratio_y < h * ng_ratio_x) {	*height = *width * ng_ratio_y / ng_ratio_x;	if (yoff)	    *yoff  += (h-*height)/2;    } else if (w * ng_ratio_y > h * ng_ratio_x) {	*width  = *height * ng_ratio_x / ng_ratio_y;	if (yoff)	    *xoff  += (w-*width)/2;    }}voidng_ratio_fixup2(int *width, int *height, int *xoff, int *yoff,		int ratio_x, int ratio_y, int up){    int h = *height;    int w = *width;    if (0 == ratio_x || 0 == ratio_y)	return;    if ((!up  &&  w * ratio_y < h * ratio_x) ||	(up   &&  w * ratio_y > h * ratio_x)) {	*height = *width * ratio_y / ratio_x;	if (yoff)	    *yoff  += (h-*height)/2;    } else if ((!up  &&  w * ratio_y > h * ratio_x) ||	       (up   &&  w * ratio_y < h * ratio_x)) {	*width  = *height * ratio_x / ratio_y;	if (yoff)	    *xoff  += (w-*width)/2;    }}/* --------------------------------------------------------------------- */LIST_HEAD(ng_conv);LIST_HEAD(ng_aconv);LIST_HEAD(ng_filters);LIST_HEAD(ng_writers);LIST_HEAD(ng_readers);LIST_HEAD(ng_vid_drivers);LIST_HEAD(ng_dsp_drivers);LIST_HEAD(ng_mix_drivers);static int ng_check_magic(int magic, char *plugname, char *type){    char *h;    h=strrchr(plugname,'/');    if (h)	h++;    else	h=plugname;        if (magic != NG_PLUGIN_MAGIC) {	fprintf(stderr, "ERROR: plugin magic mismatch [me=%x,%s=%x]\n",		NG_PLUGIN_MAGIC,h,magic);	return -1;    }#if 0    if (ng_debug)	fprintf(stderr,"plugins: %s registered by %s\n",type,plugname);#endif    return 0;}intng_conv_register(int magic, char *plugname,		 struct ng_video_conv *list, int count){    int n;    if (0 != ng_check_magic(magic,plugname,"video converters"))	return -1;    for (n = 0; n < count; n++)	list_add_tail(&(list[n].list),&ng_conv);    return 0;}intng_aconv_register(int magic, char *plugname,		  struct ng_audio_conv *list, int count){    int n;        if (0 != ng_check_magic(magic,plugname,"audio converters"))	return -1;    for (n = 0; n < count; n++)	list_add_tail(&(list[n].list),&ng_aconv);    return 0;}intng_filter_register(int magic, char *plugname, struct ng_video_filter *filter){    if (0 != ng_check_magic(magic,plugname,"filter"))	return -1;    list_add_tail(&filter->list,&ng_filters);    return 0;}intng_writer_register(int magic, char *plugname, struct ng_writer *writer){    if (0 != ng_check_magic(magic,plugname,"writer"))	return -1;    list_add_tail(&writer->list,&ng_writers);    return 0;}intng_reader_register(int magic, char *plugname, struct ng_reader *reader){    if (0 != ng_check_magic(magic,plugname,"reader"))	return -1;    list_add_tail(&reader->list,&ng_readers);    return 0;}intng_vid_driver_register(int magic, char *plugname, struct ng_vid_driver *driver){    struct list_head *item;    struct ng_vid_driver *drv;    if (0 != ng_check_magic(magic,plugname,"video drv"))	return -1;    list_for_each(item,&ng_vid_drivers) {        drv = list_entry(item, struct ng_vid_driver, list);	if (drv->priority > driver->priority) {	    list_add_tail(&driver->list,&drv->list);	    return 0;	}    }    list_add_tail(&driver->list,&ng_vid_drivers);    return 0;}intng_dsp_driver_register(int magic, char *plugname, struct ng_dsp_driver *driver){    struct list_head *item;    struct ng_dsp_driver *drv;    if (0 != ng_check_magic(magic,plugname,"dsp drv"))	return -1;    list_for_each(item,&ng_dsp_drivers) {        drv = list_entry(item, struct ng_dsp_driver, list);	if (drv->priority > driver->priority) {	    list_add_tail(&driver->list,&drv->list);	    return 0;	}    }    list_add_tail(&driver->list,&ng_dsp_drivers);    return 0;}intng_mix_driver_register(int magic, char *plugname, struct ng_mix_driver *driver){    struct list_head *item;    struct ng_mix_driver *drv;    if (0 != ng_check_magic(magic,plugname,"mixer drv"))	return -1;    list_for_each(item,&ng_mix_drivers) {        drv = list_entry(item, struct ng_mix_driver, list);	if (drv->priority > driver->priority) {	    list_add_tail(&driver->list,&drv->list);	    return 0;	}    }    list_add_tail(&driver->list,&ng_mix_drivers);    return 0;}struct ng_video_conv*ng_conv_find_to(unsigned int out, int *i){    struct list_head *item;    struct ng_video_conv *ret;    int j = 0;    list_for_each(item,&ng_conv) {	if (j < *i) {	    j++;	    continue;	}	ret = list_entry(item, struct ng_video_conv, list);#if 0	fprintf(stderr,"\tconv to:  %-28s =>  %s\n",		ng_vfmt_to_desc[ret->fmtid_in],		ng_vfmt_to_desc[ret->fmtid_out]);#endif	if (ret->fmtid_out == out) {	    (*i)++;	    return ret;	}	(*i)++;	j++;    }    return NULL;}struct ng_video_conv*ng_conv_find_from(unsigned int in, int *i){    struct list_head *item;    struct ng_video_conv *ret;        int j = 0;    list_for_each(item,&ng_conv) {	if (j < *i) {	    j++;	    continue;	}	ret = list_entry(item, struct ng_video_conv, list);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区男人的天堂| 亚洲成av人片观看| 国产亚洲精品bt天堂精选| 日韩欧美一区二区三区在线| 欧美一区午夜精品| 欧美一级二级在线观看| 91麻豆精品国产91久久久 | 日本道精品一区二区三区| 不卡一二三区首页| 色综合一个色综合| 欧美三级电影网| 欧美一区二区三区播放老司机| 8v天堂国产在线一区二区| 日韩久久免费av| 久久蜜桃一区二区| 国产精品久久久久一区二区三区 | 国产精品久久久久久久浪潮网站| 中文字幕一区二区在线观看| 综合自拍亚洲综合图不卡区| 亚洲综合小说图片| 免费的成人av| 成人毛片在线观看| 色天使色偷偷av一区二区| 欧美日韩你懂得| 欧美成人欧美edvon| 国产亚洲成av人在线观看导航| 国产亚洲欧洲997久久综合| 国产精品妹子av| 亚洲国产你懂的| 精品在线免费视频| 99视频热这里只有精品免费| 欧美在线一二三四区| 欧美一区二区三区精品| 欧美国产成人在线| 亚洲一区二区精品3399| 韩国三级电影一区二区| 成人性生交大合| 欧美精品电影在线播放| 久久久综合精品| 一区二区三区免费看视频| 另类小说综合欧美亚洲| 99久久精品国产导航| 制服丝袜亚洲色图| 亚洲国产精品国自产拍av| 亚洲电影在线播放| 国产麻豆日韩欧美久久| 欧美性大战久久| 久久精品人人做人人爽97| 亚洲制服丝袜一区| 国产成人鲁色资源国产91色综| 91精品福利视频| 国产亚洲欧洲997久久综合| 精品国产sm最大网站免费看| 亚洲精选视频在线| 久久国产三级精品| 日本丶国产丶欧美色综合| 久久天堂av综合合色蜜桃网 | 99热99精品| 日韩欧美你懂的| 亚洲综合成人在线视频| 国产精品1区二区.| 日韩欧美在线123| 亚洲精品免费一二三区| 国产一区在线精品| 911精品产国品一二三产区| 国产精品乱码人人做人人爱| 美女网站视频久久| 欧美三级乱人伦电影| 中文字幕亚洲在| 国产乱子伦视频一区二区三区| 欧美色国产精品| 亚洲日韩欧美一区二区在线| 国产一区二区不卡| 欧美大片国产精品| 日韩和的一区二区| 欧美最新大片在线看| 国产精品的网站| 成人免费电影视频| 国产三级一区二区| 精品一二线国产| 欧美一区二区三区四区在线观看| 一区二区免费在线播放| 91浏览器入口在线观看| 中文幕一区二区三区久久蜜桃| 久久99精品网久久| 日韩欧美在线1卡| 日本一道高清亚洲日美韩| 欧美日韩一区二区三区免费看| 中文字幕在线不卡视频| 高清av一区二区| 欧美精品一区男女天堂| 免费的国产精品| 日韩午夜在线观看视频| 日韩不卡免费视频| 欧美日韩午夜影院| 日本韩国欧美一区| 国产精品乱码人人做人人爱 | 美女视频一区二区三区| 欧美日韩中文一区| 亚洲大型综合色站| 欧美亚洲国产一区在线观看网站 | 91小视频在线| 亚洲精品大片www| 色综合久久六月婷婷中文字幕| 国产精品美女一区二区三区| 99在线精品视频| 亚洲精品欧美激情| 欧美性高清videossexo| 午夜久久久久久| 日韩一区二区免费在线电影| 蜜臀久久99精品久久久久久9| 4438x成人网最大色成网站| 日韩一区精品字幕| 欧美成人在线直播| 激情文学综合插| 国产三级欧美三级| 99久久久国产精品免费蜜臀| 亚洲欧美自拍偷拍| 欧美午夜精品久久久久久孕妇| 亚洲视频图片小说| 欧美视频一区二| 日韩精品电影在线观看| 精品日韩成人av| 国产黄色精品视频| 日韩一区在线播放| 欧美日韩免费高清一区色橹橹| 视频一区欧美精品| 精品免费一区二区三区| 国产成人精品亚洲777人妖| 国产精品成人免费精品自在线观看| 99国产精品一区| 亚洲成人免费看| 精品国产91乱码一区二区三区| 国产不卡在线播放| 亚洲一区二区视频在线观看| 日韩一级成人av| 福利电影一区二区| 亚洲一区电影777| 日韩欧美一区电影| 成人动漫一区二区在线| 亚洲不卡一区二区三区| 2023国产一二三区日本精品2022| 成人毛片老司机大片| 亚洲123区在线观看| 久久婷婷国产综合精品青草| 色婷婷国产精品| 久久99精品一区二区三区| 国产精品久久久久久亚洲伦 | 中文av一区二区| 欧美女孩性生活视频| 激情小说欧美图片| 一级特黄大欧美久久久| 久久久久青草大香线综合精品| 91日韩精品一区| 精品一区二区三区久久| 亚洲色图制服诱惑| 精品99999| 欧美色综合天天久久综合精品| 国产精品一区二区免费不卡| 亚洲综合在线五月| 久久久国产一区二区三区四区小说 | 国产精华液一区二区三区| 亚洲高清在线视频| 欧美激情一区不卡| 欧美一区二区三区思思人| av一区二区三区黑人| 久久精品国产秦先生| 亚洲精品免费播放| 国产嫩草影院久久久久| 日韩欧美激情在线| 欧美系列亚洲系列| www.久久精品| 国产成人av福利| 欧美aaaaa成人免费观看视频| 亚洲精品第一国产综合野| 国产欧美精品区一区二区三区 | 视频一区视频二区中文| 亚洲伦在线观看| 国产日产欧美一区| 欧美r级在线观看| 欧美一区欧美二区| 欧美在线视频不卡| 色综合网站在线| www.亚洲色图.com| 成人在线综合网| 国产另类ts人妖一区二区| 免费人成黄页网站在线一区二区| 亚洲激情在线播放| 国产精品伦理一区二区| 国产欧美精品日韩区二区麻豆天美| 日韩精品在线一区二区| 91精品国模一区二区三区| 欧美色图天堂网| 欧美视频你懂的| 欧美亚洲动漫精品| 色成人在线视频| 色视频一区二区| 欧洲一区二区三区免费视频| 91欧美一区二区| 一本一道久久a久久精品|