亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
久久99精品国产麻豆婷婷| 91在线视频网址| 国产成人在线免费观看| bt7086福利一区国产| 欧美手机在线视频| 欧美成va人片在线观看| 国产精品九色蝌蚪自拍| 亚洲成人在线观看视频| 国产在线乱码一区二区三区| 91在线视频网址| 日韩精品一区二区三区四区 | 欧美激情自拍偷拍| 一区二区三区在线视频播放| 日本中文字幕一区二区视频 | 国产欧美一区二区在线| 亚洲最大成人综合| 国产在线观看免费一区| 色8久久人人97超碰香蕉987| 精品成人一区二区三区| 亚洲女与黑人做爰| 国内精品久久久久影院一蜜桃| 99视频国产精品| 欧美mv和日韩mv的网站| 亚洲一区二区三区中文字幕在线| 国产美女在线观看一区| 精品视频一区三区九区| 国产精品久久久久国产精品日日| 秋霞影院一区二区| 一本久久a久久精品亚洲| 久久久综合网站| 五月天网站亚洲| 99久久免费精品| 久久综合九色欧美综合狠狠| 午夜天堂影视香蕉久久| 96av麻豆蜜桃一区二区| 久久久亚洲综合| 青娱乐精品视频在线| 色噜噜偷拍精品综合在线| 国产欧美视频在线观看| 麻豆精品在线看| 欧美色图第一页| 亚洲视频在线观看三级| 国产99精品国产| 欧美成人a∨高清免费观看| 亚洲444eee在线观看| 色综合久久久久久久| 国产精品情趣视频| 国产一区91精品张津瑜| 日韩一区二区三区视频| 午夜免费久久看| 欧美四级电影在线观看| 亚洲综合男人的天堂| 99精品久久免费看蜜臀剧情介绍| 久久精品一区二区| 激情久久五月天| 日韩欧美专区在线| 日本三级韩国三级欧美三级| 欧美日韩日本视频| 亚洲福利视频三区| 欧美三级电影网站| 亚洲已满18点击进入久久| 99re8在线精品视频免费播放| 国产午夜精品久久久久久久 | 国产精品久久久久久福利一牛影视 | 97se亚洲国产综合自在线观| 国产午夜亚洲精品理论片色戒| 国产一区二区三区免费看| 日韩一区二区在线播放| 免费日韩伦理电影| 91精品久久久久久蜜臀| 男人的天堂亚洲一区| 91精品国产欧美日韩| 蜜臀va亚洲va欧美va天堂 | 国产一区二区在线电影| 精品成人私密视频| 国产成人精品免费网站| 欧美国产欧美亚州国产日韩mv天天看完整| 国产麻豆成人传媒免费观看| 国产三级精品视频| 成人晚上爱看视频| **欧美大码日韩| 91九色02白丝porn| 五月婷婷久久丁香| 日韩区在线观看| 国产一区二区成人久久免费影院| 久久久久国产精品人| 成人激情小说网站| 亚洲免费观看高清完整版在线| 欧美性感一区二区三区| 天堂久久久久va久久久久| 欧美一区二区三区免费观看视频| 久久精品国产**网站演员| 久久女同性恋中文字幕| 成人免费视频视频在线观看免费| 18欧美亚洲精品| 欧美熟乱第一页| 久久av资源网| 国产欧美一区二区三区沐欲| 91伊人久久大香线蕉| 亚洲成人资源网| 久久综合国产精品| 99久久精品国产精品久久| 亚洲国产sm捆绑调教视频 | 国产麻豆成人传媒免费观看| 亚洲欧洲日韩综合一区二区| 欧美亚洲动漫另类| 激情亚洲综合在线| 自拍偷拍亚洲欧美日韩| 正在播放亚洲一区| 国产99久久久国产精品潘金网站| 亚洲精品视频一区二区| 日韩一区二区高清| www.99精品| 免费观看在线综合| 国产精品色在线观看| 欧美另类久久久品| 国产91丝袜在线播放0| 亚洲一卡二卡三卡四卡| 久久这里只有精品6| 色欧美片视频在线观看| 久久国产欧美日韩精品| 亚洲视频在线一区二区| 精品国产一二三区| 日本久久精品电影| 国产一区二区福利| 午夜久久久影院| 国产精品久久夜| 欧美一级一区二区| 91欧美一区二区| 韩国欧美国产1区| 亚洲一级片在线观看| 国产精品嫩草影院com| 7777精品伊人久久久大香线蕉超级流畅 | 欧美浪妇xxxx高跟鞋交| 国产不卡在线一区| 男女男精品视频网| 亚洲久草在线视频| 久久综合一区二区| 欧美人伦禁忌dvd放荡欲情| 粉嫩aⅴ一区二区三区四区| 丝袜亚洲另类丝袜在线| 1000部国产精品成人观看| 久久人人97超碰com| 欧美精品久久一区二区三区 | 午夜激情综合网| 国产精品国产精品国产专区不片| 日韩欧美国产综合一区| 欧美在线观看视频一区二区 | 亚洲男人天堂一区| 国产午夜久久久久| 精品99一区二区| 欧美一区二区在线看| 91国在线观看| 99久久婷婷国产| 成人福利在线看| 国产呦精品一区二区三区网站| 午夜av区久久| 亚洲午夜电影在线观看| 亚洲三级免费电影| 中文欧美字幕免费| 国产亚洲成年网址在线观看| 精品久久久久久久久久久久久久久| 欧美日韩成人综合在线一区二区| 色综合天天综合网天天看片| 处破女av一区二区| 国产成人久久精品77777最新版本| 麻豆成人免费电影| 日本不卡免费在线视频| 亚洲a一区二区| 亚洲国产精品嫩草影院| 一区二区三区四区在线播放| 中文字幕日韩精品一区| 国产精品伦理一区二区| 亚洲国产精品成人综合色在线婷婷| 精品成人私密视频| 国产香蕉久久精品综合网| 国产视频一区在线播放| 久久久久久久久久电影| 久久久久免费观看| 久久久亚洲综合| 欧美韩日一区二区三区| 国产欧美一区二区精品久导航| 欧美国产成人在线| 中文字幕va一区二区三区| 国产精品午夜春色av| 国产精品欧美极品| 国产精品国产三级国产专播品爱网| 亚洲国产精华液网站w| 国产精品久久精品日日| 亚洲天堂中文字幕| 一区二区理论电影在线观看| 亚洲一二三区不卡| 亚洲福利视频一区| 奇米色777欧美一区二区| 蜜臀av一级做a爰片久久| 久久成人免费网站| 国产宾馆实践打屁股91| 成年人网站91| 色先锋久久av资源部| 欧美日韩一区二区三区在线|