亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
2021久久国产精品不只是精品| 亚洲三级在线免费| 欧美韩日一区二区三区四区| 亚洲精品国久久99热| 国产美女主播视频一区| 欧美日韩黄色影视| 亚洲欧美福利一区二区| 国产成人精品www牛牛影视| 91精品国产色综合久久ai换脸| 自拍偷拍国产亚洲| 国产精品一区专区| 国产综合一区二区| 亚洲高清久久久| 日韩美女视频一区| 精品一区二区三区免费毛片爱| 在线观看不卡视频| 国产精品视频麻豆| 国产在线精品免费| 精品久久久久久久一区二区蜜臀| 天天色天天操综合| 在线观看av一区| 亚洲欧洲成人精品av97| 国产成人精品一区二| 久久免费精品国产久精品久久久久| 日韩精品成人一区二区三区| 欧美在线你懂得| 亚洲mv在线观看| 欧美日韩视频专区在线播放| 一区二区三区精品视频| 91免费观看国产| 亚洲免费资源在线播放| 色吊一区二区三区| 亚洲福中文字幕伊人影院| 欧美性生交片4| 午夜精品福利一区二区三区av | 国产精品456露脸| 亚洲精品在线观看视频| 黄色精品一二区| 久久综合色婷婷| 国产高清精品久久久久| 国产精品视频yy9299一区| 成人精品鲁一区一区二区| 国产精品你懂的在线欣赏| 99vv1com这只有精品| 一区二区三区.www| 欧美一级视频精品观看| 国产一区二区三区免费播放| 国产欧美精品一区二区三区四区| 国产成人在线电影| 亚洲精选免费视频| 4438x亚洲最大成人网| 激情五月播播久久久精品| 国产精品视频观看| 欧美日韩精品一区二区三区四区 | 精品国产乱码久久久久久老虎 | 日韩视频免费观看高清完整版| 久久精品av麻豆的观看方式| 久久久久久久久久电影| 94色蜜桃网一区二区三区| 亚洲一二三四久久| 精品国产乱码91久久久久久网站| youjizz国产精品| 亚洲成av人影院| 国产清纯白嫩初高生在线观看91| 91在线小视频| 免费欧美日韩国产三级电影| 国产欧美一区二区精品性色 | 成人污视频在线观看| 亚洲图片欧美色图| 久久免费视频一区| 欧美三级电影在线看| 国产精品911| 日韩成人午夜电影| 亚洲视频狠狠干| 欧美xxxxx裸体时装秀| 色天天综合久久久久综合片| 极品少妇一区二区三区精品视频 | 亚洲另类色综合网站| 日韩欧美中文字幕制服| 91视频国产资源| 国产老肥熟一区二区三区| 亚洲成av人片在线| 中文字幕日韩一区二区| 日韩精品中文字幕一区| 色婷婷亚洲一区二区三区| 国产伦精品一区二区三区免费| 亚洲韩国一区二区三区| 国产精品伦一区| 久久久久国产精品麻豆ai换脸| 欧美群妇大交群中文字幕| 99热99精品| 国产大片一区二区| 韩国av一区二区三区在线观看| 午夜欧美在线一二页| 亚洲精品国产第一综合99久久| 日本一区二区三区四区在线视频 | 中文字幕国产一区二区| 日韩欧美中文字幕一区| 欧美日韩不卡在线| 欧美日韩精品一二三区| 91高清视频免费看| 91视频一区二区| 99re热视频精品| eeuss影院一区二区三区| 成人性生交大片免费看中文网站| 久草中文综合在线| 久久成人久久爱| 美女视频黄 久久| 免费一级片91| 蜜桃久久久久久| 精品综合久久久久久8888| 免费欧美高清视频| 久久99精品久久只有精品| 精品一区二区影视| 国产一区二区三区日韩| 国产成人综合网站| www.欧美日韩| 色综合久久综合中文综合网| 欧洲精品视频在线观看| 欧美日韩极品在线观看一区| 91精品国产综合久久精品图片| 欧美一区二区高清| 欧美mv日韩mv国产网站| 欧美精品一区二区蜜臀亚洲| 久久久亚洲高清| 国产欧美日韩亚州综合 | 亚洲免费在线电影| 亚洲自拍偷拍麻豆| 日本午夜一区二区| 九色综合狠狠综合久久| 国产成人av一区二区三区在线观看| 国产精品亚洲综合一区在线观看| 国产v日产∨综合v精品视频| 99精品视频在线播放观看| 欧美色图免费看| 日韩小视频在线观看专区| 久久精品欧美一区二区三区麻豆| 中文字幕在线不卡一区| 亚洲最快最全在线视频| 日韩av在线发布| 国产白丝精品91爽爽久久| 欧美午夜影院一区| 久久综合久色欧美综合狠狠| 亚洲天堂网中文字| 日本午夜一区二区| 99精品视频在线免费观看| 欧美精品第一页| 国产精品毛片a∨一区二区三区| 亚洲尤物在线视频观看| 激情文学综合插| 欧亚洲嫩模精品一区三区| 久久婷婷色综合| 亚洲午夜久久久久久久久久久| 麻豆精品视频在线观看| 色综合久久九月婷婷色综合| 欧美一区二区福利视频| 亚洲另类中文字| 国产精品77777| 91精品国产美女浴室洗澡无遮挡| 欧美激情在线一区二区三区| 无码av免费一区二区三区试看| 国产精品主播直播| 91精品国产丝袜白色高跟鞋| 成人免费小视频| 国产精品中文欧美| 欧美久久久一区| 亚洲视频每日更新| 国产成人亚洲综合a∨婷婷图片| 欧美美女直播网站| 亚洲美女少妇撒尿| 国产 日韩 欧美大片| 日韩三级在线观看| 午夜精品久久久久久久久久久 | 欧美一级日韩免费不卡| 亚洲激情自拍视频| 床上的激情91.| 精品国产成人系列| 奇米在线7777在线精品| 精品视频色一区| 亚洲一卡二卡三卡四卡无卡久久 | eeuss鲁一区二区三区| 久久久午夜精品| 九色porny丨国产精品| 欧美人伦禁忌dvd放荡欲情| 一区二区在线观看视频| 成人午夜激情视频| 国产欧美日韩视频一区二区| 久热成人在线视频| 日韩无一区二区| 天天亚洲美女在线视频| 欧美色图激情小说| 亚洲一二三区在线观看| 欧美亚洲一区二区在线观看| 亚洲精品美腿丝袜| 91免费看`日韩一区二区| 亚洲欧美激情插| 91原创在线视频| 亚洲乱码国产乱码精品精的特点| 91免费视频大全| 亚洲午夜久久久久久久久电影网|