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

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

?? s3c2440_camif.c

?? S3C2440 攝像頭linux2.4.18的驅動
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* * Camera interface on S3C2440 * * bushi@mizi.com * *  ToDo: *   - support "V4L2_FLAG_STREAMING" * * $Revision: 1.1.1.1 $ * * This file is subject to the terms and conditions of the GNU General Public * License. See the file COPYING in the main directory of this archive * for more details. *   Oct 25 2003 SeonKon Choi <bushi@mizi.com>    - initial    - support "V4L2_FLAG_READ"     Oct   2003 SW.LEE <hitchcar@sec.samsung.com>      $\> Take care of GPEDAT (Open drain)                       that is why I use write_gpio_bit_clear()      $\> make sure that your board support 24Mhz(or 12Mhz) Camera clock (using a internal clock)      $\> make sure that S3C2440 Evalution Board version is Rev 0.17 or above      $\> make sure that you jummper setting (J12 --5 voltage omnivisoin )      $\> make sure that       your CAMERA modules C3188A  (using a internel clock , do not use extenal clock 12MHz)		                       have no OSC and JP1 connected.      $\> s3c2440_camif.c needs the feedback from external camera modules as like the followings		1. IMGFMT ITU601,656, SWAP Order, need for Reset.. 	 */#include <linux/config.h>#include <linux/module.h>#include <linux/init.h>#include <linux/kernel.h>#include <linux/version.h>#include <linux/wait.h>#include <linux/irq.h>#include <linux/delay.h>#include <linux/sched.h>#include <linux/locks.h>#include <linux/mm.h>#include <linux/slab.h>#include <linux/completion.h>#include "videodev.h"#include <asm/io.h>#include <asm/hardware.h>#include <asm/semaphore.h>#include <asm/uaccess.h>#include <asm/arch/cpu_s3c2440.h>#include "s3c2440_camif.h"#define OV7620_MAX_CLK 24000000 #if DEBUG#define DPRINTK(x...) printk(x)#else#define DPRINTK(x...) /* !!!! */#endif#define CAMERA_RESET() \	{CAM_CTRL |= (1<<19); \	mdelay(50); \	CAM_CTRL &=  ~(1<<19); }enum {	VCTRL_BRIGHTNESS = 0,	VCTRL_REDBALANCE,	VCTRL_BLUEBALANCE,	VCTRL_EXPOSURE,	VCTRL_AUTOWHITEBALANCE,	NUM_OF_HW_CONTROL};static struct v4l2_queryctrl capture_control[NUM_OF_HW_CONTROL] ={	/* id, name, min, max, step, default, type, flags, category, group */	[VCTRL_BRIGHTNESS] =		 {V4L2_CID_BRIGHTNESS, "Brightness", 			0, 255,  1, 128, V4L2_CTRL_TYPE_INTEGER, 0, V4L2_CTRL_CAT_VIDEO},	[VCTRL_REDBALANCE] =		 {V4L2_CID_RED_BALANCE, "RedBalance", 			0, 255,  1, 128, V4L2_CTRL_TYPE_INTEGER, 0, V4L2_CTRL_CAT_VIDEO},	[VCTRL_BLUEBALANCE] =		 {V4L2_CID_BLUE_BALANCE, "BlueBalance", 			0, 255,  1, 128, V4L2_CTRL_TYPE_INTEGER, 0, V4L2_CTRL_CAT_VIDEO},	[VCTRL_EXPOSURE] =		 {V4L2_CID_EXPOSURE, "Exposure", 			0, 255,  1, 128, V4L2_CTRL_TYPE_INTEGER, 0, V4L2_CTRL_CAT_VIDEO},	[VCTRL_AUTOWHITEBALANCE] =		 {V4L2_CID_AUTO_WHITE_BALANCE, "AutoWhiteBalance", 			0, 1,  1, 1, V4L2_CTRL_TYPE_BOOLEAN, 0, V4L2_CTRL_CAT_VIDEO},};typedef int (control_fn) (int in, unsigned int *out);static control_fn *hw_control_func[NUM_OF_HW_CONTROL] = {0,};static struct v4l2_fmtdesc capfmt[] = {	/* index, description, pixel_format, flags, depth, reserved[2] */	{ 		0, {"RGB565"},	   	V4L2_PIX_FMT_RGB565, 0, 16, {0, 0} 	},#ifdef TEST_RGB32	{ 		1, {"RGB32(x-R-G-B)"}, 		V4L2_PIX_FMT_RGB32 , 0, 32, {0, 0} 	},#endif	{ 		2, {"YUV 4:2:0 (planar)"}, 		V4L2_PIX_FMT_YUV420, V4L2_FMT_CS_601YUV, 12, {0, 0} 	},};#define NUM_CAPFMT ARRAY_SIZE(capfmt)static unsigned long camdev_status;static unsigned long *camdev_status_data = &camdev_status;static struct s3c2440_camif_cfg_t s3c2440_camif_cfg;static struct img_buf_t yuv_buf[4];static struct img_buf_t rgb_buf[4];#define YUV_TUPLE_SIZE (640*480*2) // maximum#define YUV_IMG_BUF_SIZE PAGE_ALIGN(YUV_TUPLE_SIZE + PAGE_SIZE)static unsigned char *camif_yuv_buf = NULL;static dma_addr_t camif_yuv_buf_dma = 0;#define RGB_TUPLE_SIZE (640*480*4) // maximum RGB32 ????#define RGB_IMG_BUF_SIZE PAGE_ALIGN(RGB_TUPLE_SIZE + PAGE_SIZE)static unsigned char *camif_rgb_buf = NULL;static dma_addr_t camif_rgb_buf_dma = 0;static struct tq_struct cam_s_task; static DECLARE_MUTEX(cam_flag);static struct s3c2440_camif camif; // v4l2 devstatic void cam_to_yuv420_sw(int frame, struct s3c2440_camif_cfg_t *cfg);static void cam_to_rgb16_sw(int frame, struct s3c2440_camif_cfg_t *cfg);static void cam_to_rgb32_sw(int frame, struct s3c2440_camif_cfg_t *cfg);static int v4l2_cam_open(struct v4l2_device *v, int flags, void **idptr);static void v4l2_cam_close(void *id);static int v4l2_cam_ioctl(void *id, unsigned int cmd, void *arg);//static int v4l2_cam_mmap(void *id, struct vm_area_struct *vma);static long v4l2_cam_read(void *id, char *buf, unsigned long count, int noblock);//static long v4l2_cam_write(void *id, const char *buf, unsigned long count, int noblock);static int v4l2_cam_poll(void *id, struct file *file, poll_table * table);static int v4l2_cam_initdone (struct v4l2_device *v);/*  *  $\> SW.LEE *    *   OV7620_CLK is 12Mhz or 24Mhz *  *   CAMCLK = OV7620_CLK; *   CAMCLK_DIV =  UPLL / ( CAMCLK * 2)  - 1 ;  */static unsigned int get_camera_clk(void){        return OV7620_MAX_CLK;}static void cam_gpio_init(void){	set_gpio_ctrl(GPIO_CAMDATA0);	set_gpio_ctrl(GPIO_CAMDATA1);	set_gpio_ctrl(GPIO_CAMDATA2);	set_gpio_ctrl(GPIO_CAMDATA3);	set_gpio_ctrl(GPIO_CAMDATA4);	set_gpio_ctrl(GPIO_CAMDATA5);	set_gpio_ctrl(GPIO_CAMDATA6);	set_gpio_ctrl(GPIO_CAMDATA7);	set_gpio_ctrl(GPIO_CAMPCLKIN);	set_gpio_ctrl(GPIO_CAMVSYNC);	set_gpio_ctrl(GPIO_CAMHREF);	set_gpio_ctrl(GPIO_CAMPCLKOUT);	set_gpio_ctrl(GPIO_CAMRESET);}static void inline s3c2440_camif_init(void){	unsigned int upll, uclk, camclk,camclk_div;	cam_gpio_init();	camclk = get_camera_clk();	CLKCON |= CLKCON_CAMIF;	/* Supposed that you must set UPLL at first */	UPLLCON = FInsrt(0x38, fPLL_MDIV) | FInsrt(0x02, fPLL_PDIV)		| FInsrt(0x02, fPLL_SDIV);	upll = s3c2440_get_bus_clk(GET_UPLL);	uclk = (CLKDIVN & DIVN_UPLL_EN) ? upll/2 : upll;	printk("CAMERA : UPLL %08d  UCLK %08d CAMCLK %08d \n",upll, uclk, camclk);	camclk_div = upll /( camclk * 2) -1 ;	CAMDIVN = CAMCLK_SET_DIV | (camclk_div & 0xf ) ;	CAMERA_RESET();	mdelay(100);	}static void s3c2440_camif_deinit(void){	CLKCON &= ~CLKCON_CAMIF;	CAM_CTRL = 0;	mdelay(5);}static void cfg_dma_burst(int width){	int y_mburst, y_rburst;	int c_mburst, c_rburst;#if 0		switch (width) {	case 1024:		/* XGA 1024x768 */		y_mburst = c_mburst = 16;		break; 	case 800:		/* SVGA 800x600 */		y_mburst = c_mburst = 16;		break; 	case 640: 		/* VGA 640x480 */		y_mburst = c_mburst = 16;		break;	case 352:		/* CIF 352x288 */		y_mburst = 8;		c_mburst = 4;		break;	case 320:		/* QVGA 320x240 */		y_mburst = c_mburst = 8;		break;	case 176:		/* QCIF 176x144 */		/* fall throu */	default:		y_mburst = c_mburst = 4;		break;	}#endif	y_mburst = c_mburst = 4;	y_rburst = (width / 4) % y_mburst;		/* 4 means basic burst unit */	y_rburst = y_rburst ? y_rburst : y_mburst;	CAM_AYBURST = CAM_BURST_M(y_mburst) | CAM_BURST_R(y_rburst);	DPRINTK("YBURST = %d,%d = 0x%08lx\n", y_mburst, y_rburst			, CAM_BURST_M(y_mburst) | CAM_BURST_R(y_rburst));	c_rburst = (width / 2 / 4) % c_mburst;	c_rburst = c_rburst ? c_rburst : c_mburst;	CAM_ACBBURST = CAM_BURST_M(c_mburst) | CAM_BURST_R(c_rburst);	CAM_ACRBURST = CAM_BURST_M(c_mburst) | CAM_BURST_R(c_rburst);	DPRINTK("CBBURST = %d,%d = 0x%08lx\n", c_mburst, c_rburst			, CAM_BURST_M(c_mburst) | CAM_BURST_R(c_rburst));}static void s3c2440_camif_configure(struct s3c2440_camif_cfg_t *cfg){	int i;	unsigned long adist, awidth;	unsigned long hratio, vratio;	for (i = 0; i < 4; i++) {		yuv_buf[i].buf = camif_yuv_buf;		yuv_buf[i].phys_addr = (unsigned int)camif_yuv_buf_dma;		DPRINTK("yuv_buf[%d] : virt=0x%08lx, phys = 0x%08lx\n",				i, (unsigned long)yuv_buf[i].buf, (unsigned long)yuv_buf[i].phys_addr);		rgb_buf[i].buf = camif_rgb_buf;		rgb_buf[i].phys_addr = (unsigned int)camif_rgb_buf_dma;		DPRINTK("rgb_buf[%d] : virt=0x%08lx, phys = 0x%08lx\n",				i, (unsigned long)rgb_buf[i].buf, (unsigned long)rgb_buf[i].phys_addr);		CAM_STAY(i) = yuv_buf[i].phys_addr;		DPRINTK("STAY%d  = 0x%08x\n", i, yuv_buf[i].phys_addr);		CAM_STACB(i) = yuv_buf[i].phys_addr 				+ cfg->dev->clientfmt.width * cfg->dev->clientfmt.height;		DPRINTK("STACB%d = 0x%08x\n", i, 			yuv_buf[i].phys_addr + cfg->dev->clientfmt.width * cfg->dev->clientfmt.height);		CAM_STACR(i) = yuv_buf[i].phys_addr 				+ cfg->dev->clientfmt.width * cfg->dev->clientfmt.height / 2 * 3;		DPRINTK("STACR%d = 0x%08x\n", i, 			yuv_buf[i].phys_addr + cfg->dev->clientfmt.width * cfg->dev->clientfmt.height / 2 * 3);	}	DPRINTK("CAMIF: src = (%dx%d), dst = (%dx%d)\n",			cfg->src_x, cfg->src_y, cfg->dev->clientfmt.width, cfg->dev->clientfmt.height);	CAM_ASIZE = CAM_SIZE_H(cfg->dev->clientfmt.width) | CAM_SIZE_V(cfg->dev->clientfmt.height);	cfg_dma_burst(cfg->dev->clientfmt.width);	/*	 *      Adist =  ( MemoryBusClk/CameraClk ) * 3 * Width	 *                  * CameraClk = UPLL / [(CAMCLK_DIV + 1) * 2]	 */	adist = (s3c2440_get_bus_clk(GET_HCLK) * 3 * cfg->src_x) / get_camera_clk();						awidth = adist;	CAM_ADISTWIDTH = CAM_DISTWIDTH_D(adist) | CAM_DISTWIDTH_W(awidth);	DPRINTK("HCLK = %ld, pixel_clock = %ld, adist = %ld\n" , 		 s3c2440_get_bus_clk(GET_HCLK) ,  get_camera_clk() , adist);		DPRINTK("CAM_ADISTWIDTH = 0x%08lx\n"			, CAM_DISTWIDTH_D(adist) | CAM_DISTWIDTH_W(awidth));	hratio = (cfg->src_x * 4096) / cfg->dev->clientfmt.width;	vratio = (cfg->src_y * 4096) / cfg->dev->clientfmt.height;	CAM_YRATIO = CAM_RATIO_H(hratio) | CAM_RATIO_V(vratio);	DPRINTK("YRATIO = %ld,%ld = 0x%08lx\n", hratio, vratio			, CAM_RATIO_H(hratio) | CAM_RATIO_V(vratio));	hratio = ((cfg->src_x/2) * 4096) / (cfg->dev->clientfmt.width/2);	vratio = (cfg->src_y * 4096) / (cfg->dev->clientfmt.height/2);	CAM_CRATIO = CAM_RATIO_H(hratio) | CAM_RATIO_V(vratio);	DPRINTK("CRATIO = %ld,%ld = 0x%08lx\n", hratio, vratio			, CAM_RATIO_H(hratio) | CAM_RATIO_V(vratio));	CAM_YORIGINAL = CAM_ORIGINAL_H(cfg->src_x) | CAM_ORIGINAL_V(cfg->src_y);	DPRINTK("YORIGINAL = 0x%08lx\n", 			CAM_ORIGINAL_H(cfg->src_x) | CAM_ORIGINAL_V(cfg->src_y));	CAM_CORIGINAL = CAM_ORIGINAL_H((cfg->src_x/2)) | CAM_ORIGINAL_V(cfg->src_y);	DPRINTK("CORIGINAL = 0x%08lx\n", 			CAM_ORIGINAL_H((cfg->src_x/2)) | CAM_ORIGINAL_V(cfg->src_y));	if (cfg->use_vpost) {			panic("Not Supporting H/W post-processing \n");	} else {		switch (cfg->dev->clientfmt.pixelformat ) {			case V4L2_PIX_FMT_RGB565:				cfg->camif_frame_handler =  cam_to_rgb16_sw;				break;#ifdef TEST_RGB32			case V4L2_PIX_FMT_RGB32:				cfg->camif_frame_handler = cam_to_rgb32_sw;				break;#endif			case V4L2_PIX_FMT_YUV420:				cfg->camif_frame_handler = cam_to_yuv420_sw;				break;			default:				panic("unknown destination type.\n");		}	}	if (!cfg->camif_frame_handler)		panic("\nunknown dst_type.\n");}static void cam_s_task_handler(void * data){	struct s3c2440_camif_cfg_t *cfg = (struct s3c2440_camif_cfg_t *)data;		int frame = (CAM_STAT_FRAME(CAM_RDSTAT) ); // + 3) % 4;//	DPRINTK("frame = %d\n", frame);	cfg->camif_frame_handler(frame, cfg);}static void s3c2440_camif_isr_s(int irq, void *dev_id, struct pt_regs *regs){	schedule_task(&cam_s_task);}#define XLATTABSIZE      256#define MulDiv(x, y, z) ((long)((int) x * (int) y) / (int) z)#define CLIP(x) {if(x<0) x=0;if(x>255) x=255;}#define RED_REGION      0xf800#define GREEN_REGION    0x07e0#define BLUE_REGION     0x001fstatic int XlatY[XLATTABSIZE] = { 0 };static int XlatV_B[XLATTABSIZE] = { 0 };static int XlatV_G[XLATTABSIZE] = { 0 };static int XlatU_G[XLATTABSIZE] = { 0 };static int XlatU_R[XLATTABSIZE] = { 0 };static void __init init_yuvtable (void){	int i, j;	for (i = 0; i < XLATTABSIZE; i++) {		j = min_t(int, 253, max_t(int, 16, i));		// orig: XlatY[i] = (int ) j;		XlatY[i] = j-16;	}	for (i = 0; i < XLATTABSIZE; i++) {		j = min_t(int, 240, max_t(int, 16, i));		j -= 128;		XlatV_B[i] = MulDiv (j, 1000, 564);	/* j*219/126 */		XlatV_G[i] = MulDiv (j, 1100, 3328);		XlatU_G[i] = MulDiv (j, 3100, 4207);		XlatU_R[i] = MulDiv (j, 1000, 713);	}}static void inline yuv_convert_rgb16(unsigned char *rawY, unsigned char *rawU,	  	unsigned char *rawV, unsigned char *rgb, int size){	unsigned short  buf1, buf3;	int   red;	int   blue;	int   green;	unsigned long   cnt;	int    Y, U, V;	unsigned short  data;	unsigned short  data2;	for ( cnt = 0 ; cnt < size; cnt +=2){		buf1 = *(rawY+cnt) & 0xff;  // Y data		buf3 = *(rawY+cnt+1) & 0xff;  // Y data		U = *(rawV+cnt/2) & 0xff;		V = *(rawU+cnt/2) & 0xff;		Y = buf1;		red = XlatY[Y] + XlatU_R[U];		CLIP(red);		green = XlatY[Y] - XlatV_G[V] - XlatU_G[U];		CLIP(green);		blue = XlatY[Y] + XlatV_B[V];		CLIP(blue);		data = ((red << 8) & RED_REGION)				| ((green << 3) & GREEN_REGION)				| (blue >> 3);		Y = buf3;		red = XlatY[Y] + XlatU_R[U];		CLIP(red);		green = XlatY[Y] - XlatV_G[V] - XlatU_G[U];		CLIP(green);		blue = XlatY[Y] + XlatV_B[V];		CLIP(blue);		data2 = ((red << 8) & RED_REGION)				| ((green << 3) & GREEN_REGION)				| (blue >> 3);		*(unsigned short *)(rgb + 2 * cnt) = data;		*(unsigned short *)(rgb + 2 * (cnt + 1))= data2;	}}static void inline yuv_convert_rgb32(unsigned char *rawY, unsigned char *rawU, 		unsigned char *rawV, unsigned char *rgb, int size){	unsigned short  buf1, buf3;	int   red;	int   blue;	int   green;	unsigned long   cnt;	int    Y, U, V;	for ( cnt = 0 ; cnt < size; cnt +=2){		buf1 = *(rawY+cnt) & 0xff;  // Y data		buf3 = *(rawY+cnt+1) & 0xff;  // Y data		U = *(rawV+cnt/2) & 0xff;		V = *(rawU+cnt/2) & 0xff;		Y = buf1;		red = XlatY[Y] + XlatU_R[U];		CLIP(red);		green = XlatY[Y] - XlatV_G[V] - XlatU_G[U];		CLIP(green);		blue = XlatY[Y] + XlatV_B[V];		CLIP(blue);		*(unsigned int*)(rgb) = (red << 16) | (green << 8) | blue;		rgb += 4;		Y = buf3;		red = XlatY[Y] + XlatU_R[U];		CLIP(red);		green = XlatY[Y] - XlatV_G[V] - XlatU_G[U];

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久一卡二卡| 99re热视频这里只精品| 亚洲国产成人一区二区三区| 欧美亚洲综合一区| 国产美女娇喘av呻吟久久| 亚洲午夜在线视频| 国产日产欧美精品一区二区三区| 欧美性猛交xxxx黑人交| 成人性色生活片| 蜜臀av亚洲一区中文字幕| 亚洲欧美日韩国产综合| 久久精品日产第一区二区三区高清版 | 国产欧美精品区一区二区三区| 色婷婷综合久色| 国产91精品精华液一区二区三区| 午夜精品国产更新| 亚洲三级在线观看| 国产亚洲成年网址在线观看| 69堂成人精品免费视频| 一本一本大道香蕉久在线精品| 国产一区二区精品久久99| 日日夜夜免费精品| 亚洲一区二区精品视频| 亚洲日穴在线视频| 国产精品久久久久三级| 国产亚洲一区二区在线观看| 欧美成人伊人久久综合网| 欧美日韩一级二级| 欧美亚洲国产一区二区三区| 99国产精品久| 91视频www| 99麻豆久久久国产精品免费| 成熟亚洲日本毛茸茸凸凹| 国产在线麻豆精品观看| 久久电影网站中文字幕| 另类人妖一区二区av| 免费观看30秒视频久久| 日本午夜精品视频在线观看| 亚洲va在线va天堂| 亚洲1区2区3区4区| 天堂蜜桃91精品| 婷婷国产v国产偷v亚洲高清| 亚洲一区二区三区三| 亚洲成a人在线观看| 亚洲一区二区三区四区不卡| 午夜精品视频在线观看| 亚洲最新在线观看| 午夜欧美在线一二页| 亚洲福利视频三区| 日本大胆欧美人术艺术动态| 日韩电影免费一区| 另类小说图片综合网| 国产毛片精品一区| 99视频国产精品| 91国产免费看| 欧美精品久久一区| 欧美刺激午夜性久久久久久久| 日韩精品在线看片z| 久久夜色精品一区| 国产精品拍天天在线| 亚洲乱码日产精品bd| 亚洲一卡二卡三卡四卡无卡久久| 香蕉久久夜色精品国产使用方法 | 亚洲激情图片qvod| 亚洲电影一区二区三区| 蜜臀va亚洲va欧美va天堂| 国产一区二区三区国产| 91在线精品一区二区三区| 色婷婷激情综合| 欧美一区二区在线免费播放| 久久久影院官网| 一区在线中文字幕| 亚洲成人精品影院| 国产一区在线不卡| 色偷偷88欧美精品久久久| 日韩一区二区视频| 亚洲欧美中日韩| 秋霞影院一区二区| 成人精品高清在线| 欧美日韩一区二区在线观看| 精品国产一区二区亚洲人成毛片| 国产精品美女久久福利网站| 午夜欧美电影在线观看| 高清在线成人网| 欧美另类久久久品| 国产精品久久久久久久午夜片| 亚洲福利国产精品| 成人看片黄a免费看在线| 欧美日韩黄视频| 亚洲精品一区二区三区影院| 亚洲欧美一区二区三区极速播放| 日韩电影免费一区| 色综合久久天天综合网| 精品免费国产一区二区三区四区| 亚洲视频一区在线| 国产美女视频91| 在线不卡欧美精品一区二区三区| 欧美激情综合五月色丁香小说| 亚洲福利视频一区| 91丨porny丨首页| 欧美va亚洲va在线观看蝴蝶网| 悠悠色在线精品| 国产二区国产一区在线观看| 69堂精品视频| 亚洲v精品v日韩v欧美v专区| 91视频xxxx| 日本一二三不卡| 久久99久久精品| 欧美日韩dvd在线观看| 国产精品免费久久久久| 极品少妇xxxx精品少妇| 成人av电影在线观看| 日韩亚洲欧美在线| 香港成人在线视频| 欧美午夜精品久久久久久超碰| 国产精品久久久久三级| 国产精品1区2区| 久久这里只有精品首页| 麻豆视频一区二区| 欧美日本国产视频| 亚洲一区二区综合| 色综合久久88色综合天天免费| 国产清纯白嫩初高生在线观看91 | 亚洲欧美另类图片小说| 国产一二三精品| 精品剧情在线观看| 日韩精品高清不卡| 欧美三级日韩在线| 亚洲一区二区视频在线观看| 日本韩国一区二区三区视频| 亚洲天堂网中文字| 99视频在线精品| 亚洲欧美日韩系列| 99riav一区二区三区| 国产精品久久久久毛片软件| 国产精品一区二区视频| 久久久久久久久岛国免费| 精品亚洲欧美一区| 久久久久久久性| 国产成人精品综合在线观看| 久久久久久久久久看片| 国产不卡免费视频| 国产精品久久久久天堂| 99久久精品免费看国产免费软件| 欧美国产综合色视频| av电影在线观看一区| 亚洲欧洲精品一区二区精品久久久| 粉嫩aⅴ一区二区三区四区五区 | 亚洲人成网站精品片在线观看| 成人国产精品免费观看动漫| 国产女主播一区| 99re热这里只有精品免费视频| 亚洲美女在线一区| 欧美熟乱第一页| 亚洲成国产人片在线观看| 日韩视频一区二区在线观看| 激情欧美日韩一区二区| 久久精品欧美日韩| 9i看片成人免费高清| 亚洲综合视频在线观看| 91精品国产综合久久久久久久 | 日韩一级黄色大片| 国产综合一区二区| 中文字幕一区二区视频| 欧洲一区二区三区在线| 一区二区三区精品在线观看| 欧美一区二区三区男人的天堂| 国内成人精品2018免费看| 国产精品欧美久久久久一区二区| 色噜噜久久综合| 精品一二三四区| 亚洲精品成a人| 日韩欧美在线网站| 丁香啪啪综合成人亚洲小说| 亚洲黄色av一区| 精品久久国产字幕高潮| 91香蕉视频mp4| 久久成人羞羞网站| 中文字幕亚洲区| 欧美一区二区精品久久911| 成人中文字幕在线| 日韩精品视频网站| 中文字幕不卡在线| 777午夜精品免费视频| 床上的激情91.| 欧美aa在线视频| 日韩伦理免费电影| 精品国产1区二区| 欧美午夜免费电影| 成人午夜碰碰视频| 一区二区国产盗摄色噜噜| 欧美电影免费观看高清完整版在线观看 | 国产精品欧美极品| 欧美午夜精品电影| 成人免费视频一区| 青青草97国产精品免费观看 | 国产呦萝稀缺另类资源| 一区二区成人在线| 久久精品亚洲精品国产欧美 | 中文字幕在线观看一区|