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

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

?? mx27_pp.c

?? LINUX下的ov2640驅(qū)動程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * Copyright 2005-2007 Freescale Semiconductor, Inc. All Rights Reserved. *//* * The code contained herein is licensed under the GNU General Public * License. You may obtain a copy of the GNU General Public License * Version 2 or later at the following locations: * * http://www.opensource.org/licenses/gpl-license.html * http://www.gnu.org/copyleft/gpl.html *//*! * @file mx27_pp.c * * @brief MX27 V4L2 Video Output Driver * * Video4Linux2 Output Device using MX27 eMMA Post-processing functionality. * * @ingroup MXC_V4L2_OUTPUT */#include <linux/kernel.h>#include <linux/string.h>#include <linux/module.h>#include <linux/fb.h>#include <linux/clk.h>#include <linux/interrupt.h>#include <asm/io.h>#include "mx27_pp.h"#include "mxc_v4l2_output.h"#define SCALE_RETRY	32	/* to be more relax, less precise */#define PP_SKIP		1#define PP_TBL_MAX	40static unsigned short scale_tbl[PP_TBL_MAX];static int g_hlen, g_vlen;static emma_pp_cfg g_pp_cfg;static int g_disp_num = 0;static char pp_dev[] = "emma_pp";/*! * @brief PP resizing routines */static int gcd(int x, int y);static int ratio(int x, int y, int *den);static int scale_0d(int k, int coeff, int base, int nxt);static int scale_1d(int inv, int outv, int k);static int scale_1d_smart(int *inv, int *outv, int index);static int scale_2d(emma_pp_scale * sz);static irqreturn_t pp_isr(int irq, void *dev_id);static int set_output_addr(emma_pp_cfg * cfg, vout_data * vout);static int pphw_reset(void);static int pphw_enable(int flag);static int pphw_ptr(emma_pp_cfg * cfg);static int pphw_outptr(emma_pp_cfg * cfg);static int pphw_cfg(emma_pp_cfg * cfg);static int pphw_isr(void);static void pphw_init(void);static void pphw_exit(void);#define PP_DUMP(reg)	pr_debug("%s\t = 0x%08X\n", #reg, __raw_readl(reg))void pp_dump(void){	PP_DUMP(PP_CNTL);	PP_DUMP(PP_INTRCNTL);	PP_DUMP(PP_INTRSTATUS);	PP_DUMP(PP_SOURCE_Y_PTR);	PP_DUMP(PP_SOURCE_CB_PTR);	PP_DUMP(PP_SOURCE_CR_PTR);	PP_DUMP(PP_DEST_RGB_PTR);	PP_DUMP(PP_QUANTIZER_PTR);	PP_DUMP(PP_PROCESS_FRAME_PARA);	PP_DUMP(PP_SOURCE_FRAME_WIDTH);	PP_DUMP(PP_DEST_DISPLAY_WIDTH);	PP_DUMP(PP_DEST_IMAGE_SIZE);	PP_DUMP(PP_DEST_FRAME_FMT_CNTL);	PP_DUMP(PP_RESIZE_INDEX);	PP_DUMP(PP_CSC_COEF_0123);	PP_DUMP(PP_CSC_COEF_4);}static const unsigned char pp_coeftab[] = {	2, 1,	19, 10,	17, 9,	15, 8,	13, 7,	11, 6,	20, 11,	9, 5,	16, 9,	7, 4,	19, 11,	12, 7,	17, 10,	5, 3,	18, 11,	13, 8,	8, 5,	19, 12,	11, 7,	14, 9,	17, 11,	20, 13,	3, 2,	19, 13,	16, 11,	13, 9,	10, 7,	17, 12,	7, 5,	18, 13,	11, 8,	15, 11,	19, 14,	4, 3,	17, 13,	13, 10,	9, 7,	14, 11,	19, 15,	5, 4,	16, 13,	11, 9,	17, 14,	6, 5,	19, 16,	13, 11,	20, 17,	7, 6,	15, 13,	8, 7,	17, 15,	9, 8,	19, 17,	10, 9,	11, 10,	12, 11,	13, 12,	14, 13,	15, 14,	16, 15,	17, 16,	18, 17,	19, 18,	20, 19,	1, 1,	19, 20,	18, 19,	17, 18,	16, 17,	15, 16,	14, 15,	13, 14,	12, 13,	11, 12,	10, 11,	9, 10,	17, 19,	8, 9,	15, 17,	7, 8,	13, 15,	6, 7,	17, 20,	11, 13,	16, 19,	5, 6,	14, 17,	9, 11,	13, 16,	4, 5,	15, 19,	11, 14,	7, 9,	10, 13,	13, 17,	3, 4,	14, 19,	11, 15,	8, 11,	13, 18,	5, 7,	12, 17,	7, 10,	9, 13,	11, 16,	13, 19,	2, 3,	13, 20,	11, 17,	9, 14,	7, 11,	12, 19,	5, 8,	8, 13,	11, 18,	3, 5,	10, 17,	7, 12,	11, 19,	4, 7,	9, 16,	5, 9,	11, 20,	6, 11,	7, 13,	8, 15,	9, 17,	10, 19,	1, 2,	9, 19,	8, 17,	7, 15,	6, 13,	5, 11,	9, 20,	4, 9,	7, 16,	3, 7,	8, 19,	5, 12,	7, 17,	2, 5,	7, 18,	5, 13,	3, 8,	7, 19,	4, 11,	5, 14,	6, 17,	7, 20,	1, 3,	6, 19,	5, 16,	4, 13,	3, 10,	5, 17,	2, 7,	5, 18,	3, 11,	4, 15,	5, 19,	1, 4};/*! * @brief Set PP input address. * @param ptr	The pointer to the Y value of input * @return	Zero on success, others on failure */int pp_ptr(unsigned long ptr){	g_pp_cfg.ptr.y = ptr;	g_pp_cfg.ptr.u = g_pp_cfg.ptr.v = g_pp_cfg.ptr.qp = 0;	return pphw_ptr(&g_pp_cfg);}/*! * @brief Enable or disable PP. * @param flag	Zero to disable PP, others to enable PP * @return	Zero on success, others on failure */int pp_enable(int flag){	return pphw_enable(flag);}/*! * @brief Get the display No. of last completed PP frame. * @return	The display No. of last completed PP frame. */int pp_num_last(void){	return (g_disp_num ? 0 : 1);}/*! * @brief Initialize PP. * @param vout	Pointer to _vout_data structure * @return	Zero on success, others on failure */int pp_init(vout_data * vout){	pphw_init();	pphw_enable(0);	enable_irq(INT_EMMAPP);	return request_irq(INT_EMMAPP, pp_isr, 0, pp_dev, vout);}/*! * @brief Deinitialize PP. * @param vout	Pointer to _vout_data structure */void pp_exit(vout_data * vout){	disable_irq(INT_EMMAPP);	free_irq(INT_EMMAPP, vout);	pphw_enable(0);	pphw_exit();}/*! * @brief Configure PP. * @param vout	Pointer to _vout_data structure * @return	Zero on success, others on failure */int pp_cfg(vout_data * vout){	if (!vout)		return -1;	/* PP accepts YUV420 input only */	if (vout->v2f.fmt.pix.pixelformat != V4L2_PIX_FMT_YUV420) {		pr_debug("unsupported pixel format.\n");		return -1;	}	g_pp_cfg.operation = 0;	memset(g_pp_cfg.csc_table, 0, sizeof(g_pp_cfg.csc_table));	/* Convert output pixel format to PP required format */	switch (vout->v4l2_fb.fmt.pixelformat) {	case V4L2_PIX_FMT_BGR32:		g_pp_cfg.red_width = 8;		g_pp_cfg.green_width = 8;		g_pp_cfg.blue_width = 8;		g_pp_cfg.red_offset = 8;		g_pp_cfg.green_offset = 16;		g_pp_cfg.blue_offset = 24;		g_pp_cfg.rgb_resolution = 32;		break;	case V4L2_PIX_FMT_RGB32:		g_pp_cfg.red_width = 8;		g_pp_cfg.green_width = 8;		g_pp_cfg.blue_width = 8;		g_pp_cfg.red_offset = 24;		g_pp_cfg.green_offset = 16;		g_pp_cfg.blue_offset = 8;		g_pp_cfg.rgb_resolution = 32;		break;	case V4L2_PIX_FMT_YUYV:		g_pp_cfg.red_width = 0;		g_pp_cfg.green_width = 0;		g_pp_cfg.blue_width = 0;		g_pp_cfg.red_offset = 0;		g_pp_cfg.green_offset = 0;		g_pp_cfg.blue_offset = PP_PIX_YUYV;		g_pp_cfg.rgb_resolution = 16;		break;	case V4L2_PIX_FMT_UYVY:		g_pp_cfg.red_width = 0;		g_pp_cfg.green_width = 0;		g_pp_cfg.blue_width = 0;		g_pp_cfg.red_offset = 0;		g_pp_cfg.green_offset = 0;		g_pp_cfg.blue_offset = PP_PIX_UYVY;		g_pp_cfg.rgb_resolution = 16;		break;	case V4L2_PIX_FMT_RGB565:	default:		g_pp_cfg.red_width = 5;		g_pp_cfg.green_width = 6;		g_pp_cfg.blue_width = 5;		g_pp_cfg.red_offset = 11;		g_pp_cfg.green_offset = 5;		g_pp_cfg.blue_offset = 0;		g_pp_cfg.rgb_resolution = 16;		break;	}	if (vout->ipu_buf[0] != -1)		g_pp_cfg.ptr.y =		    (unsigned int)vout->queue_buf_paddr[vout->ipu_buf[0]];	else		g_pp_cfg.ptr.y = 0;	g_pp_cfg.ptr.u = g_pp_cfg.ptr.v = g_pp_cfg.ptr.qp = 0;	g_pp_cfg.dim.in.width = vout->v2f.fmt.pix.width;	g_pp_cfg.dim.in.height = vout->v2f.fmt.pix.height;	g_pp_cfg.dim.out.width = vout->crop_current.width;	g_pp_cfg.dim.out.height = vout->crop_current.height;	g_pp_cfg.dim.num.width = 0;	g_pp_cfg.dim.num.height = 0;	g_pp_cfg.dim.den.width = 0;	g_pp_cfg.dim.den.height = 0;	if (scale_2d(&g_pp_cfg.dim)) {		pr_debug("unsupported resize ratio.\n");		return -1;	}	g_pp_cfg.dim.out.width = vout->crop_current.width;	g_pp_cfg.dim.out.height = vout->crop_current.height;	g_pp_cfg.in_y_stride = 0;	if (set_output_addr(&g_pp_cfg, vout)) {		pr_debug("failed to set pp output address.\n");		return -1;	}	return pphw_cfg(&g_pp_cfg);}irqreturn_t mxc_v4l2out_pp_in_irq_handler(int irq, void *dev_id);/*! * @brief PP IRQ handler. */static irqreturn_t pp_isr(int irq, void *dev_id){	int status;	vout_data *vout = dev_id;	status = pphw_isr();	if ((status & 0x1) == 0) {	/* Not frame complete interrupt */		pr_debug("not pp frame complete interrupt\n");		return IRQ_HANDLED;	}	if (vout->v4l2_fb.flags == V4L2_FBUF_FLAG_OVERLAY) {		g_disp_num = g_disp_num ? 0 : 1;		g_pp_cfg.outptr = (unsigned int)vout->display_bufs[g_disp_num];		pphw_outptr(&g_pp_cfg);	}	return mxc_v4l2out_pp_in_irq_handler(irq, dev_id);}/*! * @brief Set PP output address. * @param cfg	Pointer to emma_pp_cfg structure * @param vout	Pointer to _vout_data structure * @return	Zero on success, others on failure */static int set_output_addr(emma_pp_cfg * cfg, vout_data * vout){	if (vout->v4l2_fb.flags == V4L2_FBUF_FLAG_OVERLAY) {		g_disp_num = 0;		cfg->outptr = (unsigned int)vout->display_bufs[g_disp_num];		cfg->out_stride = vout->crop_current.width;		return 0;	} else {		struct fb_info *fb;		fb = registered_fb[vout->output_fb_num[vout->cur_disp_output]];		if (!fb)			return -1;		cfg->outptr = fb->fix.smem_start;		cfg->outptr += vout->crop_current.top * fb->var.xres_virtual		    * (fb->var.bits_per_pixel >> 3)		    + vout->crop_current.left * (fb->var.bits_per_pixel >> 3);		cfg->out_stride = fb->var.xres_virtual;		return 0;	}}/*! * @brief Get maximum common divisor. * @param x	First input value * @param y	Second input value * @return	Maximum common divisor of x and y */static int gcd(int x, int y){	int k;	if (x < y) {		k = x;		x = y;		y = k;	}	while ((k = x % y)) {		x = y;		y = k;	}	return y;}/*! * @brief Get ratio. * @param x	First input value * @param y	Second input value * @param den	Denominator of the ratio (corresponding to y) * @return	Numerator of the ratio (corresponding to x) */static int ratio(int x, int y, int *den){	int g;	if (!x || !y)		return 0;	g = gcd(x, y);	*den = y / g;	return x / g;}/*! * @brief Build PP coefficient entry * Build one or more coefficient entries for PP coefficient table based * on given coefficient. * * @param k	The index of the coefficient in coefficient table * @param coeff	The weighting coefficient * @param base	The base of the coefficient * @param nxt	Number of pixels to be read * * @return	The index of the next coefficient entry on success *		-1 on failure */static int scale_0d(int k, int coeff, int base, int nxt){	if (k >= PP_TBL_MAX) {		/* no more space in table */		pr_debug("no space in scale table, k = %d\n", k);		return -1;	}	coeff = ((coeff << BC_COEF) + (base >> 1)) / base;	/*	 * Valid values for weighting coefficient are 0, 2 to 30, and 31.	 * A value of 31 is treated as 32 and therefore 31 is an	 * invalid co-efficient.	 */	if (coeff >= SZ_COEF - 1)		coeff--;	else if (coeff == 1)		coeff++;	coeff = coeff << BC_NXT;	if (nxt < SZ_NXT) {		coeff |= nxt;		coeff <<= 1;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91在线视频官网| 国产麻豆一精品一av一免费| 国产精品女主播av| 久久久99久久精品欧美| 欧美一区二区精品在线| 欧美日韩美少妇| 欧美高清www午色夜在线视频| 欧美三区免费完整视频在线观看| 欧美亚洲免费在线一区| 日本电影欧美片| 欧美日韩一区二区三区不卡| 欧美丝袜自拍制服另类| 69p69国产精品| 日韩午夜av一区| 久久影院视频免费| 国产精品美女久久久久久久久久久 | 亚洲精品老司机| 亚洲综合小说图片| 日韩在线卡一卡二| 另类小说综合欧美亚洲| 国产自产高清不卡| 国产91露脸合集magnet | 中文字幕av免费专区久久| 国产日韩视频一区二区三区| 国产精品色在线观看| 亚洲精品成人天堂一二三| 香蕉成人伊视频在线观看| 久久不见久久见免费视频7| 粉嫩aⅴ一区二区三区四区| 91色视频在线| 日韩一区二区电影| 中文字幕一区二| 午夜日韩在线电影| 国产精品原创巨作av| 色中色一区二区| 日韩女优av电影| 亚洲免费看黄网站| 久久99精品国产91久久来源| 91丨porny丨中文| 精品福利一区二区三区免费视频| 国产精品久久久久影院老司| 五月婷婷激情综合| 国产精品天天看| 国产毛片一区二区| www.欧美日韩国产在线| 在线播放91灌醉迷j高跟美女| 久久网这里都是精品| 亚洲午夜一区二区| 国产电影精品久久禁18| 欧美精品久久一区二区三区| 国产精品久久久久久久久搜平片 | 裸体在线国模精品偷拍| 色婷婷久久综合| 国产婷婷精品av在线| 亚洲va中文字幕| 成人av在线资源网站| 欧美精品一区视频| 五月婷婷久久丁香| 在线免费观看日本一区| 欧美国产精品一区二区| 国内精品国产成人国产三级粉色| 欧美久久久久免费| 亚洲一区二区在线观看视频| 99国产欧美久久久精品| 国产亚洲人成网站| 国产伦精品一区二区三区免费| 欧美丰满美乳xxx高潮www| 一区二区三区四区国产精品| 成人黄色网址在线观看| 久久久久成人黄色影片| 极品少妇一区二区三区精品视频| 日韩色视频在线观看| 午夜电影一区二区三区| 欧美日韩一区二区欧美激情| 亚洲高清视频在线| 欧美日韩亚洲丝袜制服| 日韩精品一级二级| 91精品免费观看| 免费成人av资源网| 精品三级在线观看| 风间由美一区二区三区在线观看 | 精品成人一区二区三区| 激情综合色播五月| 久久无码av三级| 成人一区二区三区视频在线观看| 亚洲chinese男男1069| 91福利社在线观看| 亚洲二区视频在线| 欧美一区二区三区免费观看视频| 美女精品一区二区| 久久精品一区二区三区四区| 成人福利在线看| 亚洲午夜精品久久久久久久久| 69堂精品视频| 国产精品12区| 亚洲精品一卡二卡| 欧美精品v国产精品v日韩精品| 毛片av一区二区三区| 国产精品视频你懂的| 欧日韩精品视频| 捆绑紧缚一区二区三区视频 | 91蝌蚪porny九色| 亚洲丶国产丶欧美一区二区三区| 欧美美女bb生活片| 国产乱人伦精品一区二区在线观看 | 91麻豆视频网站| 日韩成人免费看| 国产精品毛片久久久久久| 欧美日韩亚洲丝袜制服| 国产麻豆一精品一av一免费 | 激情五月婷婷综合网| 一色桃子久久精品亚洲| 欧美精品一卡二卡| 欧美视频一二三区| 久久91精品国产91久久小草| 中文字幕日本不卡| 欧美成人vr18sexvr| 色综合久久久网| 精品一区二区久久久| 亚洲女人的天堂| 久久综合国产精品| 欧美三级欧美一级| www.av亚洲| 国产经典欧美精品| 男女男精品网站| 一二三四区精品视频| 中文字幕成人网| 久久久久久久免费视频了| 欧美福利视频导航| 欧美在线999| 成年人网站91| 国产麻豆精品theporn| 男女视频一区二区| 一区二区欧美视频| 亚洲特级片在线| 国产欧美va欧美不卡在线 | 狠狠久久亚洲欧美| 石原莉奈一区二区三区在线观看| 亚洲视频在线观看三级| 国产日韩成人精品| 久久久久久久综合| 精品理论电影在线观看| 欧美一区二区视频在线观看2020| 色噜噜狠狠成人网p站| 99久免费精品视频在线观看| 国产九色sp调教91| 国产不卡视频在线播放| 国产一区999| 成人性视频免费网站| 国产电影一区在线| 成人在线视频一区二区| 国产mv日韩mv欧美| 国产精品99久久久久| 盗摄精品av一区二区三区| 豆国产96在线|亚洲| 精品一区二区三区的国产在线播放| 日本午夜一本久久久综合| 亚洲高清免费观看| 午夜精品一区二区三区三上悠亚| 亚洲一二三级电影| 亚洲123区在线观看| 免费观看日韩av| 国产精品香蕉一区二区三区| 国产成人无遮挡在线视频| 国产一二精品视频| 福利电影一区二区三区| 91免费版在线看| 色综合亚洲欧洲| 成人午夜激情在线| 国产成人精品三级| 99视频有精品| 欧美性感一区二区三区| 欧美一二三四区在线| 久久人人超碰精品| 中文字幕在线不卡| 亚洲国产aⅴ天堂久久| 久久超碰97中文字幕| www.欧美日韩| 6080国产精品一区二区| 久久久久久久久蜜桃| 中文字幕亚洲综合久久菠萝蜜| 亚洲高清不卡在线| 国产一区二区美女诱惑| 色网综合在线观看| 91精品国产综合久久精品app| 久久人人97超碰com| 亚洲最大的成人av| 激情综合五月天| 色吊一区二区三区| 日韩欧美电影一区| 欧美性猛交一区二区三区精品| 欧美日韩一区二区三区免费看| 精品卡一卡二卡三卡四在线| 久久天堂av综合合色蜜桃网| 欧美精品一区二区三区久久久| 一色屋精品亚洲香蕉网站| 亚洲福利一区二区三区| 风间由美一区二区av101| 日韩三区在线观看| 亚洲女同一区二区|