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

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

?? ezwcode.cpp

?? this walet there is pictures in it you can debug it
?? CPP
字號:
// EzwCode.cpp: implementation of the CEzwCode class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "wavelet.h"
#include "EzwCode.h"
#include "ompressOption.h"
#include<math.h>

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

#define NUL -1
//直接對應(yīng)Huffman編碼的概率
#define IZ  3    //孤立
#define POS 2    //正
#define NEG 1    //負
#define ZTR 0    //零樹
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CEzwCode::CEzwCode()
{

}

CEzwCode::~CEzwCode()
{

}

bool CEzwCode::EzwQualitition(int minthr, int datheight, int datwidth, int k, short *p_store, long * fsize)
{
int i,j,tem,num[4]={0,0,0,0},totalnum=0;
	float pro[4];//各個符號出現(xiàn)的概率
	int cur,algin;
	//寫文件
	CFile *pFile=new CFile();
	LPCTSTR lpszFilter;
	switch(k){
		case 0:
			lpszFilter="Red EZW Files(*.ezwr)|*.ezwr|任何文件|*.*||";
			break;
		case 1:
			lpszFilter="Green EZW Files(*.ezwg)|*.ezwg|任何文件|*.*||";
			break;
		case 2:
			lpszFilter="Blue EZW Files(*.ezwb)|*.ezwb|任何文件|*.*||";
			break;
	}
	CFileDialog *SaveDlg=new CFileDialog (FALSE, lpszFilter, "DATA",OFN_HIDEREADONLY|OFN_PATHMUSTEXIST|OFN_OVERWRITEPROMPT|OFN_NOCHANGEDIR,lpszFilter );
    if(SaveDlg->DoModal()==IDOK)
		pFile->Open(SaveDlg->GetPathName(),CFile::modeCreate |CFile::modeWrite|CFile::typeBinary,NULL);
	else
	{
		::AfxMessageBox("Cannot open file to write !");
		return 0;
	}


	
	EzwIn=new short [datheight*datwidth];
    EzwBigIn=new short [datheight*datwidth];
	//存放大數(shù)
	EzwTmp=new short [datheight*datwidth];
	
	//Huffman編碼的初始化
	mask = 0x80;
	output_byte = 0;
	ones=0;
	
	zeroes=0;
    
	algin=(datwidth*3+3)/4 *4;

	//主循環(huán)對RGB分別處理
	for (k=0;k<=2;k++)
	{
	for(i=0;i<datheight;i++)
	{
		for(j=0;j<datwidth;j++)
		{	
			//把數(shù)據(jù)讀到EzwIn中

            cur= i*algin+3*j;
			EzwIn[i*datwidth+j]=p_store[cur+k];

            //EzwBigIn存放標(biāo)記
			//EzwTmp存放大數(shù)
			EzwBigIn[i*datwidth+j]=NUL;
			EzwTmp[i*datwidth+j]=NUL;
			
		}

	}

 

	//Produce DominateChart
	//找到最大值max,log2(max)向上取整-1,并存入TreFstFtr
	//以pow(2,TreFstFtr)作為初始的閾值,而pow(2,minthr)作為終止閾值
	FirstFactor(datheight,datwidth,EzwIn);
	
	Thresholdnum=TreFstFtr-minthr+1;//循環(huán)次數(shù)


	pFile->Write (&TreFstFtr,sizeof(TreFstFtr));//實際上是int型變量,最大閾值
    
	

	for(thr=TreFstFtr-minthr;thr>=0;thr--)
	{
		//處理主表
	    
		for(i=0;i<datheight;i++)
		{
			for(j=0;j<datwidth;j++)
			{
                if (abs(EzwTmp[i*datwidth+j])>=1)
				{
				  if(!PrtsIsZTR(thr,i,j,datheight,datwidth))
				  {
					//如果不是零樹的子孫系數(shù)

					if(abs(EzwIn[i*datwidth+j])<(int)(1<<(thr+minthr)))
					{
						
						//如果絕對值小于當(dāng)前閾值
						if(ChldIsMin(thr+minthr,i,j,datheight,datwidth))
						{
							//如果子孫都小于閾值
							EzwBigIn[i*datwidth+j]=ZTR;
							ChildIsZero(i,j,datheight,datwidth);
							//記為零樹
							num[ZTR]++;
						}
						else
						{	//如果子孫系數(shù)有意義,記為孤立零點
							EzwBigIn[i*datwidth+j]=IZ;
							num[IZ]++;
						}
					}
					else//如果當(dāng)前系數(shù)絕對值大于閾值
					{
						if(EzwIn[i*datwidth+j]>0)
						{	
							//為正數(shù),記為P
						    EzwBigIn[i*datwidth+j]=POS;
							num[POS]++;
						}
						else
						{	//為負數(shù),記為N
							EzwBigIn[i*datwidth+j]=NEG;
							num[NEG]++;
						}
						//將重要數(shù)據(jù)轉(zhuǎn)移到EzeBigIn數(shù)組中,原數(shù)置零
						EzwTmp[i*datwidth+j]=EzwIn[i*datwidth+j];//if not 0 this piont ready to produce sub-chart
						EzwIn[i*datwidth+j]=0;
					}
					
				}//end if PrtsIsZTR

				}//end if EzwTmp
			} //end for j
		} //end for i
        




        HuffmanEncode(minthr,datheight,datwidth,pFile);
	}//end for thr
    if (mask!=0x80)
	{
		pFile->Write(&output_byte,sizeof(output_byte));
	}


	}//end for k

	

	char temp[100];
	float compression,bpp;
	compression=(float)datheight*datwidth*8/(ones+zeroes);
	bpp=(float)(ones+zeroes)/datheight/datwidth;
    sprintf(temp,"壓縮比例:%2.2f",compression);
	::AfxMessageBox(temp);

	delete SaveDlg;
	pFile->Close();
	delete pFile;
    

	delete [] EzwIn;
	delete [] EzwBigIn;
	delete [] EzwTmp;

	
	
	return 1;
}

void CEzwCode::FirstFactor(int datheight, int datwidth, short *Ez)
{
//尋找最大量化閾值
	short max=0;
	for(int i=0;i<datheight;i++)
		for(int j=0;j<datwidth;j++)
			if(abs(Ez[i*datwidth+j])>max)
			{
				max=abs(Ez[i*datwidth+j]);
			}
	//找到最大值max,log2(max)向上取整-1;
    TreFstFtr=int(ceil(log10(max)/log10(2))-1);
    return;
}

bool CEzwCode::PrtsIsZTR(int thr, int i, int j, int datheight, int datwidth)
{
//判斷某結(jié)點是否為零樹的子孫
	if((i==0)&&(j==0))//根節(jié)點,非零樹子孫
		return 0;
	if (i<0)
		i=0;
	if (j<0)
		j=0;
	int k=(int)floor(i>>1);//父節(jié)點
	int l=(int)floor(j>>1);
	if(EzwBigIn[k*datwidth+l]==ZTR)//查找主系數(shù)表
		return 1;
	else
		return PrtsIsZTR(thr,k,l,datheight,datwidth);//遞歸調(diào)用
}

bool CEzwCode::ChldIsMin(int thr, int i, int j, int datheight, int datwidth)
{
int k,l,ElgFactor=1;
	while((i<datheight/2)&&(j<datwidth/2))//在倒數(shù)第二層上截止
	{
		for(k=i*2;k<2*i+(int)(1<<ElgFactor);k++)
			for(l=j*2;l<2*j+(int)(1<<ElgFactor);l++)
			{
				//依次尋找子孫節(jié)點
				if (k*datwidth+l<datwidth*datheight)
					if(abs(EzwIn[k*datwidth+l])>=(int)(1<<thr))
						return 0;
				
			}
		i=i<<1;
		j=j<<1;
		ElgFactor+=1;
	}
	return 1; 
}

void CEzwCode::ChildIsZero(int i, int j, int datheight, int datwidth)
{
 int k,l,ElgFactor=1;
	while((i<datheight/2)&&(j<datwidth/2))//在倒數(shù)第二層上截止
	{
		for(k=i*2;k<2*i+(int)(1<<ElgFactor);k++)
			for(l=j*2;l<2*j+(int)(1<<ElgFactor);l++)
			{
				//依次尋找標(biāo)記子孫節(jié)點為零樹子節(jié)點
				if (k<datheight && l<datwidth)
					if((EzwTmp[k*datwidth+l]==NUL))
						EzwTmp[k*datwidth+l]=0;			
			}
		i=i<<1;
		j=j<<1;
		ElgFactor+=1;
	}

	return;
}

bool CEzwCode::HuffmanEncode(int minthr, int datheight, int datwidth, CFile *pFile)
{
//map:ZTR,NEG,POS,IZ->0,10,110,111

	int i,j,k,OrdOfHuff[4];
	for(i=0;i<4;i++)
		OrdOfHuff[i]=i;

	//輸出1的個數(shù),概率最大的為0個(ZTR)
	//最小的為3個,合乎huffman編碼的規(guī)律

	//文件數(shù)據(jù)
	//for(thr=TreFstFtr-minthr;thr>=0;thr--)
	{
		//主表數(shù)據(jù)

		for(i=0;i<datheight;i++)
			for(j=0;j<datwidth;j++)
			{
				if((EzwBigIn[i*datwidth+j]<4)&&(EzwBigIn[i*datwidth+j]>=0))
				{

					for(k=OrdOfHuff[EzwBigIn[i*datwidth+j]];k>0;k--)
					{
						PutBit('1',pFile);

					}
					if((OrdOfHuff[EzwBigIn[i*datwidth+j]]<3)&&(OrdOfHuff[EzwBigIn[i*datwidth+j]]>=0))
					{
						PutBit('0',pFile);

					}

				}

			}//end for j
			
		//附表數(shù)據(jù)

			for(i=0;i<datheight;i++)
				for(j=0;j<datwidth;j++)
				{
					//修改處
					if(abs(EzwTmp[i*datwidth+j])>1)
					{
					    EzwBigIn[i*datwidth+j]=CalSV(thr+minthr,i,j,datheight,datwidth);
						if(!EzwBigIn[i*datwidth+j])
						{
							PutBit('0',pFile);
						}
					    else
						{
						    PutBit('1',pFile);
						}
					}
					//修改處
					if (EzwTmp[i*datwidth+j]==0)
						EzwTmp[i*datwidth+j]=NUL;
					EzwBigIn[i*datwidth+j]=NUL;
				}

	}

	return 1;
}

bool CEzwCode::PutBit(char bit, CFile *pf)
{
//以一個字節(jié)為單位輸出數(shù)據(jù)
	//開始掩模   mask=128=1000 0000
	//開始o(jì)utput_byte=0  =0000 0000
	if (bit=='1') 
	{
		output_byte |= mask;//位或
		ones++;
	}
	else 
		zeroes++;
	//用于計算壓縮率
	mask >>= 1;//右移一位
	if (mask==0) 
	{	
		//每8位輸出一次,并把mask和output_byte初始化
		pf->Write(&output_byte,sizeof(output_byte));
		output_byte = 0;
		mask = 0x80;
	}
	return 1;
}

int CEzwCode::CalSV(int nowthr, int i, int j, int datheight, int datwidth)
{
//計算附表值
	//三個門限值,此時閾值的1 1.5 2倍
	int low=(int)(1<<nowthr);
	int middle=(int)((1<<nowthr)*1.5);
	int high=(int)(1<<(nowthr+1));
	while(high<=(int)(1<<(TreFstFtr+1)))//不大于最高閾值
	{
		if((abs(EzwTmp[i*datwidth+j])>=low)&&(abs(EzwTmp[i*datwidth+j])<high))
			if(abs(EzwTmp[i*datwidth+j])>=middle)
				return 1;//大于中門限
			else
				return 0;//小于中門限

		low+=int(1<<nowthr);
		middle+=int(1<<nowthr);
		high+=int(1<<nowthr);
	}
	//出錯
	return -1;
}

int CEzwCode::BitToEzwDV(CFile *pf)
{
	switch (GetBit(pf)) 
	{
		case '1':
			switch (GetBit(pf)) 
			{
				case '0': 
					return 1;
				case '1':
					switch (GetBit(pf)) 
					{
						case '0': 
							return 2;
						case '1':
							return 3;	
					}
			}
			break;
		case '0':
	 		return 0;
			break;

	}

	return 1;	
	//出錯
}

int CEzwCode::BitToEzwSV(CFile *pf)
{
//Reads a code from the input stream,output SV
	switch (GetBit(pf)) //need to change to common style of cal
	{
		case '1':
	 		return 1;
			break;
		case '0':
	 		return 0;
			break;

	}

	return 0;
}

char CEzwCode::GetBit(CFile *pf)
{
	//以一個字節(jié)為單位讀入數(shù)據(jù)
	
	unsigned char bit;

	if (mask==0)
	{
		//每8位讀一次

		pf->Read (&input_byte,sizeof(input_byte));
	
		mask = 0x80;//128=1000 0000
	}

	if ((input_byte&mask)==0) 
	{
		bit = '0';
		zeroes++;
	}
	else 
	{
		bit = '1';
		ones++;
	}

	mask >>= 1;

	return (bit);
}

bool CEzwCode::EzwInverseQualitition(int minthr, int datheight, int datwidth, int k, short *p_store)
{
//零樹反量化
	int i,j;

	//把POS和NEG標(biāo)志的值求出來
		for(i=0;i<datheight;i++)
			for(j=0;j<datwidth;j++)
				if((thr!=0)||(minthr!=0))
					if((EzwIn[i*datwidth+j]==1)||(EzwIn[i*datwidth+j]==0))
					{
						if(FlagOut[i*datwidth+j]==-1)//第一次賦初值
							FlagOut[i*datwidth+j]=EzwIn[i*datwidth+j];
						else
						{
							//第一次以后累加
							FlagOut[i*datwidth+j]=FlagOut[i*datwidth+j]*2+2+EzwIn[i*datwidth+j];
						}

						EzwOut[i*datwidth+j]=(int)((1<<(thr+minthr))*(1.25+FlagOut[i*datwidth+j]*0.5))*sign(EzwOut[i*datwidth+j]);
					}
     
	

		for(i=0;i<datheight;i++)
			for(j=0;j<datwidth;j++)
			{
				if((thr==0)&&(minthr==0))
					if((EzwBigIn[i*datwidth+j]==POS)||(EzwBigIn[i*datwidth+j]==NEG))
						EzwOut[i*datwidth+j]=1;
				if(EzwBigIn[i*datwidth+j]==NEG)
					EzwOut[i*datwidth+j]*=-1;
			}
		



	return 1;
}

bool CEzwCode::HuffmanDecode(int minthr, int datheight, int datwidth, int k, short *p_store, long fsize)
{
int i,j,Thresholdnum;
	bool *EzwSVFlag=(bool *)HeapAlloc(GetProcessHeap(),0,datheight*datwidth*sizeof(bool));
	input_byte = 0;
	mask = 0;
	ones=0;
	zeroes=0;
    char str_tmp[20];

	CFile *pFile=new CFile();
	LPCTSTR lpszFilter;
	switch(k){
		case 0:
			lpszFilter="Red EZW Files(*.ezwr)|*.ezwr|任何文件|*.*||";
			break;
		case 1:
			lpszFilter="Green EZW Files(*.ezwg)|*.ezwg|任何文件|*.*||";
			break;
		case 2:
			lpszFilter="Blue EZW Files(*.ezwb)|*.ezwb|任何文件|*.*||";
			break;
	}
	CFileDialog *SaveDlg=new CFileDialog (TRUE, lpszFilter, "DATA",OFN_HIDEREADONLY|OFN_PATHMUSTEXIST|OFN_OVERWRITEPROMPT|OFN_NOCHANGEDIR,lpszFilter );
    if(SaveDlg->DoModal()==IDOK)
		pFile->Open(SaveDlg->GetPathName(),CFile::modeRead|CFile::typeBinary,NULL);
	else
	{
		::AfxMessageBox("Cannot open file to read !");
		return 0;
	}

	//for (k=0;k<=1;k++)
	{
	    //讀頭文件
		
	

		pFile->Read (&TreFstFtr,sizeof(TreFstFtr));//讀最大量化閾值
		Thresholdnum=TreFstFtr-minthr+1;

		EzwIn=new short [datheight*datwidth];
        EzwBigIn=new short [datheight*datwidth];
		FlagOut=(int *)HeapAlloc(GetProcessHeap(),0,datheight*datwidth*sizeof(int));
    	EzwOut=(int *)HeapAlloc(GetProcessHeap(),0,datheight*datwidth*sizeof(int));

		for(i=0;i<datheight;i++)
		{
			for(j=0;j<datwidth;j++)
			{
				FlagOut[i*datwidth+j]=-1;
			    EzwOut[i*datwidth+j]=0;
				//初始化主附表數(shù)組
                //EzwSVFlag存放區(qū)間狀態(tài)
				EzwSVFlag[i*datwidth+j]=0;
                //EzwBigIn存放四種狀態(tài)
				EzwBigIn[i*datwidth+j]=NUL;
				EzwIn[i*datwidth+j]=NUL;

			}
		}
        


		for (i=0;i<=3;i++)
			EzwDVOfPro[i]=i;
        

		
		for(thr=TreFstFtr-minthr;thr>=0;thr--)
		{
			//讀主表
			for(i=0;i<datheight;i++)
				for(j=0;j<datwidth;j++)
					if (abs(EzwBigIn[i*datwidth+j])>0)	
					{
						EzwBigIn[i*datwidth+j]=EzwDVOfPro[BitToEzwDV(pFile)];//讀取主表數(shù)據(jù)


                        if (EzwBigIn[i*datwidth+j]==ZTR)
							DecodeZero(i,j,datheight,datwidth);

						if((EzwBigIn[i*datwidth+j]==POS)||(EzwBigIn[i*datwidth+j]==NEG))
						{
							EzwSVFlag[i*datwidth+j]=1;//重要數(shù)據(jù)對應(yīng)附表
						}
					}

			
			
			//讀附表

				for(i=0;i<datheight;i++)
					for(j=0;j<datwidth;j++)
						if(EzwSVFlag[i*datwidth+j]==1)
						{
							EzwIn[i*datwidth+j]=BitToEzwSV(pFile);
						}
			
			
			EzwInverseQualitition(minthr,datheight,datwidth,k,p_store);
			for (i=0;i<datheight;i++)
				for (j=0;j<datwidth;j++)
					EzwBigIn[i*datwidth+j]=NUL;
		}
        


    }//end for k



	int align,cur;
	align=(datwidth*3+3)/4 *4;
	for(i=0;i<datheight;i++)
	{
		for(j=0;j<datwidth;j++)
		{
            cur= i*align+3*j;
			p_store[cur+k]=EzwOut[i*datwidth+j];
		}

	}

	char temp[100];
	float compression,bpp;
	compression=(float)datheight*datwidth*8/(ones+zeroes);
    bpp=(float)(ones+zeroes)/datheight/datwidth;
    sprintf(temp,"解壓縮比例:%2.2f",compression);
	::AfxMessageBox(temp);
	
	HeapFree(GetProcessHeap(),0,EzwSVFlag);
	HeapFree(GetProcessHeap(),0,FlagOut);
    HeapFree(GetProcessHeap(),0,EzwOut);
	delete [] EzwBigIn;
	delete [] EzwIn;
	
	delete SaveDlg;
	pFile->Close();
	delete pFile;
	
	return 1;
}

int CEzwCode::sign(int Ezwnum)
{
	if (Ezwnum>=0)
		return 1;
	else 
		return -1;
}

void CEzwCode::DecodeZero(int i, int j, int datheight, int datwidth)
{
int k,l,ElgFactor=1;
	while((i<datheight/2)&&(j<datwidth/2))//在倒數(shù)第二層上截止
	{
		for(k=i*2;k<2*i+(int)(1<<ElgFactor);k++)
			for(l=j*2;l<2*j+(int)(1<<ElgFactor);l++)
			{
				//依次尋找標(biāo)記子孫節(jié)點為零樹子節(jié)點
				if (k<datheight && l<datwidth)
					if((EzwBigIn[k*datwidth+l]==NUL))
						EzwBigIn[k*datwidth+l]=0;			
			}
		i=i<<1;
		j=j<<1;
		ElgFactor+=1;
	}

	return;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美xxxxxxxx| 日本道色综合久久| 日韩三级视频在线看| 美女视频网站黄色亚洲| 日韩精品最新网址| 国产福利一区二区三区视频在线 | 亚洲大片免费看| 欧美日韩国产片| 美腿丝袜一区二区三区| 日韩免费高清视频| 国产成人av资源| 亚洲天堂成人网| 欧美日韩午夜精品| 麻豆成人久久精品二区三区小说| 精品美女被调教视频大全网站| 国产大陆a不卡| 中文字幕一区二区三区在线播放| 色老综合老女人久久久| 日韩精品一级中文字幕精品视频免费观看 | 欧美成人午夜电影| 国产一区二区主播在线| 国产精品第五页| 欧美军同video69gay| 国产一区二区在线看| 亚洲欧美日韩国产中文在线| 欧美日韩在线播放三区| 久久99深爱久久99精品| 国产精品入口麻豆九色| 欧美视频在线观看一区| 国产精选一区二区三区| 亚洲一区中文日韩| 久久久综合视频| 欧美日韩激情一区二区| 国产超碰在线一区| 五月天亚洲精品| 国产精品人成在线观看免费| 欧美电影一区二区| 99久久精品久久久久久清纯| 麻豆视频观看网址久久| 一区二区三区在线观看动漫| 久久亚洲免费视频| 欧美日韩精品综合在线| 成人亚洲一区二区一| 婷婷六月综合亚洲| 日韩一区欧美一区| 久久久无码精品亚洲日韩按摩| 欧美日韩中文另类| 99久久精品国产毛片| 久久狠狠亚洲综合| 亚洲高清视频的网址| 亚洲欧洲日产国码二区| 国产日本一区二区| 精品国产一区二区国模嫣然| 欧美日韩一区高清| 91网页版在线| 不卡免费追剧大全电视剧网站| 久久精品国产77777蜜臀| 亚洲第一二三四区| 有码一区二区三区| 中文字幕一区二区三区四区| 国产日韩欧美一区二区三区乱码| 在线不卡中文字幕| 欧美久久久久久久久久| 在线观看视频一区| 在线观看亚洲a| 欧美在线色视频| 在线观看日韩电影| 色婷婷国产精品| 色偷偷一区二区三区| 成人av小说网| av中文字幕不卡| 成人午夜视频在线观看| 国产成都精品91一区二区三| 国产a视频精品免费观看| 国产曰批免费观看久久久| 国产一区亚洲一区| 国产精品18久久久久| 国产成人精品免费| 成人综合在线视频| 97久久超碰国产精品| 99国产精品国产精品毛片| 不卡电影一区二区三区| 色综合久久六月婷婷中文字幕| www.久久久久久久久| 色综合天天性综合| 91福利精品视频| 欧美日韩精品欧美日韩精品| 91精品欧美一区二区三区综合在 | 日韩免费看网站| 国产精品美女久久久久久 | 日韩视频免费直播| 精品乱人伦小说| 欧美激情一区二区三区全黄| 国产欧美一区二区精品性色| 国产精品国产三级国产普通话蜜臀| 国产精品久久久久影院| 亚洲综合图片区| 蜜桃视频在线观看一区| 国产成人午夜视频| 91高清视频免费看| 欧美一二三在线| 国产欧美日本一区二区三区| 国产精品不卡一区| 亚洲国产成人va在线观看天堂| 麻豆精品一二三| 成人免费视频播放| 欧美日本在线视频| 久久精品一区二区三区四区| 亚洲男人的天堂av| 日韩电影免费一区| 成人免费毛片高清视频| 欧美色综合久久| 国产亚洲精品中文字幕| 亚洲黄一区二区三区| 久久福利资源站| 色94色欧美sute亚洲线路二| 精品欧美一区二区久久| 日韩码欧中文字| 久草热8精品视频在线观看| 成人污污视频在线观看| 7777女厕盗摄久久久| 国产精品人成在线观看免费| 日韩不卡在线观看日韩不卡视频| 国产精品亚洲人在线观看| 欧美亚洲尤物久久| 中文一区在线播放| 免费精品视频在线| 日本高清不卡视频| 日本一区二区三区高清不卡| 天天做天天摸天天爽国产一区| 成人性视频免费网站| 宅男噜噜噜66一区二区66| 亚洲三级在线观看| 国产剧情一区二区| 日韩精品中文字幕一区二区三区| 国产精品乱人伦一区二区| 美女视频一区二区三区| 欧美日韩三级在线| 中文字幕一区二区三区蜜月| 韩国一区二区在线观看| 在线不卡中文字幕| 亚洲综合区在线| 色综合久久天天综合网| 久久久精品tv| 久久国产综合精品| 欧美性三三影院| 亚洲色图一区二区三区| 国产69精品久久777的优势| 欧美成人伊人久久综合网| 亚洲成人资源网| 欧美在线观看视频在线| 日韩毛片高清在线播放| 成人app软件下载大全免费| 久久久久97国产精华液好用吗| 麻豆精品一区二区综合av| 69久久99精品久久久久婷婷| 一区二区三区**美女毛片| 99精品视频中文字幕| 国产精品视频yy9299一区| 国产成a人亚洲| 国产日韩欧美制服另类| 韩国av一区二区| 精品女同一区二区| 久久99在线观看| 精品福利一区二区三区| 狠狠色综合播放一区二区| 欧美精品一区视频| 韩国成人精品a∨在线观看| 欧美精品一区二区在线播放| 精品一区二区三区的国产在线播放 | 久久九九99视频| 国产综合久久久久久鬼色| 久久久久青草大香线综合精品| 久草热8精品视频在线观看| xfplay精品久久| 国产91精品一区二区麻豆网站| 国产精品久久三| 色狠狠桃花综合| 亚洲国产精品久久久久婷婷884| 欧美日韩午夜在线| 卡一卡二国产精品| 久久精品欧美一区二区三区不卡| 国产乱码精品1区2区3区| 国产精品成人一区二区艾草| 97成人超碰视| 午夜久久久影院| 精品三级av在线| 成人激情文学综合网| 亚洲黄色av一区| 91精品国产免费| 国产成人综合网站| 亚洲精品一二三四区| 欧美精品高清视频| 国产成人综合在线观看| 亚洲人一二三区| 日韩网站在线看片你懂的| 国v精品久久久网| 亚洲国产成人av网| 久久午夜羞羞影院免费观看| 99国产一区二区三精品乱码|