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

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

?? plugin_ssim.c

?? 從FFMPEG轉換而來的H264解碼程序,VC下編譯..
?? C
字號:
/*****************************************************************************
 *
 *  XVID MPEG-4 VIDEO CODEC
 *  - SSIM plugin: computes the SSIM metric  -
 *
 *  Copyright(C) 2005 Johannes Reinhardt <Johannes.Reinhardt@gmx.de>
 *
 *  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.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY ; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program ; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 *
 *
 *
 ****************************************************************************/

#include <malloc.h>
#include <stdio.h>
#include <math.h>
#include "../portab.h"
#include "../xvid.h"
#include "plugin_ssim.h"
#include "../utils/emms.h"

/* needed for visualisation of the error map with X
 display.h borrowed from x264
#include "display.h"*/

typedef struct framestat_t framestat_t;

/*dev 1.0 gaussian weighting. the weight for the pixel x,y is w(x)*w(y)*/
static float mask8[8] = {
	0.0069815, 0.1402264, 1.0361408, 2.8165226, 
	2.8165226, 1.0361408, 0.1402264, 0.0069815
};

/* integer version. Norm: coeffs sums up to 4096.
  Define USE_INT_GAUSSIAN to use it as replacement to float version */

/* #define USE_INT_GAUSSIAN */
static const uint16_t imask8[8] = {
  4, 72, 530, 1442, 1442, 530, 72, 4
};
#define GACCUM(X)  ( ((X)+(1<<11)) >> 12 )


struct framestat_t{
	int type;
	int quant;
	float ssim_min;
	float ssim_max;
	float ssim_avg;
	framestat_t* next;
};


typedef int (*lumfunc)(uint8_t* ptr, int stride);
typedef void (*csfunc)(uint8_t* ptro, uint8_t* ptrc, int stride, int lumo, int lumc, int* pdevo, int* pdevc, int* pcorr);

int lum_8x8_mmx(uint8_t* ptr, int stride);
void consim_mmx(uint8_t* ptro, uint8_t* ptrc, int stride, int lumo, int lumc, int* pdevo, int* pdevc, int* pcorr);
void consim_sse2(uint8_t* ptro, uint8_t* ptrc, int stride, int lumo, int lumc, int* pdevo, int* pdevc, int* pcorr);

typedef struct{

	plg_ssim_param_t* param;

	/* for error map visualisation
	uint8_t* errmap;
	*/

	int grid;

	/*for average SSIM*/
	float ssim_sum;
	int frame_cnt;

	/*function pointers*/
	lumfunc func8x8;
	lumfunc func2x8;
	csfunc consim;

	/*stats - for debugging*/
	framestat_t* head;
	framestat_t* tail;
} ssim_data_t;

/* append the stats for another frame to the linked list*/
void framestat_append(ssim_data_t* ssim,int type, int quant, float min, float max, float avg){
	framestat_t* act;
	act = (framestat_t*) malloc(sizeof(framestat_t));
	act->type = type;
	act->quant = quant;
	act->ssim_min = min;
	act->ssim_max = max;
	act->ssim_avg = avg;
	act->next = NULL;

	if(ssim->head == NULL){
		ssim->head = act;
		ssim->tail = act;
	} else {
		ssim->tail->next = act;
		ssim->tail = act;
	}
}

/* destroy the whole list*/
void framestat_free(framestat_t* stat){
	if(stat != NULL){
		if(stat->next != NULL) framestat_free(stat->next);
		free(stat);	
	}
	return;
}

/*writeout the collected stats*/
void framestat_write(ssim_data_t* ssim, char* path){
	framestat_t* tmp = ssim->head;
	FILE* out = fopen(path,"w");
	if(out==NULL) printf("Cannot open %s in plugin_ssim\n",path);

	fprintf(out,"SSIM Error Metric\n");
	fprintf(out,"quant   avg     min     max\n");
	while(tmp->next->next != NULL){
		fprintf(out,"%3d     %1.3f   %1.3f   %1.3f\n",tmp->quant,tmp->ssim_avg,tmp->ssim_min,tmp->ssim_max);
		tmp = tmp->next;
	}
	fclose(out);
}

/*writeout the collected stats in octave readable format*/
void framestat_write_oct(ssim_data_t* ssim, char* path){
	framestat_t* tmp;
	FILE* out = fopen(path,"w");
	if(out==NULL) printf("Cannot open %s in plugin_ssim\n",path);

	fprintf(out,"quant = [");
	tmp = ssim->head;
	while(tmp->next->next != NULL){
		fprintf(out,"%d, ",tmp->quant);
		tmp = tmp->next;
	}
	fprintf(out,"%d];\n\n",tmp->quant);
	
	fprintf(out,"ssim_min = [");
	tmp = ssim->head;
	while(tmp->next->next != NULL){
		fprintf(out,"%f, ",tmp->ssim_min);
		tmp = tmp->next;
	}
	fprintf(out,"%f];\n\n",tmp->ssim_min);

	fprintf(out,"ssim_max = [");
	tmp = ssim->head;
	while(tmp->next->next != NULL){
		fprintf(out,"%f, ",tmp->ssim_max);
		tmp = tmp->next;
	}
	fprintf(out,"%f];\n\n",tmp->ssim_max);

	fprintf(out,"ssim_avg = [");
	tmp = ssim->head;
	while(tmp->next->next != NULL){
		fprintf(out,"%f, ",tmp->ssim_avg);
		tmp = tmp->next;
	}
	fprintf(out,"%f];\n\n",tmp->ssim_avg);

	fprintf(out,"ivop = [");
	tmp = ssim->head;
	while(tmp->next->next != NULL){
		if(tmp->type == XVID_TYPE_IVOP){
			fprintf(out,"%d, ",tmp->quant);
			fprintf(out,"%f, ",tmp->ssim_avg);
			fprintf(out,"%f, ",tmp->ssim_min);
			fprintf(out,"%f; ",tmp->ssim_max);
		}
		tmp = tmp->next;
	}
	fprintf(out,"%d, ",tmp->quant);
	fprintf(out,"%f, ",tmp->ssim_avg);
	fprintf(out,"%f, ",tmp->ssim_min);
	fprintf(out,"%f];\n\n",tmp->ssim_max);

	fprintf(out,"pvop = [");
	tmp = ssim->head;
	while(tmp->next->next != NULL){
		if(tmp->type == XVID_TYPE_PVOP){
			fprintf(out,"%d, ",tmp->quant);
			fprintf(out,"%f, ",tmp->ssim_avg);
			fprintf(out,"%f, ",tmp->ssim_min);
			fprintf(out,"%f; ",tmp->ssim_max);
		}
		tmp = tmp->next;
	}
	fprintf(out,"%d, ",tmp->quant);
	fprintf(out,"%f, ",tmp->ssim_avg);
	fprintf(out,"%f, ",tmp->ssim_min);
	fprintf(out,"%f];\n\n",tmp->ssim_max);

	fprintf(out,"bvop = [");
	tmp = ssim->head;
	while(tmp->next->next != NULL){
		if(tmp->type == XVID_TYPE_BVOP){
			fprintf(out,"%d, ",tmp->quant);
			fprintf(out,"%f, ",tmp->ssim_avg);
			fprintf(out,"%f, ",tmp->ssim_min);
			fprintf(out,"%f; ",tmp->ssim_max);
		}
		tmp = tmp->next;
	}
	fprintf(out,"%d, ",tmp->quant);
	fprintf(out,"%f, ",tmp->ssim_avg);
	fprintf(out,"%f, ",tmp->ssim_min);
	fprintf(out,"%f];\n\n",tmp->ssim_max);

	fclose(out);
}

/*calculate the luminance of a 8x8 block*/
int lum_8x8_c(uint8_t* ptr, int stride){
	int mean=0,i,j;
	for(i=0;i< 8;i++)
		for(j=0;j< 8;j++){
			mean += ptr[i*stride + j];
		}
	return mean;
}

int lum_8x8_gaussian(uint8_t* ptr, int stride){
	float mean=0,sum;
	int i,j;
	for(i=0;i<8;i++){
		sum = 0;
		for(j=0;j<8;j++)
			sum += ptr[i*stride + j]*mask8[j];
		
		sum *=mask8[i];
		mean += sum;
	}
	return (int) mean + 0.5;
}

int lum_8x8_gaussian_int(uint8_t* ptr, int stride){
	uint32_t mean;
	int i,j;
	mean = 0;
	for(i=0;i<8;i++){
		uint32_t sum = 0;
		for(j=0;j<8;j++)
			sum += ptr[i*stride + j]*imask8[j];
		
		sum = GACCUM(sum) * imask8[i];
		mean += sum;
	}
	return (int)GACCUM(mean);
}

/*calculate the difference between two blocks next to each other on a row*/
int lum_2x8_c(uint8_t* ptr, int stride){
	int mean=0,i;
	/*Luminance*/
	for(i=0;i< 8;i++){
		mean -= *(ptr-1);
		mean += *(ptr+ 8 - 1);
		ptr+=stride;
	}
	return mean;
}

/*calculate contrast and correlation of the two blocks*/
void consim_gaussian(uint8_t* ptro, uint8_t* ptrc, int stride, int lumo, int lumc, int* pdevo, int* pdevc, int* pcorr){
	unsigned int valo, valc,i,j,str;
	float devo=0, devc=0, corr=0,sumo,sumc,sumcorr;
	str = stride - 8;
	for(i=0;i< 8;i++){
		sumo = 0;
		sumc = 0;
		sumcorr = 0;
		for(j=0;j< 8;j++){
			valo = *ptro;
			valc = *ptrc;
			sumo += valo*valo*mask8[j];
			sumc += valc*valc*mask8[j];
			sumcorr += valo*valc*mask8[j];
			ptro++;
			ptrc++;
		}

	devo += sumo*mask8[i];
	devc += sumc*mask8[i];
	corr += sumcorr*mask8[i];
	ptro += str;
	ptrc += str;
	}

	*pdevo = (int) (devo - ((lumo*lumo + 32) >> 6)) + 0.5;
	*pdevc = (int) (devc - ((lumc*lumc + 32) >> 6)) + 0.5;
	*pcorr = (int) (corr - ((lumo*lumc + 32) >> 6)) + 0.5;
};

void consim_gaussian_int(uint8_t* ptro, uint8_t* ptrc, int stride, int lumo, int lumc, int* pdevo, int* pdevc, int* pcorr)
{
	unsigned int valo, valc,i,j,str;
	uint32_t  devo=0, devc=0, corr=0;
	str = stride - 8;
	for(i=0;i< 8;i++){
		uint32_t sumo = 0;
		uint32_t sumc = 0;
		uint32_t sumcorr = 0;
		for(j=0;j< 8;j++){
			valo = *ptro;
			valc = *ptrc;
			sumo += valo*valo*imask8[j];
			sumc += valc*valc*imask8[j];
			sumcorr += valo*valc*imask8[j];
			ptro++;
			ptrc++;
		}

	devo += GACCUM(sumo)*imask8[i];
	devc += GACCUM(sumc)*imask8[i];
	corr += GACCUM(sumcorr)*imask8[i];
	ptro += str;
	ptrc += str;
	}

        devo = GACCUM(devo);
        devc = GACCUM(devc);
        corr = GACCUM(corr);
	*pdevo = (int) (devo - ((lumo*lumo + 32) >> 6)) + 0.5;
	*pdevc = (int) (devc - ((lumc*lumc + 32) >> 6)) + 0.5;
	*pcorr = (int) (corr - ((lumo*lumc + 32) >> 6)) + 0.5;
};

/*calculate contrast and correlation of the two blocks*/
void consim_c(uint8_t* ptro, uint8_t* ptrc, int stride, int lumo, int lumc, int* pdevo, int* pdevc, int* pcorr){
	unsigned int valo, valc, devo=0, devc=0, corr=0,i,j,str;
	str = stride - 8;
	for(i=0;i< 8;i++){
		for(j=0;j< 8;j++){
			valo = *ptro;
			valc = *ptrc;
			devo += valo*valo;
			devc += valc*valc;
			corr += valo*valc;
			ptro++;
			ptrc++;
		}
	ptro += str;
	ptrc += str;
	}

	*pdevo = devo - ((lumo*lumo + 32) >> 6);
	*pdevc = devc - ((lumc*lumc + 32) >> 6);
	*pcorr = corr - ((lumo*lumc + 32) >> 6);
};

/*calculate the final ssim value*/
static float calc_ssim(float meano, float meanc, float devo, float devc, float corr){
	static const float c1 = (0.01*255)*(0.01*255);
	static const float c2 = (0.03*255)*(0.03*255);
	/*printf("meano: %f meanc: %f devo: %f devc: %f corr: %f\n",meano,meanc,devo,devc,corr);*/
	return ((2.0*meano*meanc + c1)*(corr/32.0 + c2))/((meano*meano + meanc*meanc + c1)*(devc/64.0 + devo/64.0 + c2));
}

static void ssim_after(xvid_plg_data_t* data, ssim_data_t* ssim){
	int i,j,c=0,opt;
	int width,height,str,ovr;
	unsigned char * ptr1,*ptr2;
	float isum=0, min=1.00,max=0.00, val;
	int meanc, meano;
	int devc, devo, corr;

	width = data->width - 8;
	height = data->height - 8;
	str = data->original.stride[0];
	if(str != data->current.stride[0]) printf("WARNING: Different strides in plugin_ssim original: %d current: %d\n",str,data->current.stride[0]);
	ovr = str - width + (width % ssim->grid);

	ptr1 = (unsigned char*) data->original.plane[0];
	ptr2 = (unsigned char*) data->current.plane[0];

	opt = ssim->grid == 1 && ssim->param->acc != 0;

	/*TODO: Thread*/
	for(i=0;i<height;i+=ssim->grid){
		/*begin of each row*/
		meano = meanc = devc = devo = corr = 0;
		meano = ssim->func8x8(ptr1,str);
		meanc = ssim->func8x8(ptr2,str);
		ssim->consim(ptr1,ptr2,str,meano,meanc,&devo,&devc,&corr);
		emms();

		val = calc_ssim((float) meano,(float) meanc,(float) devo,(float) devc,(float) corr);
		isum += val;
		c++;
		/* for visualisation
		if(ssim->param->b_visualize)
			ssim->errmap[i*width] = (uint8_t) 127*val;
		*/


		if(val < min) min = val;
		if(val > max) max = val;
		ptr1+=ssim->grid;
		ptr2+=ssim->grid;
		/*rest of each row*/
		for(j=ssim->grid;j<width;j+=ssim->grid){
 			if(opt){
 				meano += ssim->func2x8(ptr1,str);
 				meanc += ssim->func2x8(ptr2,str);
 			} else {
				meano = ssim->func8x8(ptr1,str);
				meanc = ssim->func8x8(ptr2,str);
			}
			ssim->consim(ptr1,ptr2,str,meano,meanc,&devo,&devc,&corr);
			emms();	

			val = calc_ssim((float) meano,(float) meanc,(float) devo,(float) devc,(float) corr);
			isum += val;
			c++;
			/* for visualisation
			if(ssim->param->b_visualize)
				ssim->errmap[i*width +j] = (uint8_t) 255*val;
			*/
			if(val < min) min = val;
			if(val > max) max = val;
			ptr1+=ssim->grid;
			ptr2+=ssim->grid;
		}
		ptr1 +=ovr;
		ptr2 +=ovr;
 	}
	isum/=c;
	ssim->ssim_sum += isum;
	ssim->frame_cnt++;

	if(ssim->param->stat_path != NULL)
		framestat_append(ssim,data->type,data->quant,min,max,isum);

/* for visualization
	if(ssim->param->b_visualize){
		disp_gray(0,ssim->errmap,width,height,width, "Error-Map");
		disp_gray(1,data->original.plane[0],data->width,data->height,data->original.stride[0],"Original");
		disp_gray(2,data->current.plane[0],data->width,data->height,data->original.stride[0],"Compressed");
		disp_sync();
	}
*/
	if(ssim->param->b_printstat){
		printf("       SSIM: avg: %1.3f min: %1.3f max: %1.3f\n",isum,min,max);
	}

}

static int ssim_create(xvid_plg_create_t* create, void** handle){
	ssim_data_t* ssim;
	plg_ssim_param_t* param;
	param = (plg_ssim_param_t*) malloc(sizeof(plg_ssim_param_t));
	*param = *((plg_ssim_param_t*) create->param);
	ssim = (ssim_data_t*) malloc(sizeof(ssim_data_t));

	ssim->func8x8 = lum_8x8_c;
	ssim->func2x8 = lum_2x8_c;
	ssim->consim = consim_c;

	ssim->param = param;

	ssim->grid = param->acc;

#if defined(ARCH_IS_IA32)
	{
		int cpu_flags = check_cpu_features();
		if((cpu_flags & XVID_CPU_MMX) && (param->acc > 0)){
			ssim->func8x8 = lum_8x8_mmx;
			ssim->consim = consim_mmx;
		}
		if((cpu_flags & XVID_CPU_SSE2) && (param->acc > 0)){
			ssim->consim = consim_sse2;
		}
	}
#endif

	/*gaussian weigthing not implemented*/
#if !defined(USE_INT_GAUSSIAN)
	if(ssim->grid == 0){
		ssim->grid = 1;
		ssim->func8x8 = lum_8x8_gaussian;
		ssim->func2x8 = NULL;
		ssim->consim = consim_gaussian;
	}
#else
	if(ssim->grid == 0){
		ssim->grid = 1;
		ssim->func8x8 = lum_8x8_gaussian_int;
		ssim->func2x8 = NULL;
		ssim->consim = consim_gaussian_int;
	}
#endif
	if(ssim->grid > 4) ssim->grid = 4;

	ssim->ssim_sum = 0.0;
	ssim->frame_cnt = 0;

/* for visualization
	if(param->b_visualize){
		//error map
		ssim->errmap = (uint8_t*) malloc(sizeof(uint8_t)*(create->width-8)*(create->height-8));
	} else {
		ssim->errmap = NULL;
	};
*/

	/*stats*/
	ssim->head=NULL;
	ssim->tail=NULL;

	*(handle) = (void*) ssim;

	return 0;
}	

int xvid_plugin_ssim(void * handle, int opt, void * param1, void * param2){
	ssim_data_t* ssim;
	switch(opt){
		case(XVID_PLG_INFO):
 			((xvid_plg_info_t*) param1)->flags = XVID_REQORIGINAL;
			break;
		case(XVID_PLG_CREATE):
			ssim_create((xvid_plg_create_t*) param1,(void**) param2);
			break;
		case(XVID_PLG_BEFORE):
		case(XVID_PLG_FRAME):
			break;
		case(XVID_PLG_AFTER):
			ssim_after((xvid_plg_data_t*) param1, (ssim_data_t*) handle);
			break;
		case(XVID_PLG_DESTROY):
			ssim = (ssim_data_t*) handle;
			printf("Average SSIM: %f\n",ssim->ssim_sum/ssim->frame_cnt);
			if(ssim->param->stat_path != NULL)
				framestat_write(ssim,ssim->param->stat_path);
			framestat_free(ssim->head);
			/*free(ssim->errmap);*/
			free(ssim->param);	
			free(ssim);
			break;
		default:
			break;
	}
	return 0;
};

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一级黄色片| 视频一区国产视频| 日韩精品欧美精品| 国产91露脸合集magnet| 欧美精品xxxxbbbb| 中文字幕一区二区三| 久久精品国产精品亚洲综合| 色综合中文综合网| 一区二区三区四区av| 久久99久久99| 91精品国产福利| 亚洲综合免费观看高清完整版在线| 激情六月婷婷久久| 在线综合视频播放| 亚洲国产一区二区三区青草影视 | 天堂精品中文字幕在线| 成人听书哪个软件好| 精品国产不卡一区二区三区| 亚洲123区在线观看| 色国产精品一区在线观看| 亚洲欧洲精品一区二区三区不卡| 极品少妇xxxx精品少妇| 日韩欧美一级二级三级久久久| 亚洲免费av高清| 97se亚洲国产综合自在线| 国产精品人人做人人爽人人添 | 91在线国内视频| 欧美激情中文不卡| 粉嫩aⅴ一区二区三区四区五区| 欧美成人一区二区三区| 蜜臀久久99精品久久久久宅男| 国产视频911| 蜜桃一区二区三区在线| 日韩女优视频免费观看| 久久精品国产99| 日韩精品一区二| 精品一区二区三区在线视频| 精品久久国产字幕高潮| 韩日欧美一区二区三区| 久久久久国产精品厨房| 国产 欧美在线| 中文字幕中文字幕中文字幕亚洲无线| 成人自拍视频在线| 亚洲免费高清视频在线| 欧美日韩成人在线一区| 日本亚洲视频在线| 欧美精品一区二区在线播放| 国产成人亚洲综合色影视| 国产精品嫩草99a| 日本福利一区二区| 日韩专区欧美专区| 久久精品亚洲麻豆av一区二区| 成熟亚洲日本毛茸茸凸凹| 亚洲欧美日韩国产另类专区| 一区二区三区中文字幕| 久久99精品久久只有精品| 精品av综合导航| 成人一区二区在线观看| 亚洲国产一区二区在线播放| 日韩精品自拍偷拍| 成人爱爱电影网址| 首页欧美精品中文字幕| 久久综合av免费| 日本精品视频一区二区三区| 免费欧美日韩国产三级电影| 国产精品国产三级国产| 3d动漫精品啪啪| 成人午夜视频在线| 日本伊人色综合网| 国产精品福利影院| 日韩视频一区二区三区在线播放 | 久久伊人蜜桃av一区二区| 成人精品小蝌蚪| 五月天婷婷综合| 中文字幕第一区| 日韩欧美中文字幕公布| 91看片淫黄大片一级| 国产老女人精品毛片久久| 亚洲国产精品麻豆| 国产精品亲子乱子伦xxxx裸| 欧美人动与zoxxxx乱| aaa国产一区| 国产一区在线看| 秋霞电影一区二区| 一区二区三区四区乱视频| 久久婷婷久久一区二区三区| 在线观看av一区| 91视频91自| 成人av电影在线| 国产酒店精品激情| 老色鬼精品视频在线观看播放| 一区二区欧美国产| 亚洲婷婷在线视频| 久久久久国产精品人| 日韩美一区二区三区| 337p亚洲精品色噜噜噜| 在线免费观看不卡av| 99久久免费精品| 从欧美一区二区三区| 国产成人综合网| 国产一区二区在线电影| 激情图片小说一区| 蜜桃一区二区三区在线| 日本vs亚洲vs韩国一区三区 | 欧美妇女性影城| 在线免费观看日本欧美| 96av麻豆蜜桃一区二区| 成人久久视频在线观看| 成人午夜激情影院| 成人美女视频在线看| 国产成都精品91一区二区三| 国产成人高清视频| 国产福利一区二区三区视频 | 国产欧美日韩另类一区| 2022国产精品视频| 日韩精品一区二区三区四区视频| 日韩一区二区精品| 亚洲精品一区二区在线观看| 久久人人97超碰com| 久久女同性恋中文字幕| 久久精品免费在线观看| 欧美激情一区不卡| 一色桃子久久精品亚洲| 亚洲卡通动漫在线| 午夜视频一区在线观看| 蜜桃视频免费观看一区| 国产精品99久久久| 99热精品国产| 欧美色视频一区| 欧美www视频| 中文字幕国产一区| 亚洲一线二线三线久久久| 日韩精品电影一区亚洲| 激情综合网最新| 成人高清免费在线播放| 在线观看亚洲精品视频| 欧美一区二区在线播放| 国产日产亚洲精品系列| 亚洲欧美偷拍卡通变态| 日韩在线播放一区二区| 国产成人在线色| 欧美亚洲禁片免费| 亚洲精品一区二区三区四区高清| 欧美国产日本视频| 国产精品996| 91成人免费网站| 欧美一区中文字幕| 亚洲天堂2016| 久久国产精品99久久人人澡| 成人av电影免费观看| 91精品国产综合久久国产大片 | 一区二区三区欧美久久| 日韩电影在线观看网站| 成人永久aaa| 日韩三级视频在线看| 国产精品入口麻豆九色| 午夜视频久久久久久| 成人h动漫精品| 日韩女优视频免费观看| 亚洲一区二区中文在线| 国产乱淫av一区二区三区| 欧美午夜精品一区二区三区| 久久―日本道色综合久久| 五月天丁香久久| 一本久久精品一区二区| 欧美不卡一区二区三区四区| 亚洲色图视频网站| 国产一区不卡精品| 777亚洲妇女| 亚洲男人的天堂av| 国产成人在线观看免费网站| 欧美一区二区三区免费在线看| 中文字幕综合网| 成人在线视频一区| 久久人人爽人人爽| 毛片基地黄久久久久久天堂| 欧美色图第一页| 亚洲欧美另类图片小说| 成人精品国产福利| 欧美精品一区二区三区久久久| 亚洲视频免费在线观看| 国产高清精品久久久久| 欧美精品一区男女天堂| 久久精品国产精品亚洲红杏| 欧美另类高清zo欧美| 一个色综合网站| 91视频在线看| 亚洲男同性恋视频| 成人av电影免费观看| 国产精品嫩草影院av蜜臀| 狠狠色伊人亚洲综合成人| 亚洲永久精品大片| 一本到不卡精品视频在线观看| 国产精品成人在线观看| 波多野结衣亚洲一区| 国产精品蜜臀av| av不卡在线播放| 亚洲美女一区二区三区| 91国偷自产一区二区开放时间| 日韩美女啊v在线免费观看|