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

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

?? graphic_loader.c.svn-base

?? sigmadesign smp8623 gui source code ,bingo
?? SVN-BASE
?? 第 1 頁 / 共 4 頁
字號:
/* * * Copyright (c) Sigma Designs, Inc. 2004. All rights reserved. * *//**	@file graphic_loader.c	@brief library to load bitmaps (bmp, png, jpg)	@author Raul Chirinos*/#define ALLOW_OS_CODE#include "../include/graphic_loader.h"#include "../include/SigmaOSD1_18x23.h"#include "../include/SigmaOSD1_27x36.h"//#ifdef GUI_REFID_2//#include "../include/Font_Ref2.h"//#endif#include "rmcore/include/rmcore.h"#include "rmlibcw/include/rmlibcw.h"#include <time.h>//#include <sys/queue.h>static RMdrawBuffer g_BaseBuffer;LIST_HEAD(listhead, entry) cache;LIST_HEAD(listheadLRU, entryLRU) lru;typedef struct entry {	RMuint32 begin;	RMuint32 end;	RMuint32 size;	RMbool	 freeBlock;	RMbool 	 locked;	LIST_ENTRY(entry) entries;}entry;typedef struct entryLRU {	entry* item;//	time_t ctime;	LIST_ENTRY(entryLRU) entries;}entryLRU;#define TILESIZE 16384extern RMbitmapdata g_bitmaps[MAX_BITMAPS];// osd surface size defaultsstatic RMuint32 g_OSDwidth = 720;#ifdef GUI_REFID_2static RMuint32 g_OSDheight = 576;#elsestatic RMuint32 g_OSDheight = 480;#endifextern JSAMPLE * image_buffer;	// Points to large array of R,G,B-order dataextern int image_height;	// Number of rows in imageextern int image_width;		// Number of columns in image#define LOBYTE(w) ((RMuint8)(w))#define HIBYTE(w) ((RMuint8)(((RMuint16)(w) >> 8) & 0xff))RMuint16 rev16(RMuint16 n);static int interlacedOffset[] = { 0, 4, 2, 1 };static int interlacedJumps[] = { 8, 8, 4, 2 };// load infos from coreheader bitmap filesRMbool load_coreheader_data(FILE* fFile, RMbitmapdata *pBmpData, RMBitmapCoreHeader* pInfo);// load infos from infoheader bitmap filesRMstatus load_infoheader_data(struct RUA* pRua, FILE* fFile,  RMbitmapdata *pBmpData, RMBitmapInfoHeader* pInfo, RMuint32 *bmpsize);// compute the padding (uiWidthLenInBytes) to BMP_DATA_PADDINGRMstatus compute_padding(struct tagRMBitmap *ptgBitmap);// transform a bitmap data array (beginning at the left bottom corner) into// a regular data array (beginning at the left top corner)RMstatus change_origin(struct tagRMBitmap *ptgBitmap);// calculate scaling factor so image fits in osd surfaceRMuint8 calculate_jpeg_denom(RMuint32 width, RMuint32 height, RMuint32 target_width, RMuint32 target_height);RMFont *PredefinedFonts[PREDEFINED_FONTS] ={	&font_SigmaOSD1_18x23,#ifdef GUI_REFID_2	&font_SigmaOSD1_27x36,	&font_Ref2_1#else	&font_SigmaOSD1_27x36	//&font_KiSS_Cinea_18#endif};struct my_error_mgr { 	struct jpeg_error_mgr pub;	// "public" fields 	jmp_buf setjmp_buffer;	// for return to caller};typedef struct my_error_mgr * my_error_ptr;// Here's the routine that will replace the standard error_exit method:METHODDEF(void) my_error_exit (j_common_ptr cinfo){	// cinfo->err really points to a my_error_mgr struct, so coerce pointer	my_error_ptr myerr = (my_error_ptr) cinfo->err;	// Always display the message	// We could postpone this until after returning, if we chose	(*cinfo->err->output_message) (cinfo);	// Return control to the setjmp point	longjmp(myerr->setjmp_buffer, 1);}void SetOsdSurfaceSize(RMuint32 width, RMuint32 height){	g_OSDwidth = width;	g_OSDheight = height;}RMuint8 calculate_jpeg_denom(	RMuint32 width,	RMuint32 height,	RMuint32 target_width,	RMuint32 target_height){	if(width < target_width && height < target_height)		return 1;	if((width / 2 < target_width) && (height / 2 < target_height))		return 2;	if((width / 4 < target_width) && (height / 4 < target_height))		return 4;	if((width / 8 < target_width) && (height / 8 < target_height))		return 8;	return 0;}RMuint16 rev16(RMuint16 n){	RMuint16 ret = 0;	RMuint8 i;	for(i = 0; i < 16; i++){		ret = (ret << 1) | (n & 1);		n = n >> 1;	}	return ret;}RMbool isBitmap(RMascii *path){	RMascii buf[BMP_BYTES_TO_CHECK];	FILE *fp;	// Open the prospective BITMAP file	if ((fp = fopen(path, "rb")) == NULL){		return FALSE;	}	// Read in some of the signature bytes	if (fread(buf, 1, BMP_BYTES_TO_CHECK, fp) != BMP_BYTES_TO_CHECK)      		return FALSE;	// Compare the first PNG_BYTES_TO_CHECK bytes of the signature.entry      	//	Return nonzero (true) if they match	fclose(fp);	return(buf[0] == 'B' && buf[1] == 'M');}RMstatus load_bitmap(	struct RUA* pRua,	RMbitmapdata *pBmpData,	RMuint32 *bmpsize){	FILE *fFile;	RMuint32 ui32Dummy;	RMBitmapFileHeader 	bmpFileHeader;	RMBitmapInfoHeader	bmpInfoHeader;	RMBitmapCoreHeader	bmpCoreHeader;	enum tagBitmapType eBitmapType;	pBmpData->bmp.pData = NULL;	RMMemset(pBmpData->bmp.palette, 0, sizeof(pBmpData->bmp.palette));	// open the file	if ((fFile = fopen(pBmpData->path,"r")) == NULL){		fprintf(stderr, "GFXLIB: Error opening file %s.\n", pBmpData->path);		return RM_ERROR;	}	// save the bitmap header	fread(&bmpFileHeader, 1, RMBITMAPFILEHEADER_REALSIZE, fFile);	if((((RMuint8*)&(bmpFileHeader.bfType))[0] != 'B') ||		(((RMuint8*)&(bmpFileHeader.bfType))[1] != 'M')){	//	fprintf(stderr, "%s is not a valid bitmap file.\n", pBmpData->path);		fclose(fFile);		return RM_ERROR;	}	// now we reading the next dword to know if we have a RMBitmapInfoHeader	// or a RMBitmapCoreHeader	if(fread(&ui32Dummy, 1, sizeof(RMuint32), fFile) != sizeof(RMuint32)){		//fprintf(stderr, "End of file %s too soon !.\n", pBmpData->path);		fclose(fFile);		return RM_ERROR;	}	switch(((RMuint8*)&ui32Dummy)[0]){	case RMBITMAPCOREHEADER_REALSIZE : // a RMBitmapCoreHeader struct		// copy the RMuint32 read just before...		RMMemcpy(&bmpCoreHeader, &ui32Dummy, sizeof(RMuint32));		// and the remaining bytes		fread((RMuint8*)&bmpCoreHeader + sizeof(RMuint32), 1,			RMBITMAPCOREHEADER_REALSIZE - sizeof(RMuint32), fFile);		eBitmapType = BMP_TYPE_COREHEADER;		pBmpData->bmp.uiWidth = bmpCoreHeader.bcWidth;		pBmpData->bmp.uiHeight = bmpCoreHeader.bcHeight;		pBmpData->bmp.uiNbBitPerPixel = bmpCoreHeader.bcBitCount;		break;	case RMBITMAPINFOHEADER_REALSIZE : // a BITMAPINFOHEADER struct		// copy the RMuint32 read just before...		RMMemcpy(&bmpInfoHeader, &ui32Dummy, sizeof(RMuint32));		// and the remaining bytes		fread((RMuint8*)&bmpInfoHeader + sizeof(RMuint32), 1,			RMBITMAPINFOHEADER_REALSIZE - sizeof(RMuint32), fFile);		eBitmapType = BMP_TYPE_INFOHEADER;		pBmpData->bmp.uiWidth = bmpInfoHeader.biWidth;		pBmpData->bmp.uiHeight = bmpInfoHeader.biHeight;		pBmpData->bmp.uiNbBitPerPixel = bmpInfoHeader.biBitCount;		// check the compression format		switch(bmpInfoHeader.biCompression)		{		case BMP_PACK_RGB : // no compression, ok			break;		case BMP_PACK_RLE4 : // compression, not handled for the moment			//fprintf(stderr, "The file %s is RLE4 compressed, aborting bitmap loading.\n", pBmpData->path);			fclose(fFile);			return RM_ERROR;			break;		case BMP_PACK_RLE8 : // compression, not handled for the moment			//fprintf(stderr, "The file %s is RLE8 compressed, aborting bitmap loading.\n", pBmpData->path);			fclose(fFile);			return RM_ERROR;			break;		default :			//fprintf(stderr, "The file %s have an unknown compression format.\n", pBmpData->path);			fclose(fFile);			return RM_ERROR;			break;		}		break;	default :		//fprintf(stderr, "The file %s have an unknown sub header.\n", pBmpData->path);		fclose(fFile);		return RM_ERROR;		break;	}	switch(eBitmapType){	case BMP_TYPE_COREHEADER:		if(!load_coreheader_data(fFile, pBmpData, &bmpCoreHeader)){			//fprintf(stderr, "Error 1 while loading data in file %s.\n", pBmpData->path);			fclose(fFile);			return RM_ERROR;		}		break;	case BMP_TYPE_INFOHEADER:		if(RMFAILED(load_infoheader_data(pRua, fFile, pBmpData, &bmpInfoHeader, bmpsize))){			//fprintf(stderr, "Error 2 while loading data in file %s.\n", pBmpData->path);			fclose(fFile);			return RM_ERROR;		}		break;	default:		// impossible case but...		//fprintf(stderr, "Unknown bitmap type in file %s ?????\n", pBmpData->path);		fclose(fFile);		return RM_ERROR;		break;	}	fclose(fFile);	return RM_OK;}RMbool load_coreheader_data(	FILE* fFile,	RMbitmapdata *pBmpData,	RMBitmapCoreHeader* pInfo){	//fprintf(stderr, "This type of bmp file is not handled for the moment, sorry...\n");	return FALSE;}RMstatus load_infoheader_data(	struct RUA* pRua,	FILE* fp,	RMbitmapdata *pBmpData,	RMBitmapInfoHeader* pInfo,	RMuint32 *bmpsize){	RMuint32 datasize;	RMuint32 ui32AllocSizePalette;	RMuint32 to32bpp;	RMuint8 *temp;	RMuint32 i, j;	RMdrawBuffer bmpbuffer;	RMstatus status;	RMuint32 row, height, width;	RMuint32 dataline;	RMuint32 databyte;	if(pInfo->biClrUsed == 0){		if(pBmpData->bmp.uiNbBitPerPixel != BMP_BPP_24)			ui32AllocSizePalette = sizeof(struct tagRMRGBQuad) * (1 << pBmpData->bmp.uiNbBitPerPixel);		else			ui32AllocSizePalette = pInfo->biClrUsed;	}	else{		if(pBmpData->bmp.uiNbBitPerPixel != BMP_BPP_24)			ui32AllocSizePalette = sizeof(struct tagRMRGBQuad) * pInfo->biClrUsed;		else			ui32AllocSizePalette = pInfo->biClrUsed;	}	// read LUT	ui32AllocSizePalette = fread(pBmpData->bmp.palette, 1, ui32AllocSizePalette, fp);	pBmpData->bmp.uiPaletteSize = ui32AllocSizePalette;	to32bpp = (pBmpData->bmp.uiNbBitPerPixel == BMP_BPP_24);	if(pInfo->biWidth > g_OSDwidth || pInfo->biHeight > g_OSDheight){		fprintf(stderr, "GFXLIB: BMP MAY EXCEED OSD SURFACE SIZE\n");		//return RM_ERROR;	}	if(pBmpData->bmp.uiNbBitPerPixel == 1)		datasize = (pInfo->biWidth * pInfo->biHeight) / 8;	else if(pBmpData->bmp.uiNbBitPerPixel >= 8)		datasize = pInfo->biWidth * pInfo->biHeight * (pBmpData->bmp.uiNbBitPerPixel / 8);	else{		fprintf(stderr, "GFXLIB: UNSUPPORTED BMP!!!!!!!!\n");		// close the file		return RM_ERROR;	}	if(to32bpp){		datasize += pInfo->biWidth * pInfo->biHeight;	}	// adjust to 32bit	datasize = datasize + datasize % 4;	*bmpsize = datasize;	status = AllocateBuffer(&bmpbuffer, datasize, FALSE);	if(RMFAILED(status)){		fprintf(stderr, "GFXLIB: NOT ENOUGH DRAM TO ALLOCATE BMP!!!!!!!!\n");		// close the file		return RM_FATALOUTOFMEMORY;	}	pBmpData->pBmpAddr = bmpbuffer.baseAddr;	pBmpData->bmp.pData = bmpbuffer.pMappedAddr;	pBmpData->bmp.uiDataSize = datasize;	RMMemset(pBmpData->bmp.pData, 0xff, pBmpData->bmp.uiDataSize);	compute_padding(&pBmpData->bmp);	temp = (RMuint8*) MALLOC(pBmpData->bmp.uiWidthLenInBytes);	if(temp == NULL)		return RM_ERROR;	width = pInfo->biWidth;	height = pInfo->biHeight;	RMMemset(temp, 0xff, datasize / height);	dataline = to32bpp ? width * 3 : pBmpData->bmp.uiWidthLenInBytes;	for (row = 0; row < height; row++){		fread(temp, 1, dataline, fp);		if(to32bpp){	// 24 to 32 bit			// now make it 32 bit, copy and flip it			for(i = 0, j = 0; i < 4 * width; i++){				if((i + 1) % 4 != 0)					pBmpData->bmp.pData[i + (height - row - 1) * 4 * width]  = temp[j++];			}		}		else{			// copy and flip it			for(i = 0, j = 0; i < dataline; i++){				databyte = i + (height - row - 1) * dataline;				pBmpData->bmp.pData[databyte]  = temp[j++];			}		}	}	RFREE(temp);	return RM_OK;}RMstatus compute_padding(struct tagRMBitmap *ptgBitmap){	switch(ptgBitmap->uiNbBitPerPixel){	case 1 : case 2 : case 4 :		// padding to the RMuint32 value		ptgBitmap->uiWidthLenInBytes =			((ptgBitmap->uiWidth + BMP_DATA_PADDING * (8 / ptgBitmap->uiNbBitPerPixel) - 1) /			(BMP_DATA_PADDING * (8 / ptgBitmap->uiNbBitPerPixel))) * BMP_DATA_PADDING;		break;	case 8 : case 16 :		// padding to the RMuint32 value		ptgBitmap->uiWidthLenInBytes = (((ptgBitmap->uiWidth * (ptgBitmap->uiNbBitPerPixel / 8)) +			BMP_DATA_PADDING - 1) / BMP_DATA_PADDING) * BMP_DATA_PADDING;		break;	case 24 :	// this should be in the case above but is here because it is transformed to 32 bit	case 32 :		// already padded		ptgBitmap->uiWidthLenInBytes = ptgBitmap->uiWidth * 4;		break;	default :		//printf("Unable to pad data for that kind of bpp : %d\n", ptgBitmap->uiNbBitPerPixel);		return RM_ERROR;	}	return RM_OK;}RMstatus change_origin(struct tagRMBitmap *ptgBitmap){	RMuint8* pTmpArray;	RMuint32 uiByteJump;	RMuint32 uiSrcOffset;	RMuint32 uiDestOffset;	RMuint32 i;	RMstatus bReturnedValue = RM_OK;	pTmpArray = (RMuint8*) MALLOC (ptgBitmap->uiDataSize);	if(pTmpArray == NULL)		return RM_ERROR;	switch(ptgBitmap->uiNbBitPerPixel){	case BMP_BPP_1 : case 2 : case BMP_BPP_4 : case BMP_BPP_8 : case BMP_BPP_24 : case 32 :		uiByteJump = ptgBitmap->uiWidthLenInBytes;		uiSrcOffset = uiByteJump * (ptgBitmap->uiHeight - 1);		uiDestOffset = 0;		for(i = 0; i < ptgBitmap->uiHeight; i++)		{			RMMemcpy(&pTmpArray[uiDestOffset], &ptgBitmap->pData[uiSrcOffset], uiByteJump);			uiSrcOffset -= uiByteJump;			uiDestOffset += uiByteJump;		}		break;	default :	//	fprintf(stderr, "Unknown bpp.\n");		return RM_ERROR;		break;	}	if(ptgBitmap->pData != NULL){		RFREE(ptgBitmap->pData);		ptgBitmap->pData = pTmpArray;	}	return bReturnedValue;}RMstatus transform_data_to_match_gfxacc(struct tagRMBitmap *ptgBitmap){	RMuint32 i;	if(RMFAILED(change_origin(ptgBitmap)))		return RM_ERROR;	switch(ptgBitmap->uiNbBitPerPixel){	case BMP_BPP_1:		// switch the MSB's and the LSB's of each bytes in a BITMAP's structure data array,		// cause the graphic accelerator of mambo counts the bits in a byte like this :		//					7 6 5 4 3 2 1 0		// and the bits in a bitmap are like this :		//					0 1 2 3 4 5 6 7		for(i=0 ; i<ptgBitmap->uiDataSize ; i++)		{			ptgBitmap->pData[i] =				((ptgBitmap->pData[i] & (1 << 0)) << 7) |				((ptgBitmap->pData[i] & (1 << 1)) << 5) |				((ptgBitmap->pData[i] & (1 << 2)) << 3) |				((ptgBitmap->pData[i] & (1 << 3)) << 1) |				((ptgBitmap->pData[i] & (1 << 4)) >> 1) |				((ptgBitmap->pData[i] & (1 << 5)) >> 3) |				((ptgBitmap->pData[i] & (1 << 6)) >> 5) |				((ptgBitmap->pData[i] & (1 << 7)) >> 7);		}		return RM_OK;		break;	case 2 :		// switch the MSB's and the LSB's of each bytes in a BITMAP's structure data array,		//	cause the graphic accelerator of mambo counts the bits in a byte like this :		//				3 3 2 2 1 1 0 0		//	and the bits in a bitmap are like this :		//				0 0 1 1 2 2 3 3

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产日韩a在线播放| 久久精品国产77777蜜臀| 一区二区在线电影| 精品一区精品二区高清| 一本大道久久a久久综合婷婷| 欧美性大战久久久久久久 | 成人黄色一级视频| 欧美日韩精品一区二区三区蜜桃| 久久综合九色综合97_久久久| 一区二区三区四区蜜桃| 国产精品一区二区男女羞羞无遮挡| 一本色道久久加勒比精品| 国产亚洲欧洲997久久综合 | 国产精品国产自产拍在线| 麻豆精品在线视频| 91精品在线观看入口| 欧美成人aa大片| 视频一区二区三区入口| 精品亚洲免费视频| 91精品福利在线| 欧美精品一区男女天堂| 日韩在线卡一卡二| 在线亚洲一区二区| 综合激情成人伊人| 国产99久久久久久免费看农村| 91精品国产综合久久久久久| 亚洲少妇中出一区| av电影一区二区| 亚洲国产精品v| 成人午夜激情视频| 国产清纯美女被跳蛋高潮一区二区久久w| 亚洲a一区二区| 欧美色中文字幕| 亚洲综合一区在线| 色8久久人人97超碰香蕉987| 中文字幕一区二区三区蜜月| 成人一区二区三区| 国产精品午夜在线| 不卡的电影网站| 国产精品久久午夜夜伦鲁鲁| 成人福利视频在线| 亚洲免费观看高清完整版在线 | 日本亚洲免费观看| 91精品在线免费| 经典三级视频一区| 国产三级久久久| 成人免费av网站| 亚洲欧美另类小说| 欧美日韩视频专区在线播放| 日产国产欧美视频一区精品| 欧美一级精品在线| 国内精品免费**视频| 欧美韩国日本不卡| 91在线视频官网| 亚洲福利视频三区| 日韩精品资源二区在线| 国产精品一二三| 亚洲三级在线观看| 欧美猛男超大videosgay| 日韩av网站免费在线| 久久综合色婷婷| 99久久婷婷国产综合精品电影| 国产亚洲一区二区三区四区 | 粉嫩一区二区三区在线看| 久久精品综合网| 91片在线免费观看| 爽好多水快深点欧美视频| 日韩免费一区二区三区在线播放| 国产精品自拍在线| 亚洲九九爱视频| 精品人伦一区二区色婷婷| 成人黄色软件下载| 视频一区欧美精品| 国产精品国产三级国产aⅴ原创| 欧美亚洲一区三区| 激情欧美一区二区三区在线观看| 亚洲天堂成人在线观看| 91精品国产综合久久精品性色| 国产成a人无v码亚洲福利| 一区二区欧美视频| 国产无一区二区| 欧美巨大另类极品videosbest | 亚洲视频狠狠干| 欧美一级专区免费大片| 成人免费毛片嘿嘿连载视频| 香蕉久久夜色精品国产使用方法| 久久久久久电影| 欧美日韩激情一区二区三区| 成人性生交大片| 精品一区二区三区欧美| 一区二区三区在线观看网站| 久久久精品2019中文字幕之3| 欧美精选在线播放| 91视视频在线直接观看在线看网页在线看| 日韩电影免费一区| 亚洲欧美色综合| 国产午夜精品福利| 精品国产乱码久久久久久牛牛 | 日韩和欧美的一区| 亚洲人精品一区| 国产欧美综合色| 精品国产3级a| 欧美一级免费观看| 7777精品伊人久久久大香线蕉完整版| 99免费精品在线观看| 国产不卡视频一区二区三区| 蜜桃av一区二区| 日韩中文字幕区一区有砖一区| 亚洲女人的天堂| 亚洲摸摸操操av| 亚洲人成精品久久久久| 国产精品久久久久影院老司| 久久久久久久一区| 久久久久亚洲蜜桃| 国产亚洲欧美一区在线观看| 久久影院午夜论| 久久一区二区视频| 久久精品亚洲国产奇米99| 精品播放一区二区| 久久久蜜桃精品| 国产精品视频线看| 中文字幕一区二区三区在线观看| 亚洲国产精品成人综合 | 成人自拍视频在线观看| 国产麻豆9l精品三级站| 国产不卡视频在线观看| 成人黄色777网| 成人高清视频在线| 久久99国产乱子伦精品免费| 成人理论电影网| 国产欧美一区二区精品忘忧草| 国产精品亚洲午夜一区二区三区| 国产精品一品二品| 成人午夜视频网站| 色婷婷国产精品| 91超碰这里只有精品国产| 日韩视频123| 欧美国产精品一区二区| 中文字幕五月欧美| 亚洲国产色一区| 捆绑调教一区二区三区| 国产一区在线观看麻豆| 成人免费看视频| 一本大道久久精品懂色aⅴ| 欧美美女黄视频| 国产日韩欧美激情| 亚洲黄色小视频| 蜜乳av一区二区| 国产福利一区二区| 91国内精品野花午夜精品| 这里是久久伊人| 国产精品色一区二区三区| 一区二区在线看| 久久99国产精品成人| aaa亚洲精品| 制服丝袜成人动漫| 中日韩免费视频中文字幕| 一区二区三区欧美久久| 日韩在线一区二区| 成人免费视频app| 日韩一区和二区| 亚洲男人天堂一区| 精品一区二区三区在线播放视频| 99精品国产视频| 欧美变态口味重另类| 一区二区三区在线播| 精品亚洲成a人在线观看| 91麻豆文化传媒在线观看| 日韩欧美一区二区在线视频| 成人免费在线视频| 麻豆精品久久精品色综合| 99精品欧美一区二区蜜桃免费| 日韩精品一区二区三区swag | www.亚洲国产| 日韩免费看的电影| 亚洲一级二级在线| 成人三级在线视频| 久久免费电影网| 麻豆精品久久久| 678五月天丁香亚洲综合网| 樱桃国产成人精品视频| 国产高清亚洲一区| 日韩一区二区三区精品视频| 亚洲一区二区视频| 99麻豆久久久国产精品免费优播| 久久久午夜精品| 久久超级碰视频| 日韩一区二区视频| 亚洲h精品动漫在线观看| 色综合久久久久网| 国产精品青草综合久久久久99| 开心九九激情九九欧美日韩精美视频电影| 色综合激情久久| 亚洲美腿欧美偷拍| 99在线精品免费| 国产欧美中文在线| 国产精品一区不卡| 亚洲国产精品99久久久久久久久| 国产一区二区影院| 国产视频一区二区三区在线观看|