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

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

?? advancejpeg-lscode.cpp

?? 改進的JPEG-LS算法
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
#include "stdafx.h"
#include <math.h>
#include "DoubleCode.h"
#include "AdvanceJPEG-LSCode.h"
//圖像行編碼器
CAdvanceJepgLSOneLineCode::CAdvanceJepgLSOneLineCode()
{
	lpImage=NULL;
	lpCodeStream=NULL;
	CodeBitcp=0;
	OneSampleBits=0;
	qNEAR=0;//誤差界
	lpPrecedingLine=lpCurrentLine=lpThirdLine=lpBuf1=lpBuf2=lpBuf3=NULL;//存放編碼上下文象素數據
	lpReconstructPrecedingLine=lpReconstructCurrentLine=lpBuf4=lpBuf5=NULL;//存放重建象素數據
	//用于大誤差編碼
	lpDoubleErrList=NULL;
	DoubleErrN=0;
	DErrN=0;
	DDErrN=0;
	lpDErrNumberFastCoding=NULL;
	lpDErrRunFastCoding=NULL;
	lpDDErrNumberFastCoding=NULL;
	lpDDErrRunFastCoding=NULL;

	AdjustWinLength=BakAdjustWinLength=6;//調節窗口長度。
	AdjustNumber=1;
	AllTestNumber=2;
	lpTwoAdjustNumberFastCoding=NULL;
	lpTwoAdjustRunFastCoding=NULL;
	lpAdjustNumberFastCoding=NULL;
	lpAdjustRunFastCoding=NULL;
	//用于多波段編碼
	AllowBandPrediction=FALSE;//波段預測允許開關
}
CAdvanceJepgLSOneLineCode::~CAdvanceJepgLSOneLineCode()
{
}
CString CAdvanceJepgLSOneLineCode::GetString()
{
	CString str,s;
	str.Empty();
	s.Format(_T("\r\n%-4d"),LineN);str+=s;
	s.Format(_T(" %-8d"),CodeBitcp);str+=s;
	s.Format(_T(" %08x"),AndCode);str+=s;
	s.Format(_T(" %-4d"),RUNindex);str+=s;
	s.Format(_T(" %-3d"),DoubleMaxError);str+=s;
	s.Format(_T(" %-3d"),RunContext);str+=s;
	s.Format(_T(" %1d"),RunTestThresholdStep);str+=s;
	s.Format(_T(" %-2d"),MaxErrAdjust1);str+=s;
	s.Format(_T(" %-2d"),MaxErrAdjust2);str+=s;
	s.Format(_T(" %-3d"),DoubleErrN);str+=s;
	s.Format(_T(" %-3d"),TestErrorMeLimen);str+=s;
	s.Format(_T(" %-3d"),AdjustErrorMe);str+=s;
	s.Format(_T(" %-3d"),BakAdjustWinLength);str+=s;
	s.Format(_T(" %-3d"),AdjustWinLength);str+=s;
	s.Format(_T(" %-3d"),AdjustNumber);str+=s;
	s.Format(_T(" %-3d"),AllTestNumber);str+=s;
	s.Format(_T(" %-8.5f"),((double)A_Mul)/UNIFORM_FLOAT_TO_INT_MUL);str+=s;
	s.Format(_T(" %-5d"),B_Add);str+=s;
	s.Format(_T(" %-8.5f"),((double)p)/UNIFORM_FLOAT_TO_INT_MUL);str+=s;
	s.Format(_T(" %-8.4f"),((double)PredictErr_D)/UNIFORM_FLOAT_TO_INT_MUL);str+=s;
	return str;
}
void CAdvanceJepgLSOneLineCode::PrepareCode(int LineL,CAdvanceJepgLSOneLineCode *lpPredictionBand)//為行編碼器準備緩沖區
{
	X=LineL;//行長度
	lpImage=new int[X];
	lpCurrentLine=lpBuf1=new int[X];
	ZeroMemory(lpCurrentLine,X*sizeof(int));
	lpPrecedingLine=lpBuf2=new int[X];
	ZeroMemory(lpPrecedingLine,X*sizeof(int));
	lpThirdLine=lpBuf3=new int[X];
	ZeroMemory(lpThirdLine,X*sizeof(int));
	if((lpPredictionBandCode=lpPredictionBand)!=NULL)
	{//允許波段預測
		AllowBandPrediction=TRUE;
		lpReconstructCurrentLine=lpBuf4=new int[X];
		lpReconstructPrecedingLine=lpBuf5=new int[X];
	}
	else
	{//不作波段預測時
		AllowBandPrediction=FALSE;
		lpReconstructPrecedingLine=lpPrecedingLine;
		lpReconstructCurrentLine=lpCurrentLine;
	}
	lpDoubleErrList=new AdvanceJPEGLSMaxErrList[X];

	lpDErrNumberFastCoding=new CDoubleErrorNumberFastCoding;
	lpDErrRunFastCoding=new CDoubleErrorRunFastCoding;
	lpDDErrNumberFastCoding=new CDoubleErrorNumberFastCoding;
	lpDDErrRunFastCoding=new CDoubleErrorRunFastCoding;

	lpTwoAdjustRunFastCoding=new CDoubleErrorRunFastCoding;
	lpTwoAdjustNumberFastCoding=new CDoubleErrorNumberFastCoding;
	lpAdjustRunFastCoding=new CDoubleErrorRunFastCoding;
	lpAdjustNumberFastCoding=new CDoubleErrorNumberFastCoding;
}
void CAdvanceJepgLSOneLineCode::EndCode()//主要是清除申請的緩沖區,要在編碼數據處理完后方可結束
{
	if(lpImage!=NULL)delete lpImage;lpImage=NULL;
	if(lpBuf1!=NULL)delete lpBuf1;lpBuf1=NULL;
	if(lpBuf2!=NULL)delete lpBuf2;lpBuf2=NULL;
	if(lpBuf3!=NULL)delete lpBuf3;lpBuf3=NULL;
	if(lpPredictionBandCode!=NULL)
	{
		if(lpBuf4!=NULL)delete lpBuf4;
		lpBuf4=NULL;
		if(lpBuf5!=NULL)delete lpBuf5;
		lpBuf5=NULL;
	}
	if(lpDoubleErrList!=NULL)delete lpDoubleErrList;lpDoubleErrList=NULL;

	if(lpDErrNumberFastCoding!=NULL)delete lpDErrNumberFastCoding;lpDErrNumberFastCoding=NULL;
	if(lpDErrRunFastCoding!=NULL)delete lpDErrRunFastCoding;lpDErrRunFastCoding=NULL;
	if(lpDDErrNumberFastCoding!=NULL)delete lpDDErrNumberFastCoding;lpDDErrNumberFastCoding=NULL;
	if(lpDDErrRunFastCoding!=NULL)delete lpDDErrRunFastCoding;lpDDErrRunFastCoding=NULL;
	if(lpTwoAdjustNumberFastCoding!=NULL)delete lpTwoAdjustNumberFastCoding;lpTwoAdjustNumberFastCoding=NULL;
	if(lpTwoAdjustRunFastCoding!=NULL)delete lpTwoAdjustRunFastCoding;lpTwoAdjustRunFastCoding=NULL;
	if(lpAdjustNumberFastCoding!=NULL)delete lpAdjustNumberFastCoding;lpAdjustNumberFastCoding=NULL;
	if(lpAdjustRunFastCoding!=NULL)delete lpAdjustRunFastCoding;lpAdjustRunFastCoding=NULL;

	lpImage=NULL;
	lpCodeStream=NULL;
	CodeBitcp=0;
	OneSampleBits=0;
}
void CAdvanceJepgLSOneLineCode::InitBandPrediction()
{
	int i;
	OpenOffBandPrediction=TRUE;
	Last_A_Mul=A_Mul=UNIFORM_FLOAT_TO_INT_MUL;
	Last_B_Add=B_Add=0;
	p=UNIFORM_FLOAT_TO_INT_MUL;
	D_Cun=D_Pre=E_Cun=E_Pre=R_CunPre=0;
	StatisticLinN=0;
	for(i=0;i<X;i++)
	{
		lpCurrentLine[i]=lpPrecedingLine[i]=lpThirdLine[i]=Pixel_ADD;
	}
	AndCode<<=2;AndCode|=0x3;
	MAXVAL=AndCode;
	RANGE=(MAXVAL+2*qNEAR)/(2*qNEAR+1)+1;
	for(qbpp=15;(RANGE&(1<<qbpp))==0;qbpp--);if(RANGE!=(1<<qbpp))qbpp++;
	for(bpp=15;((MAXVAL+1)&(1<<bpp))==0;bpp--);if((MAXVAL+1)!=(1<<bpp))bpp++;if(bpp<2)bpp=2;
	LIMIT=2*(bpp+((bpp>8)?bpp:8));//為規則方式中的GOLOMB編碼用的最大碼長限度
}
void CAdvanceJepgLSOneLineCode::OpenBandPrediction()
{
	OpenOffBandPrediction=TRUE;//打開波段預測
	int i,pp,ppx;
	//準備預測誤差的上下文
	for(i=0;i<X;i++)
	{//將上下文變成預測誤差上下文.
		pp=lpPredictionBandCode->lpReconstructCurrentLine[i];//預測波段重建值
		if((ppx=(A_Mul*pp/UNIFORM_FLOAT_TO_INT_MUL+B_Add))>Pixel_ADD)ppx=pp;//預測值
		lpCurrentLine[i]=lpCurrentLine[i]-ppx+PIX_ADD;//當前上下文由重建值變成預測誤差值
		pp=lpPredictionBandCode->lpReconstructPrecedingLine[i];//前行處理(同上)
		if((ppx=(Last_A_Mul*pp/UNIFORM_FLOAT_TO_INT_MUL+Last_B_Add))>PIX_ADD)ppx=pp;
		lpPrecedingLine[i]=lpPrecedingLine[i]-ppx+PIX_ADD;
	}
	AndCode<<=2;AndCode|=0x3;
	MAXVAL=AndCode;
	RANGE=(MAXVAL+2*qNEAR)/(2*qNEAR+1)+1;
	for(qbpp=15;(RANGE&(1<<qbpp))==0;qbpp--);if(RANGE!=(1<<qbpp))qbpp++;
	for(bpp=15;((MAXVAL+1)&(1<<bpp))==0;bpp--);if((MAXVAL+1)!=(1<<bpp))bpp++;if(bpp<2)bpp=2;
	LIMIT=2*(bpp+((bpp>8)?bpp:8));//為規則方式中的GOLOMB編碼用的最大碼長限度
}
void CAdvanceJepgLSOneLineCode::CloseBandPrediction()
{
	int i,pp,ppx;
	OpenOffBandPrediction=FALSE;//關閉波段預測
	//準備預測誤差的上下文
	AndCode>>=2;//預測誤差的范圍要擴大兩比特
	MAXVAL=AndCode;
	RANGE=(MAXVAL+2*qNEAR)/(2*qNEAR+1)+1;
	for(qbpp=15;(RANGE&(1<<qbpp))==0;qbpp--);if(RANGE!=(1<<qbpp))qbpp++;
	for(bpp=15;((MAXVAL+1)&(1<<bpp))==0;bpp--);if((MAXVAL+1)!=(1<<bpp))bpp++;if(bpp<2)bpp=2;
	LIMIT=2*(bpp+((bpp>8)?bpp:8));//為規則方式中的GOLOMB編碼用的最大碼長限度
	for(i=0;i<X;i++)
	{//將當前預測誤差上下文變成重建圖像上下文.
		pp=lpPredictionBandCode->lpReconstructCurrentLine[i];
		if((ppx=(A_Mul*pp/UNIFORM_FLOAT_TO_INT_MUL+B_Add))>PIX_ADD)ppx=pp;//預測值
		lpCurrentLine[i]=lpCurrentLine[i]+ppx-PIX_ADD;//還原預測誤差為重建成值
		if(lpCurrentLine[i]<0)lpCurrentLine[i]=0;
		else if(lpCurrentLine[i]>MAXVAL)lpCurrentLine[i]=MAXVAL;
		pp=lpPredictionBandCode->lpReconstructPrecedingLine[i];
		if((ppx=(Last_A_Mul*pp/UNIFORM_FLOAT_TO_INT_MUL+Last_B_Add))>PIX_ADD)ppx=pp;
		lpPrecedingLine[i]=lpPrecedingLine[i]+ppx-PIX_ADD;
		if(lpPrecedingLine[i]<0)lpPrecedingLine[i]=0;
		else if(lpPrecedingLine[i]>MAXVAL)lpPrecedingLine[i]=MAXVAL;
	}
}
void CAdvanceJepgLSOneLineCode::UpdateBandPrediction()//更新波段預測參數,更新變量A_Mul,B_Add,p。
{
	//時序要求: 參與統計的重建數據必須是當前象素之前的.
	int i,pp,pc,num,dp;
	__int64 Rxy,Sx,Mx,My,Sy;
	int aMul,bAdd;
	Rxy=Sx=Mx=My=Sy=0;
	for(i=0,num=0;i<X;i++)
	{
		pc=lpReconstructCurrentLine[i];//當前波段當前行象素重建值
		pp=lpPredictionBandCode->lpReconstructCurrentLine[i];//預測波段當前行象素重建值
		if((dp=pc-pp)<0)dp=-dp;//取得誤差絕對值
		if(dp<128||(((pp+pc)*4)/dp)>6/*和與差之比大于3/2時*/)
		{//當兩波段因特殊象素造成過大的誤異時不作為統計量
			num++;//統計量加1
			Rxy+=pc*pp;//相關統計量
			My+=pc;//當前波段和
			Sy+=pc*pc;//當前波段平方和
			Sx+=pp*pp;//預測波段平方和
			Mx+=pp;//預測波段和
		}
	}
	if(num<=0)return;
	//預測誤差方差的平方
	if(LineN<=1)PredictErr_D=(int)((Sy+Sx-Rxy-Rxy-(My-Mx)*(My-Mx)/num)/num);
	else PredictErr_D=(int)((PredictErr_D+(Sy+Sx-Rxy-Rxy-(My-Mx)*(My-Mx)/num)/num+1)/2);
	//累計統計量
	E_Cun+=My;
	E_Pre+=Mx;
	D_Cun+=Sy;
	D_Pre+=Sx;
	R_CunPre+=Rxy;
	StatisticLinN+=num;//相關系數統計的行計數
	if(StatisticLinN>=(UPDATE_RELATIVE_LINE_NUMBER*X-X/2)/*必須大于等于2*/)
	{//用即時相關系數控制是否預測
		//計算相關系數
		D_Cun=(D_Cun-(E_Cun*E_Cun/StatisticLinN))/StatisticLinN;//當前波段方差平方
		D_Pre=(D_Pre-(E_Pre*E_Pre/StatisticLinN))/StatisticLinN;//預測波段方差平方
		R_CunPre=(R_CunPre-E_Cun*E_Pre/StatisticLinN)/StatisticLinN;
		if((D_Cun*D_Pre)==0)p=UNIFORM_FLOAT_TO_INT_MUL;
		else p=(int)(R_CunPre*R_CunPre*UNIFORM_FLOAT_TO_INT_MUL/(D_Cun*D_Pre));//整數化相關系數平方
			
		//清0累計統量
		D_Cun=D_Pre=E_Cun=E_Pre=R_CunPre=0;
		StatisticLinN=0;
			
		//判斷是否預測
		if(p>ALLOW_PREDICTION_MIN_RELATIVE&&OpenOffBandPrediction==FALSE)
		{//相關系數大于最小允許預測的相關系數值,同時當前處在關閉波段預測的狀態時
			OpenBandPrediction();//打開波段預測允許
		}
		else if(p<NOT_PREDICTION_MAX_RELATIVE&&OpenOffBandPrediction==TRUE)
		{//相關系數小于最大不允許預測的相關系數值,同時當前處在打開波段預測的狀態時
			CloseBandPrediction();//關閉波段預測允許
		}
	}
	if(OpenOffBandPrediction==TRUE)
	{//允許波段預測時,用預測誤差的方差控制平坦區象素調節參數。
		if(PredictErr_D<(qNEAR*qNEAR)/2)//相當于預測誤差的方差處在誤差界2/3時
		{
			AdjustWinLength=BakAdjustWinLength+BakAdjustWinLength/2;//平坦區調節窗口加長
			if(LineN>2)
			{//將游程檢測及游程編碼入口門限設成最小值。
				RunTestThresholdStep=0;
				RunContext=SetRunContext[RunTestThresholdStep];
				MaxErrAdjust1=SetMaxErrAdjust1[RunTestThresholdStep];
				MaxErrAdjust2=SetMaxErrAdjust2[RunTestThresholdStep];
				DoubleMaxError=SetDoubleMaxError[RunTestThresholdStep];
				if(TestErrorMeLimen==0)
				{
					RunContext=DoubleMaxError=qNEAR;
				}
			}
		}
		else 
		{
			AdjustWinLength=BakAdjustWinLength;
			if(LineN>2)
			{//將游程檢測及游程編碼入口門限設成中間值。
				RunTestThresholdStep=1;
				RunContext=SetRunContext[RunTestThresholdStep];
				MaxErrAdjust1=SetMaxErrAdjust1[RunTestThresholdStep];
				MaxErrAdjust2=SetMaxErrAdjust2[RunTestThresholdStep];
				DoubleMaxError=SetDoubleMaxError[RunTestThresholdStep];
				if(TestErrorMeLimen==0)
				{
					RunContext=DoubleMaxError=qNEAR;
				}
			}
		}
	}
	else AdjustWinLength=BakAdjustWinLength;
	//更新預測系數
	Last_A_Mul=A_Mul;
	Last_B_Add=B_Add;
	if((Sx-Mx*Mx/num)==0)aMul=MAX_A_MUL;
	else aMul=(int)((Rxy-My*Mx/num)*UNIFORM_FLOAT_TO_INT_MUL/(Sx-Mx*Mx/num));
	bAdd=(int)((My-aMul*Mx/UNIFORM_FLOAT_TO_INT_MUL)/num);
	A_Mul=(A_Mul+aMul+1)/2;//新老系數取平均
	if(A_Mul>MAX_A_MUL)A_Mul=MAX_A_MUL;
	if(A_Mul<MIN_A_MUL)A_Mul=MIN_A_MUL;
	B_Add=(B_Add+bAdd+1)/2;//新老系數取平均
}
void CAdvanceJepgLSOneLineCode::InitialisationsCode(int OnePixelBit,int AllowMaxError)
{//初始化編碼器,在編碼器緩沖區準備如后
	int FACTOR;
	LineN=0;//行計數
	OneSampleBits=OnePixelBit;
	Pixel_ADD=1<<(OnePixelBit+1);
	AndCode=(1<<OnePixelBit)-1;
	MAXVAL=AndCode;
	qNEAR=AllowMaxError;
	if(MAXVAL>=128)
	{
		FACTOR=(((MAXVAL>4095)?4095:MAXVAL) + 128)/256;

		T1 = FACTOR * (BASIC_T1 - 2) + 2 + 3*qNEAR;
		if(T1>MAXVAL||T1<(qNEAR+1))T1=qNEAR+1;//CLAMP_1()

		T2 = FACTOR * (BASIC_T2 - 3) + 3 + 5*qNEAR;
		if(T2>MAXVAL||T2<T1)T2=T1;

		T3 = FACTOR * (BASIC_T3 - 4) + 4 + 7*qNEAR;
		if(T3>MAXVAL||T3<T2)T3=T2;
	}
	else
	{
		FACTOR = 256/(MAXVAL + 1);

		T1=BASIC_T1/FACTOR+3*qNEAR;
		if(T1<2)T1=2;
		if(T1>MAXVAL||T1<(qNEAR+1))T1=qNEAR+1;//CLAMP_1()

		T2=BASIC_T2/FACTOR+5*qNEAR;
		if(T2<3)T1=3;
		if(T2>MAXVAL||T2<T1)T2=T1;

		T3=BASIC_T3/FACTOR+7*qNEAR;
		if(T3<4)T1=4;
		if(T3>MAXVAL||T3<T2)T3=T2;
	}
/*1.	Compute the parameter RANGE,Compute the parameters 
	qbpp = [log RANGE], bpp = max(2, [log(MAXVAL+1)]), and LIMIT = 2 * (bpp + max(8,bpp))

qbpp 是待編碼的誤差動態范圍所需的比特數表示。
bpp  原圖像的比特數。
*/

	RANGE=(MAXVAL+2*qNEAR)/(2*qNEAR+1)+1;
	for(qbpp=15;(RANGE&(1<<qbpp))==0;qbpp--);if(RANGE!=(1<<qbpp))qbpp++;
	for(bpp=15;((MAXVAL+1)&(1<<bpp))==0;bpp--);if((MAXVAL+1)!=(1<<bpp))bpp++;if(bpp<2)bpp=2;
	LIMIT=2*(bpp+((bpp>8)?bpp:8));//為規則方式中的GOLOMB編碼用的最大碼長限度

	lpCurrentLine=lpBuf1;
	ZeroMemory(lpCurrentLine,X*sizeof(int));
	lpPrecedingLine=lpBuf2;
	ZeroMemory(lpPrecedingLine,X*sizeof(int));
	lpThirdLine=lpBuf3;
	ZeroMemory(lpThirdLine,X*sizeof(int));
	//附加編碼器的復位
	lpDErrNumberFastCoding->Reset();
	lpDErrRunFastCoding->Reset();
	lpDDErrNumberFastCoding->Reset();
	lpDDErrRunFastCoding->Reset();
	lpTwoAdjustNumberFastCoding->Reset();
	lpTwoAdjustRunFastCoding->Reset();
	lpAdjustNumberFastCoding->Reset();
	lpAdjustRunFastCoding->Reset();

	//初始化游程檢測及游程編碼入口門限
	SetDoubleMaxError[0]=MIN_MDoubleMaxErr(qNEAR);
	SetRunContext[0]=MIN_MINCONTEXT(qNEAR);
	SetMaxErrAdjust1[0]=MIN_MDoubleMaxErrAdjust(qNEAR);
	SetMaxErrAdjust2[0]=MIN_MDoubleMaxErrAdjust2(qNEAR);

	SetDoubleMaxError[1]=MID_MDoubleMaxErr(qNEAR);
	SetRunContext[1]=MID_MINCONTEXT(qNEAR);
	SetMaxErrAdjust1[1]=MID_MDoubleMaxErrAdjust(qNEAR);
	SetMaxErrAdjust2[1]=MID_MDoubleMaxErrAdjust2(qNEAR);

	SetDoubleMaxError[2]=MAX_MDoubleMaxErr(qNEAR);
	SetRunContext[2]=MAX_MINCONTEXT(qNEAR);
	SetMaxErrAdjust1[2]=MAX_MDoubleMaxErrAdjust(qNEAR);
	SetMaxErrAdjust2[2]=MAX_MDoubleMaxErrAdjust2(qNEAR);

	RunTestThresholdStep=1;
	RunContext=SetRunContext[RunTestThresholdStep];
	MaxErrAdjust1=SetMaxErrAdjust1[RunTestThresholdStep];
	MaxErrAdjust2=SetMaxErrAdjust2[RunTestThresholdStep];
	DoubleMaxError=SetDoubleMaxError[RunTestThresholdStep];

	//初始化平坦區象素調節編碼控制參數
	TestErrorMeLimen=MTestErrMeLimen(qNEAR);
	if(TestErrorMeLimen==0)
	{
		RunContext=qNEAR;
		DoubleMaxError=qNEAR;
	}
	else
	{
		RunContext=SetRunContext[RunTestThresholdStep];
		DoubleMaxError=SetDoubleMaxError[RunTestThresholdStep];
	}
	AdjustNumber=1000;
	AllTestNumber=20;
	AdjustWinLength=BakAdjustWinLength=DEFAULT_ADJUST_WIN_LENGTH;
	//初始化波段預測參數
	if(AllowBandPrediction==TRUE)
	{
		InitBandPrediction();
	}
	else OpenOffBandPrediction=FALSE;
	//初始口化上下文
	for(Q=0;Q<365;Q++)
	{
		B[Q]=C[Q]=0;
	}
	for(Q=0;Q<367;Q++)
	{
		A[Q]=(RANGE+32)/64;
		if(A[Q]<2)A[Q]=2;
		N[Q]=1;
	}
	//初始化游程編碼碼表
	RUNindex=0;
	J[0]=J[1]=J[2]=J[3] = 0;
	J[4]=J[5]=J[6]=J[7] = 1;
	J[8]=J[9]=J[10]=J[11]=2;
	J[12]=J[13]=J[14]=J[15]=3;
	J[16]=J[17]=4;
	J[18]=J[19]=5;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日本视频在线| 国产91精品精华液一区二区三区 | 久久久99精品久久| 久久精品国产精品亚洲精品| 日韩色在线观看| 国产主播一区二区| 中文字幕在线不卡视频| 91小视频免费看| 亚洲观看高清完整版在线观看| 欧美日韩国产高清一区二区三区 | 精品系列免费在线观看| 久久九九久久九九| 色综合久久综合网欧美综合网| 亚洲综合一区二区| 欧美大尺度电影在线| 国产69精品久久久久毛片| 亚洲天堂免费在线观看视频| 久久精品国产精品亚洲红杏| 91在线精品一区二区三区| 亚洲卡通欧美制服中文| 91精品国产91综合久久蜜臀| 国产美女精品一区二区三区| 亚洲卡通动漫在线| 精品国产乱码久久久久久夜甘婷婷| 国产成人在线视频网址| 夜色激情一区二区| 精品1区2区在线观看| 99久免费精品视频在线观看| 天天综合天天做天天综合| 久久久美女毛片| 欧美性videosxxxxx| 国产在线播放一区二区三区 | 亚洲欧美另类久久久精品2019| 欧美精品九九99久久| 成人综合激情网| 日本在线不卡视频| 亚洲免费成人av| 久久亚洲私人国产精品va媚药| 99精品欧美一区二区蜜桃免费| 男男gaygay亚洲| 亚洲免费观看高清在线观看| 久久综合成人精品亚洲另类欧美 | 国产成人一级电影| 婷婷丁香激情综合| 亚洲天堂免费看| 久久久久久久综合色一本| 在线观看亚洲a| 成人av午夜电影| 国产精品一区二区久激情瑜伽| 午夜精品一区二区三区三上悠亚| 国产精品美女久久久久aⅴ国产馆| 91精品国产综合久久久久久久| av毛片久久久久**hd| 精品在线免费观看| 日本午夜精品一区二区三区电影| 国产精品护士白丝一区av| 久久久久久一级片| 精品国产一区二区三区四区四 | 久久久久久一级片| 精品国产网站在线观看| 91精品国产麻豆国产自产在线| 欧美三级一区二区| 在线视频中文字幕一区二区| av动漫一区二区| 99精品热视频| 91色综合久久久久婷婷| 91片在线免费观看| 色综合久久久久综合体| jizzjizzjizz欧美| 成人性视频免费网站| 成人一级视频在线观看| 成人网男人的天堂| av在线播放不卡| 色综合久久99| 在线观看一区不卡| 欧美电影一区二区| 日韩限制级电影在线观看| 欧美一区二区三区色| 欧美一区二区网站| 精品美女被调教视频大全网站| 精品国产成人系列| 欧美国产日韩在线观看| 国产精品美日韩| 亚洲欧美福利一区二区| 亚洲国产成人va在线观看天堂| 亚洲韩国精品一区| 男人操女人的视频在线观看欧美| 日日摸夜夜添夜夜添亚洲女人| 日本成人在线不卡视频| 极品销魂美女一区二区三区| 国产精品一区在线| 不卡一区在线观看| 欧美三级电影网站| 欧美电影免费提供在线观看| 久久久久久免费毛片精品| 亚洲视频狠狠干| 婷婷综合另类小说色区| 国产乱码精品一区二区三区av| 成人a级免费电影| 欧美日韩国产123区| 日韩精品中文字幕一区| 国产网站一区二区| 亚洲国产精品影院| 激情久久五月天| 菠萝蜜视频在线观看一区| 欧美少妇一区二区| 欧美精品一区二区久久久| 中文字幕在线不卡一区二区三区| 亚洲高清免费一级二级三级| 久久福利视频一区二区| 91麻豆福利精品推荐| 91麻豆精品国产91久久久资源速度 | 日本不卡在线视频| 丁香啪啪综合成人亚洲小说| 欧美日韩亚洲综合在线| 久久男人中文字幕资源站| 亚洲午夜久久久久| 国产寡妇亲子伦一区二区| 欧美性猛交xxxx黑人交| 久久亚洲综合av| 午夜私人影院久久久久| 成人亚洲一区二区一| 欧美一二三区精品| 亚洲视频一二三区| 国产精品白丝av| 88在线观看91蜜桃国自产| 亚洲视频在线观看一区| 激情五月激情综合网| 欧美高清你懂得| 亚洲三级理论片| 国产在线视频一区二区| 欧美丰满少妇xxxbbb| 最新国产成人在线观看| 国产在线观看一区二区| 777色狠狠一区二区三区| 亚洲色图在线播放| 国产精品亚洲综合一区在线观看| 欧美年轻男男videosbes| 中文字幕一区视频| 国产精品 欧美精品| 日韩欧美综合在线| 天天综合色天天| 在线视频你懂得一区二区三区| 欧美激情资源网| 国产一区二区免费看| 日韩一区二区三区av| 午夜精品免费在线| 欧美在线啊v一区| 亚洲综合网站在线观看| 99re在线视频这里只有精品| 国产欧美日韩麻豆91| 国产剧情一区二区| 久久综合久久99| 国产一区二区在线观看视频| 日韩一区二区三区免费看 | 国产午夜精品久久| 国产一区二区主播在线| 精品入口麻豆88视频| 男人操女人的视频在线观看欧美| 欧美精品一二三四| 日本怡春院一区二区| 日韩一级免费观看| 久久99国产精品免费网站| 欧美xxxxx裸体时装秀| 国产一区二区三区在线看麻豆| 日韩一区二区在线免费观看| 青青青伊人色综合久久| 欧美第一区第二区| 国产一区在线精品| 国产精品日韩精品欧美在线| 成人免费视频app| 亚洲人亚洲人成电影网站色| 97精品国产露脸对白| 亚洲美女区一区| 欧美日韩免费观看一区三区| 午夜精品福利在线| 欧美一级久久久| 国产精品综合网| 成人免费在线视频| 91精品1区2区| 喷水一区二区三区| 久久精品一区二区三区不卡牛牛| 国产精品99久久久久久似苏梦涵| 欧美国产精品v| 一本色道久久加勒比精品| 一区二区三国产精华液| 4hu四虎永久在线影院成人| 麻豆国产欧美一区二区三区| 久久久久久久久久久99999| 粉嫩绯色av一区二区在线观看 | 偷窥少妇高潮呻吟av久久免费| 欧美一级欧美三级在线观看| 国产一区日韩二区欧美三区| 1000部国产精品成人观看| 欧美日韩国产综合草草| 国产酒店精品激情| 亚洲五码中文字幕| 久久久久久日产精品| 欧美色倩网站大全免费| 国产在线视频一区二区|