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

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

?? v4l2-common.c

?? 電視卡驅動源碼!適用于FI1256/FI1216ME等PHILIPS高頻頭
?? C
字號:
/*
 *	Video for Linux Two
 *
 *	A generic video device interface for the LINUX operating system
 *	using a set of device structures/vectors for low level operations.
 *
 *	This file replaces the videodev.c file that comes with the
 *	regular kernel distribution.
 *
 *	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.
 *
 * Author:	Bill Dirks <bdirks@pacbell.net>
 *		based on code by Alan Cox, <alan@cymru.net>
 *
 */

/*
 * Video capture interface for Linux
 *
 *	A generic video device interface for the LINUX operating system
 *	using a set of device structures/vectors for low level operations.
 *
 *		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.
 *
 * Author:	Alan Cox, <alan@redhat.com>
 *
 * Fixes:
 */

/*
 * Video4linux 1/2 integration by Justin Schoeman
 * <justin@suntiger.ee.up.ac.za>
 * 2.4 PROCFS support ported from 2.4 kernels by 
 *  I馻ki Garc韆 Etxebarria <garetxe@euskalnet.net>
 * Makefile fix by "W. Michael Petullo" <mike@flyn.org>
 * 2.4 devfs support ported from 2.4 kernels by
 *  Dan Merillat <dan@merillat.org>
 * Added Gerd Knorrs v4l1 enhancements (Justin Schoeman)
 */

#include <linux/config.h>
#include <linux/version.h>
#include <linux/module.h>
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/smp_lock.h>
#include <linux/mm.h>
#include <linux/string.h>
#include <linux/errno.h>
#include <asm/uaccess.h>
#include <asm/system.h>
#include <asm/pgtable.h>
#include <asm/io.h>
#include <asm/div64.h>

#ifdef CONFIG_KMOD
#include <linux/kmod.h>
#endif

#if defined(CONFIG_UST) || defined(CONFIG_UST_MODULE)
#include <linux/ust.h>
#endif

#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,71)
# define strlcpy(dest,src,len) strncpy(dest,src,(len)-1)
#endif

#include <linux/videodev.h>

MODULE_AUTHOR("Bill Dirks, Justin Schoeman, Gerd Knorr");
MODULE_DESCRIPTION("misc helper functions for v4l2 device drivers");
MODULE_LICENSE("GPL");

/*
 *
 *	V 4 L 2   D R I V E R   H E L P E R   A P I
 *
 */

/*
 *  Video Standard Operations (contributed by Michael Schimek)
 */

/* This is the recommended method to deal with the framerate fields. More 
   sophisticated drivers will access the fields directly. */
unsigned int
v4l2_video_std_fps(struct v4l2_standard *vs)
{ 
	if (vs->frameperiod.numerator > 0)
		return (((vs->frameperiod.denominator << 8) / 
			 vs->frameperiod.numerator) + 
			(1 << 7)) / (1 << 8);
	return 0;
}

/* Fill in the fields of a v4l2_standard structure according to the
   'id' and 'transmission' parameters.  Returns negative on error.  */
int v4l2_video_std_construct(struct v4l2_standard *vs,
			     int id, char *name)
{
	u32 index = vs->index;

	memset(vs, 0, sizeof(struct v4l2_standard));
	vs->index = index;
	vs->id    = id;
	if (id & (V4L2_STD_NTSC | V4L2_STD_PAL_M)) {
		vs->frameperiod.numerator = 1001;
		vs->frameperiod.denominator = 30000;
		vs->framelines = 525;
	} else {
		vs->frameperiod.numerator = 1;
		vs->frameperiod.denominator = 25;
		vs->framelines = 625;
	}
	strlcpy(vs->name,name,sizeof(vs->name));
	return 0;
}


/* ----------------------------------------------------------------- */
/* priority handling                                                 */

#define V4L2_PRIO_VALID(val) (val == V4L2_PRIORITY_BACKGROUND   || \
			      val == V4L2_PRIORITY_INTERACTIVE  || \
			      val == V4L2_PRIORITY_RECORD)

int v4l2_prio_init(struct v4l2_prio_state *global)
{
	memset(global,0,sizeof(*global));
	return 0;
}
	
int v4l2_prio_change(struct v4l2_prio_state *global, enum v4l2_priority *local,
		     enum v4l2_priority new)
{
	if (!V4L2_PRIO_VALID(new))
		return -EINVAL;
	if (*local == new)
		return 0;

	atomic_inc(&global->prios[new]);
	if (V4L2_PRIO_VALID(*local))
		atomic_dec(&global->prios[*local]);
	*local = new;
	return 0;
}

int v4l2_prio_open(struct v4l2_prio_state *global, enum v4l2_priority *local)
{
	return v4l2_prio_change(global,local,V4L2_PRIORITY_DEFAULT);
}

int v4l2_prio_close(struct v4l2_prio_state *global, enum v4l2_priority *local)
{
	if (V4L2_PRIO_VALID(*local))
		atomic_dec(&global->prios[*local]);
	return 0;
}

enum v4l2_priority v4l2_prio_max(struct v4l2_prio_state *global)
{
	if (atomic_read(&global->prios[V4L2_PRIORITY_RECORD]) > 0)
		return V4L2_PRIORITY_RECORD;
	if (atomic_read(&global->prios[V4L2_PRIORITY_INTERACTIVE]) > 0)
		return V4L2_PRIORITY_INTERACTIVE;
	if (atomic_read(&global->prios[V4L2_PRIORITY_BACKGROUND]) > 0)
		return V4L2_PRIORITY_BACKGROUND;
	return V4L2_PRIORITY_UNSET;
}

int v4l2_prio_check(struct v4l2_prio_state *global, enum v4l2_priority *local)
{
	if (*local < v4l2_prio_max(global))
		return -EBUSY;
	return 0;
}


/* ----------------------------------------------------------------- */
/* some arrays for pretty-printing debug messages                    */

char *v4l2_field_names[] = {
	[V4L2_FIELD_ANY]        = "any",
	[V4L2_FIELD_NONE]       = "none",
	[V4L2_FIELD_TOP]        = "top",
	[V4L2_FIELD_BOTTOM]     = "bottom",
	[V4L2_FIELD_INTERLACED] = "interlaced",
	[V4L2_FIELD_SEQ_TB]     = "seq-tb",
	[V4L2_FIELD_SEQ_BT]     = "seq-bt",
	[V4L2_FIELD_ALTERNATE]  = "alternate",
};

char *v4l2_type_names[] = {
	[V4L2_BUF_TYPE_VIDEO_CAPTURE] = "video-cap",
	[V4L2_BUF_TYPE_VIDEO_OVERLAY] = "video-over",
	[V4L2_BUF_TYPE_VIDEO_OUTPUT]  = "video-out",
	[V4L2_BUF_TYPE_VBI_CAPTURE]   = "vbi-cap",
	[V4L2_BUF_TYPE_VBI_OUTPUT]    = "vbi-out",
};

char *v4l2_ioctl_names[256] = {
#if __GNUC__ >= 3
	[0 ... 255]                      = "UNKNOWN",
#endif
	[_IOC_NR(VIDIOC_QUERYCAP)]       = "VIDIOC_QUERYCAP",
	[_IOC_NR(VIDIOC_RESERVED)]       = "VIDIOC_RESERVED",
	[_IOC_NR(VIDIOC_ENUM_FMT)]       = "VIDIOC_ENUM_FMT",
	[_IOC_NR(VIDIOC_G_FMT)]          = "VIDIOC_G_FMT",
	[_IOC_NR(VIDIOC_S_FMT)]          = "VIDIOC_S_FMT",
#if 0
	[_IOC_NR(VIDIOC_G_COMP)]         = "VIDIOC_G_COMP",
	[_IOC_NR(VIDIOC_S_COMP)]         = "VIDIOC_S_COMP",
#endif
	[_IOC_NR(VIDIOC_REQBUFS)]        = "VIDIOC_REQBUFS",
	[_IOC_NR(VIDIOC_QUERYBUF)]       = "VIDIOC_QUERYBUF",
	[_IOC_NR(VIDIOC_G_FBUF)]         = "VIDIOC_G_FBUF",
	[_IOC_NR(VIDIOC_S_FBUF)]         = "VIDIOC_S_FBUF",
	[_IOC_NR(VIDIOC_OVERLAY)]        = "VIDIOC_OVERLAY",
	[_IOC_NR(VIDIOC_QBUF)]           = "VIDIOC_QBUF",
	[_IOC_NR(VIDIOC_DQBUF)]          = "VIDIOC_DQBUF",
	[_IOC_NR(VIDIOC_STREAMON)]       = "VIDIOC_STREAMON",
	[_IOC_NR(VIDIOC_STREAMOFF)]      = "VIDIOC_STREAMOFF",
	[_IOC_NR(VIDIOC_G_PARM)]         = "VIDIOC_G_PARM",
	[_IOC_NR(VIDIOC_S_PARM)]         = "VIDIOC_S_PARM",
	[_IOC_NR(VIDIOC_G_STD)]          = "VIDIOC_G_STD",
	[_IOC_NR(VIDIOC_S_STD)]          = "VIDIOC_S_STD",
	[_IOC_NR(VIDIOC_ENUMSTD)]        = "VIDIOC_ENUMSTD",
	[_IOC_NR(VIDIOC_ENUMINPUT)]      = "VIDIOC_ENUMINPUT",
	[_IOC_NR(VIDIOC_G_CTRL)]         = "VIDIOC_G_CTRL",
	[_IOC_NR(VIDIOC_S_CTRL)]         = "VIDIOC_S_CTRL",
	[_IOC_NR(VIDIOC_G_TUNER)]        = "VIDIOC_G_TUNER",
	[_IOC_NR(VIDIOC_S_TUNER)]        = "VIDIOC_S_TUNER",
	[_IOC_NR(VIDIOC_G_AUDIO)]        = "VIDIOC_G_AUDIO",
	[_IOC_NR(VIDIOC_S_AUDIO)]        = "VIDIOC_S_AUDIO",
	[_IOC_NR(VIDIOC_QUERYCTRL)]      = "VIDIOC_QUERYCTRL",
	[_IOC_NR(VIDIOC_QUERYMENU)]      = "VIDIOC_QUERYMENU",
	[_IOC_NR(VIDIOC_G_INPUT)]        = "VIDIOC_G_INPUT",
	[_IOC_NR(VIDIOC_S_INPUT)]        = "VIDIOC_S_INPUT",
	[_IOC_NR(VIDIOC_G_OUTPUT)]       = "VIDIOC_G_OUTPUT",
	[_IOC_NR(VIDIOC_S_OUTPUT)]       = "VIDIOC_S_OUTPUT",
	[_IOC_NR(VIDIOC_ENUMOUTPUT)]     = "VIDIOC_ENUMOUTPUT",
	[_IOC_NR(VIDIOC_G_AUDOUT)]       = "VIDIOC_G_AUDOUT",
	[_IOC_NR(VIDIOC_S_AUDOUT)]       = "VIDIOC_S_AUDOUT",
	[_IOC_NR(VIDIOC_G_MODULATOR)]    = "VIDIOC_G_MODULATOR",
	[_IOC_NR(VIDIOC_S_MODULATOR)]    = "VIDIOC_S_MODULATOR",
	[_IOC_NR(VIDIOC_G_FREQUENCY)]    = "VIDIOC_G_FREQUENCY",
	[_IOC_NR(VIDIOC_S_FREQUENCY)]    = "VIDIOC_S_FREQUENCY",
	[_IOC_NR(VIDIOC_CROPCAP)]        = "VIDIOC_CROPCAP",
	[_IOC_NR(VIDIOC_G_CROP)]         = "VIDIOC_G_CROP",
	[_IOC_NR(VIDIOC_S_CROP)]         = "VIDIOC_S_CROP",
	[_IOC_NR(VIDIOC_G_JPEGCOMP)]     = "VIDIOC_G_JPEGCOMP",
	[_IOC_NR(VIDIOC_S_JPEGCOMP)]     = "VIDIOC_S_JPEGCOMP",
	[_IOC_NR(VIDIOC_QUERYSTD)]       = "VIDIOC_QUERYSTD",
	[_IOC_NR(VIDIOC_TRY_FMT)]        = "VIDIOC_TRY_FMT",
};

/* ----------------------------------------------------------------- */

EXPORT_SYMBOL(v4l2_video_std_fps);
EXPORT_SYMBOL(v4l2_video_std_construct);

EXPORT_SYMBOL(v4l2_prio_init);
EXPORT_SYMBOL(v4l2_prio_change);
EXPORT_SYMBOL(v4l2_prio_open);
EXPORT_SYMBOL(v4l2_prio_close);
EXPORT_SYMBOL(v4l2_prio_max);
EXPORT_SYMBOL(v4l2_prio_check);

EXPORT_SYMBOL(v4l2_field_names);
EXPORT_SYMBOL(v4l2_type_names);
EXPORT_SYMBOL(v4l2_ioctl_names);

/*
 * Local variables:
 * c-basic-offset: 8
 * End:
 */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色婷婷综合激情| 美女在线一区二区| 99精品视频一区二区| 亚洲国产精品av| 国产精品123区| 日本一区二区不卡视频| 播五月开心婷婷综合| 国产精品国产三级国产aⅴ原创| 成人av综合在线| 亚洲免费在线观看视频| 欧美亚洲综合色| 日韩中文字幕av电影| 日韩午夜av一区| 激情五月激情综合网| 国产日韩欧美高清| 一本色道久久综合亚洲91| 一区二区三区在线观看国产 | 久久99这里只有精品| 精品成人一区二区| av成人老司机| 亚洲高清中文字幕| 精品国产亚洲在线| 99精品欧美一区| 日本中文字幕一区二区有限公司| 久久亚洲精精品中文字幕早川悠里| 99久免费精品视频在线观看| 亚洲国产乱码最新视频| 精品免费一区二区三区| 成人在线视频一区| 天天av天天翘天天综合网色鬼国产| 欧美男男青年gay1069videost| 国产欧美精品在线观看| 丰满亚洲少妇av| 亚洲乱码国产乱码精品精的特点| 欧美日韩www| 国产一区欧美日韩| 亚洲免费看黄网站| 精品国产一区a| 欧美亚日韩国产aⅴ精品中极品| 激情欧美一区二区| 一区二区在线观看免费| 精品人在线二区三区| 在线观看亚洲a| 国产91精品露脸国语对白| 亚洲成在线观看| 国产校园另类小说区| 67194成人在线观看| av在线不卡电影| 国精产品一区一区三区mba桃花| 亚洲尤物视频在线| 国产精品视频你懂的| 欧美xxxxxxxx| 欧美美女激情18p| 91网站最新网址| 国产福利不卡视频| 免费一级欧美片在线观看| 亚洲欧美视频在线观看| 国产精品欧美久久久久一区二区| 欧美成va人片在线观看| 欧美嫩在线观看| 日本高清视频一区二区| 波多野结衣中文一区| 国产精品正在播放| 蜜桃精品视频在线| 午夜久久福利影院| 亚洲综合男人的天堂| 亚洲欧洲av色图| 国产欧美在线观看一区| 精品粉嫩超白一线天av| 精品国产3级a| 日韩一级二级三级| 欧美乱妇15p| 欧美亚洲国产一卡| 在线免费av一区| 91在线一区二区| 99国产麻豆精品| 丁香网亚洲国际| 成人免费毛片片v| 豆国产96在线|亚洲| 高清不卡在线观看av| 国产一区二三区好的| 国产一区在线不卡| 国产91精品精华液一区二区三区 | 久久久影视传媒| 日韩一区二区三区免费看| 欧美精品久久天天躁| 5566中文字幕一区二区电影| 欧美日韩高清一区| 欧美一区二区不卡视频| 日韩免费观看2025年上映的电影| 日韩视频123| 久久免费视频一区| 国产日韩精品久久久| 国产精品视频麻豆| 亚洲日穴在线视频| 亚洲综合激情另类小说区| 亚洲成人免费视频| 免费成人美女在线观看.| 国产一区二区在线电影| av欧美精品.com| 一本到高清视频免费精品| 欧美亚一区二区| 日韩视频免费直播| 日本一区二区免费在线| 亚洲裸体在线观看| 丝袜国产日韩另类美女| 国产一区二区主播在线| 色国产综合视频| 欧美精品在线视频| 精品成人一区二区三区四区| 亚洲三级视频在线观看| 免费视频最近日韩| av在线播放成人| 欧美一区三区四区| 日本一区二区三区在线观看| 亚洲激情图片一区| 六月婷婷色综合| 99精品热视频| 日韩久久久精品| 中文字幕亚洲欧美在线不卡| 日本网站在线观看一区二区三区| 国产成人aaa| 欧美猛男gaygay网站| 国产精品久久久久9999吃药| 亚洲成人av福利| 成人午夜伦理影院| 制服丝袜日韩国产| 亚洲色图19p| 激情综合网av| 欧美三级视频在线| 中文天堂在线一区| 久久精品国产一区二区三区免费看| 不卡av电影在线播放| 日韩欧美国产不卡| 亚洲激情成人在线| 国产白丝精品91爽爽久久| 777xxx欧美| 亚洲精品精品亚洲| 国产成人免费视频精品含羞草妖精| 欧美日韩国产高清一区二区 | 不卡的看片网站| 精品国产乱子伦一区| 亚洲一区二区三区四区五区中文 | 国产99久久久国产精品潘金网站| 欧美日本一区二区三区| 自拍av一区二区三区| 国产精选一区二区三区| 日韩视频在线你懂得| 亚洲永久精品大片| av在线播放一区二区三区| 国产午夜精品久久久久久免费视| 日韩国产欧美一区二区三区| 色综合久久久久久久| 亚洲国产精品高清| 国产一区二区三区电影在线观看| 制服丝袜亚洲色图| 图片区小说区国产精品视频| 色妹子一区二区| 综合激情网...| 99re热视频精品| 亚洲人精品一区| 99re8在线精品视频免费播放| 久久久精品免费网站| 久久99久久99| 久久亚洲影视婷婷| 国产制服丝袜一区| 日韩欧美国产三级| 精品一区二区三区的国产在线播放 | 国产日韩欧美不卡| 国产精品一区二区不卡| 精品国产髙清在线看国产毛片| 日韩av一区二区三区四区| 欧美一三区三区四区免费在线看| 亚洲福利一二三区| 欧美日韩不卡一区| 理论电影国产精品| 精品国产乱码久久久久久1区2区| 另类的小说在线视频另类成人小视频在线| 9191国产精品| 麻豆精品一二三| 精品国产乱码久久| 成熟亚洲日本毛茸茸凸凹| 中文字幕在线播放不卡一区| 色婷婷综合五月| 亚洲www啪成人一区二区麻豆| 欧美日韩国产成人在线91| 日韩高清不卡一区二区三区| 日韩欧美二区三区| 国产精品综合网| 亚洲日本va在线观看| 欧美视频第二页| 日本v片在线高清不卡在线观看| 日韩欧美国产综合在线一区二区三区 | 欧美视频你懂的| 六月丁香婷婷久久| 国产精品天干天干在线综合| 色呦呦国产精品| 日韩国产欧美一区二区三区| 国产三级精品在线| 日本乱人伦aⅴ精品|