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

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

?? macroblock.c

?? Mobile IP VCEG的信道模擬程序
?? C
?? 第 1 頁 / 共 4 頁
字號:
// *************************************************************************************
// *************************************************************************************
// Macroblock.c  Process one macroblock
//
// Main contributors (see contributors.h for copyright, address and affiliation details)
//
// Inge Lille-Lang鴜               <inge.lille-langoy@telenor.com>
// Rickard Sjoberg                 <rickard.sjoberg@era.ericsson.se>
// Jani Lainema                    <jani.lainema@nokia.com>
// Sebastian Purreiter             <sebastian.purreiter@mch.siemens.de>
// Detlev Marpe                    <marpe@hhi.de>
// Thomas Wedi                     <wedi@tnt.uni-hannover.de>
// *************************************************************************************
// *************************************************************************************
#include "contributors.h"

#include <math.h>
#include <stdlib.h>

#include "global.h"
#include "elements.h"
#include "macroblock.h"
#include "refbuf.h"

#include <stdio.h>


/************************************************************************
*
*  Name :       proceed2nextMacroblock()
*
*  Description: updates the coordinates and statistics parameter for the 
*				next macroblock
*
************************************************************************/
void proceed2nextMacroblock()
{
#if TRACE	
  int use_bitstream_backing = (input->slice_mode == FIXED_RATE || input->slice_mode == CALLBACK);
#endif
	const int number_mb_per_row = img->width / MB_BLOCK_SIZE ;
	Macroblock *currMB = &img->mb_data[img->current_mb_nr];

#if TRACE
	int i;
	if(use_bitstream_backing)
		fprintf(p_trace, "\n*********** Pic: %i (I/P) MB: %i Slice: %i **********\n\n", frame_no, img->current_mb_nr, img->current_slice_nr);
	/* Write out the tracestring for each symbol */
	for (i=0; i<currMB->currSEnr; i++)
		trace2out(&(img->MB_SyntaxElements[i]));
#endif
	
	/* Update the statistics */
	stat->bit_use_head_mode[img->type]		+= currMB->bitcounter[BITS_HEADER_MB];
	stat->bit_use_coeffY[img->type]				+= currMB->bitcounter[BITS_COEFF_Y_MB] ;
	stat->bit_use_mode_inter[img->mb_mode]+= currMB->bitcounter[BITS_INTER_MB];
	stat->tmp_bit_use_cbp[img->type]			+= currMB->bitcounter[BITS_CBP_MB];
	stat->bit_use_coeffC[img->type]				+= currMB->bitcounter[BITS_COEFF_UV_MB];

	if (input->symbol_mode == UVLC)
		stat->bit_ctr += currMB->bitcounter[BITS_TOTAL_MB];
	if (img->type==INTRA_IMG)
		++stat->mode_use_intra[img->mb_mode];   
	else
		if (img->type != B_IMG)
			++stat->mode_use_inter[img->mb_mode];
		else
			++stat->mode_use_Bframe[img->mb_mode];
	
	/* Update coordinates of macroblock */
	img->mb_x++;
	if (img->mb_x == number_mb_per_row) /* next row of MBs */
	{
		img->mb_x = 0; /* start processing of next row */
		img->mb_y++;
	}
	img->current_mb_nr++;
	

	/* Define vertical positions */
	img->block_y = img->mb_y * BLOCK_SIZE;      /* vertical luma block position */
	img->pix_y   = img->mb_y * MB_BLOCK_SIZE;   /* vertical luma macroblock position */
	img->pix_c_y = img->mb_y * MB_BLOCK_SIZE/2; /* vertical chroma macroblock position */

	if (img->type != B_IMG)
	  {
		if (input->intra_upd > 0 && img->mb_y <= img->mb_y_intra)
			img->height_err=(img->mb_y_intra*16)+15;     /* for extra intra MB */
		else
			img->height_err=img->height-1;
	  }
	
	/* Define horizontal positions */
	img->block_x = img->mb_x * BLOCK_SIZE;        /* luma block           */
	img->pix_x   = img->mb_x * MB_BLOCK_SIZE;     /* luma pixel           */
	img->block_c_x = img->mb_x * BLOCK_SIZE/2;    /* chroma block         */
	img->pix_c_x   = img->mb_x * MB_BLOCK_SIZE/2; /* chroma pixel         */
	
	/* Statistics */
	if (img->type == INTER_IMG)
	{
		++stat->quant0;
		stat->quant1 += img->qp;      /* to find average quant for inter frames */
	}
}

/************************************************************************
*
*  Name :       start_macroblock()
*
*  Description: initializes the current macroblock
*
************************************************************************/
void start_macroblock()
{
	int i,j,k,l;
	int x,y;
	int use_bitstream_backing = (input->slice_mode == FIXED_RATE || input->slice_mode == CALLBACK);
	Macroblock *currMB = &img->mb_data[img->current_mb_nr];
	Slice *curr_slice = img->currentSlice;
	DataPartition *dataPart;
	Bitstream *currStream;

	if(use_bitstream_backing)
	{
		/* Save loopb and loopc in the case of recoding this macroblock */
		for(x = 0 ; x<6 ; x++) 
			for(y = 0 ; y<6 ; y++)
				img->tmp_loop_Y[x][y] = loopb[img->block_x+x][img->block_y+y];
		for(x=0 ; x<4 ; x++) 
			for(y=0 ; y<4 ; y++)
				img->tmp_loop_UV[x][y] = loopc[img->block_x/2+x][img->block_y/2+y];

		/* Keep the current state of the bitstreams */
		for (i=0; i<curr_slice->max_part_nr; i++)
		{
			dataPart = &(curr_slice->partArr[i]);
			currStream = dataPart->bitstream;
			currStream->stored_bits_to_go = currStream->bits_to_go;
			currStream->stored_byte_pos		= currStream->byte_pos;
			currStream->stored_byte_buf		= currStream->byte_buf;
		}
	}
	
	/* Save the slice number of this macroblock. When the macroblock below     */
	/* is coded it will use this to decide if prediction for above is possible */
	img->slice_numbers[img->current_mb_nr] = img->current_slice_nr;

	/* Save the slice and macroblock number of the current MB */
	currMB->slice_nr = img->current_slice_nr;

	/* Initialize counter for MB symbols */
	currMB->currSEnr=0;

	/* If MB is next to a slice boundary, mark neighboring blocks unavailable for prediction */
	CheckAvailabilityOfNeighbors(img);

	/* Reset vectors before doing motion search in motion_search(). */
	if (img->type != B_IMG)
	{
		for (k=0; k < 2; k++)
		{
			for (j=0; j < BLOCK_MULTIPLE; j++)
				for (i=0; i < BLOCK_MULTIPLE; i++)
					tmp_mv[k][img->block_y+j][img->block_x+i+4]=0;
		}
	}

	/* Reset syntax element entries in MB struct */
	currMB->mb_type = 0;
	currMB->ref_frame = 0;
	currMB->cbp = 0;

	for (l=0; l < 2; l++)
		for (j=0; j < BLOCK_MULTIPLE; j++)
			for (i=0; i < BLOCK_MULTIPLE; i++)
				for (k=0; k < 2; k++)
					currMB->mvd[l][j][i][k] = 0;

	for (i=0; i < (BLOCK_MULTIPLE*BLOCK_MULTIPLE); i++)
		currMB->intra_pred_modes[i] = 0;


	/* Initialize bitcounters for this macroblock */
	if(img->current_mb_nr == 0) /* No slice header to account for */
	{
		currMB->bitcounter[BITS_HEADER_MB] = 0;
	}
	else
		if (img->slice_numbers[img->current_mb_nr] == img->slice_numbers[img->current_mb_nr-1]) /* current MB belongs to the */
																																														/* same slice as the last MB */
		{
			currMB->bitcounter[BITS_HEADER_MB] = 0;
		}

	currMB->bitcounter[BITS_COEFF_Y_MB] = 0;
	currMB->bitcounter[BITS_INTER_MB] = 0;
	currMB->bitcounter[BITS_CBP_MB] = 0;
	currMB->bitcounter[BITS_COEFF_UV_MB] = 0;


#ifdef _FAST_FULL_ME_
	ResetFastFullIntegerSearch ();
#endif
}

/************************************************************************
*
*  Name :       terminate_macroblock()
*
*  Description: terminates processing of the current macroblock depending
*								on the chosen slice mode
*
************************************************************************/
void terminate_macroblock(Boolean *end_of_slice, Boolean *recode_macroblock)
{
	int i,x,y;
	int mb_nr = img->current_mb_nr;
	Slice *curr_slice = img->currentSlice;
	DataPartition *dataPart; 
	Bitstream *currStream;
	
	EncodingEnvironmentPtr eep;
	
	static unsigned int   ElowS, EhighS;
    static unsigned int   EbufferS;
    static unsigned int   Ebits_to_goS;
    static unsigned int   Ebits_to_followS;
    static byte		      *EcodestrmS;
    static int			  *Ecodestrm_lenS;
	static int			  save_eep=0;	

	switch(input->slice_mode)
	{
		case NO_SLICES:
			*recode_macroblock = FALSE;
			if ((mb_nr+1) == img->total_number_mb) /* maximum number of MBs */
				*end_of_slice = TRUE; 
			break;
		case FIXED_MB:
			/* For slice mode one, check if a new slice boundary follows */
			*recode_macroblock = FALSE;
			if ( ((mb_nr+1) % input->slice_argument == 0) || ((mb_nr+1) == img->total_number_mb) )
			{
				*end_of_slice = TRUE; 
			}
			break;

		/* For slice modes two and three, check if coding of this macroblock */
		/* resulted in too many bits for this slice. If so, indicate slice   */
		/* boundary before this macroblock and code the macroblock again     */
		case FIXED_RATE:
			if (input->symbol_mode ==CABAC)
			{
				dataPart= &(curr_slice->partArr[0]);
				eep = &(dataPart->ee_cabac);
				stat->bit_slice  = arienco_bits_written(eep); 
			}
			if (mb_nr > 0 && img->mb_data[mb_nr-1].slice_nr == img->current_slice_nr)
			{
				if (stat->bit_slice > input->slice_argument*8)
				{
					//printf("MB: %d\tBits: %d\n",mb_nr,stat->bit_slice);
					//TO get status of the eep at the last mb in this slice
					if (input->symbol_mode ==CABAC)  
					{
						eep->Elow            = ElowS;
						eep->Ehigh           = EhighS;
						eep->Ebuffer         = EbufferS;
						eep->Ebits_to_go     = Ebits_to_goS;
						eep->Ebits_to_follow = Ebits_to_followS;
						eep->Ecodestrm       = EcodestrmS;
						eep->Ecodestrm_len   = Ecodestrm_lenS;
					}	
					*recode_macroblock = TRUE;
					*end_of_slice = TRUE;
				} 
			} 
			if ( (*recode_macroblock == FALSE) && ((mb_nr+1) == img->total_number_mb) )	/* maximum number of MBs */
				*end_of_slice = TRUE; 
			
			if (input->symbol_mode == CABAC) //TO: save current status of the eep
			{
				ElowS            = eep->Elow;
				EhighS           = eep->Ehigh;
				EbufferS         = eep->Ebuffer;
				Ebits_to_goS     = eep->Ebits_to_go;
				Ebits_to_followS = eep->Ebits_to_follow;
				EcodestrmS       = eep->Ecodestrm;
				Ecodestrm_lenS   = eep->Ecodestrm_len;
			}
			break;

		case	CALLBACK:
			if (mb_nr > 0 && img->mb_data[mb_nr-1].slice_nr == img->current_slice_nr)
			{
				if (curr_slice->slice_too_big(stat->bit_slice))
				{
					*recode_macroblock = TRUE;
					*end_of_slice = TRUE;
				}
			}
			if ( (*recode_macroblock == FALSE) && ((mb_nr+1) == img->total_number_mb) )	/* maximum number of MBs */
				*end_of_slice = TRUE; 
			break;
		default:
			fprintf(stderr, "Slice Mode %d not supported", input->slice_mode);
			exit(1);
	}
		
	if(*recode_macroblock == TRUE)
	{
		/* Restore the state of the bitstreams */
		for (i=0; i<curr_slice->max_part_nr; i++)
		{
			dataPart = &(curr_slice->partArr[i]);
			currStream = dataPart->bitstream;
			currStream->bits_to_go	= currStream->stored_bits_to_go;
			currStream->byte_pos	= currStream->stored_byte_pos;
			currStream->byte_buf	= currStream->stored_byte_buf;
		}

		/* Restore loopb and loopc before coding the MB again*/
		for(x = 0 ; x<6 ; x++) for(y = 0 ; y<6 ; y++)
			loopb[img->block_x+x][img->block_y+y] = img->tmp_loop_Y[x][y];
		for(x=0 ; x<4 ; x++) for(y=0 ; y<4 ; y++)
			loopc[img->block_x/2+x][img->block_y/2+y] = img->tmp_loop_UV[x][y];
	}

}

/************************************************************************
*
*  Name :       CheckAvailabilityOfNeighbors(struct img_par *img)
*
*  Description: Checks the availability of neighboring macroblocks of 
*								the current macroblock for prediction and context determination;
*								marks the unavailable MBs for intra prediction in the 
*								ipredmode-array by -1. Only neighboring MBs in the causal 
*								past of the current MB are checked.
*
************************************************************************/
void CheckAvailabilityOfNeighbors()
{
	int i,j;
	const int mb_width = img->width/MB_BLOCK_SIZE;
	const int mb_nr = img->current_mb_nr;
	Macroblock *currMB = &img->mb_data[mb_nr];

	/* mark all neighbors as unavailable */
	for (i=0; i<3; i++)
		for (j=0; j<3; j++)
			img->mb_data[mb_nr].mb_available[i][j]=NULL;
	img->mb_data[mb_nr].mb_available[1][1]=currMB; /* current MB */

	/* Check MB to the left */
	if(img->pix_x >= MB_BLOCK_SIZE)
	{
		if(currMB->slice_nr != img->mb_data[mb_nr-1].slice_nr)
		{
			img->ipredmode[img->block_x][img->block_y+1] = -1;
			img->ipredmode[img->block_x][img->block_y+2] = -1;
			img->ipredmode[img->block_x][img->block_y+3] = -1;
			img->ipredmode[img->block_x][img->block_y+4] = -1;
		} else
				currMB->mb_available[1][0]=&(img->mb_data[mb_nr-1]);
	} 


	/* Check MB above */
	if(img->pix_y >= MB_BLOCK_SIZE)
	{
		if(currMB->slice_nr != img->mb_data[mb_nr-mb_width].slice_nr)
		{
			img->ipredmode[img->block_x+1][img->block_y] = -1;
			img->ipredmode[img->block_x+2][img->block_y] = -1;
			img->ipredmode[img->block_x+3][img->block_y] = -1;
			img->ipredmode[img->block_x+4][img->block_y] = -1;
		} else
				currMB->mb_available[0][1]=&(img->mb_data[mb_nr-mb_width]);
	}

	/* Check MB left above */
	if(img->pix_x >= MB_BLOCK_SIZE && img->pix_y  >= MB_BLOCK_SIZE )
	{
		if(currMB->slice_nr == img->mb_data[mb_nr-mb_width-1].slice_nr)
			img->mb_data[mb_nr].mb_available[0][0]=&(img->mb_data[mb_nr-mb_width-1]);
	}

	/* Check MB right above */
	if(img->pix_y >= MB_BLOCK_SIZE && img->pix_x < (img->width-MB_BLOCK_SIZE ))
	{
		if(currMB->slice_nr == img->mb_data[mb_nr-mb_width+1].slice_nr)
		//	currMB->mb_available[0][1]=&(img->mb_data[mb_nr-mb_width+1]);
		currMB->mb_available[0][2]=&(img->mb_data[mb_nr-mb_width+1]);
	}
}

/************************************************************************
*
*  Name :       MakeIntraPrediction()
*
*  Description: Performs 4x4 and 16x16 intra prediction and transform coding
*								of the prediction residue. The routine returns the best cost; 
*								current cbp (for LUMA only) and intra pred modes are affected 
*
************************************************************************/
int MakeIntraPrediction(int *intra_pred_mode_2)
{

	int i,j;
	int block_x, block_y;
	int best_ipmode=0;
	int tot_intra_sad, tot_intra_sad2, best_intra_sad, current_intra_sad;
	int coeff_cost; // not used
	int pic_pix_y,pic_pix_x,pic_block_y,pic_block_x;
	int last_ipred=0;								        /* keeps last chosen intra prediction mode for 4x4 intra pred */
	int ipmode;                           /* intra pred mode */
	int nonzero;                          /* keep track of nonzero coefficients */
	int cbp_mask;
	Macroblock *currMB = &img->mb_data[img->current_mb_nr];

	/* start making 4x4 intra prediction */
	currMB->cbp=0;
	img->mb_data[img->current_mb_nr].intraOrInter = INTRA_MB_4x4;

	tot_intra_sad=QP2QUANT[img->qp]*24;/* sum of intra sad values, start with a 'handicap'*/
		
	for(block_y = 0 ; block_y < MB_BLOCK_SIZE ; block_y += BLOCK_MULTIPLE)
	{

		pic_pix_y=img->pix_y+block_y;
		pic_block_y=pic_pix_y/BLOCK_SIZE;

		for(block_x = 0 ; block_x < MB_BLOCK_SIZE  ; block_x += BLOCK_MULTIPLE)
		{

	
			cbp_mask=(1<<(2*(block_y/8)+block_x/8));


			pic_pix_x=img->pix_x+block_x;
			pic_block_x=pic_pix_x/BLOCK_SIZE;

			/*
			intrapred_luma() makes and returns 4x4 blocks with all 5 intra prediction modes.
			Notice that some modes are not possible at frame edges.
			*/
			intrapred_luma(pic_pix_x,pic_pix_y);


			best_intra_sad=MAX_VALUE; /* initial value, will be modified below                */
			img->imod = INTRA_MB_OLD;  /* for now mode set to intra, may be changed in motion_search() */
			/* DM: has to be removed */

			for (ipmode=0; ipmode < NO_INTRA_PMODE; ipmode++)   /* all intra prediction modes */
			{
				/* Horizontal pred from Y neighbour pix , vertical use X pix, diagonal needs both */
				if (ipmode==DC_PRED||ipmode==HOR_PRED||img->ipredmode[pic_block_x+1][pic_block_y] >= 0)/* DC or vert pred or hor edge*/
				{
					if (ipmode==DC_PRED||ipmode==VERT_PRED||img->ipredmode[pic_block_x][pic_block_y+1] >= 0)/* DC or hor pred or vert edge*/
					{
						for (j=0; j < BLOCK_SIZE; j++)
						{
							for (i=0; i < BLOCK_SIZE; i++)
								img->m7[i][j]=imgY_org[pic_pix_y+j][pic_pix_x+i]-img->mprr[ipmode][j][i]; /* find diff */
						}
						current_intra_sad=QP2QUANT[img->qp]*PRED_IPRED[img->ipredmode[pic_block_x+1][pic_block_y]+1][img->ipredmode[pic_block_x][pic_block_y+1]+1][ipmode]*2;

						current_intra_sad += find_sad(input->hadamard, img->m7); /* add the start 'handicap' and the computed SAD */

						if (current_intra_sad < best_intra_sad)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中日韩av电影| 欧美日韩日日骚| 国产三级精品三级在线专区| 精品一区二区av| 久久综合九色综合97婷婷女人| 麻豆视频观看网址久久| 欧美精品黑人性xxxx| 国产精品久久久久影院老司| 不卡免费追剧大全电视剧网站| www日韩大片| 国产精品一色哟哟哟| 亚洲国产精品v| 欧美亚洲高清一区| 蜜臀a∨国产成人精品| 久久久久国产精品免费免费搜索| 国产伦精品一区二区三区在线观看| 国产精品色婷婷久久58| 91麻豆视频网站| 免费久久99精品国产| 国产三级欧美三级| 在线观看亚洲a| 91福利区一区二区三区| 一本色道久久综合狠狠躁的推荐 | 欧美日韩一级二级| 麻豆91在线观看| 中文乱码免费一区二区| 在线观看视频欧美| 久久精品国产免费看久久精品| 亚洲国产精品av| 欧美日韩三级一区二区| 风间由美性色一区二区三区| 一区二区三区在线免费| 欧美成人国产一区二区| 色哟哟一区二区| 精品一区免费av| 亚洲激情综合网| 久久婷婷成人综合色| 欧美日韩午夜影院| 波多野洁衣一区| 久久草av在线| 亚洲激情自拍视频| 国产三级欧美三级| 日韩欧美激情在线| 在线观看欧美精品| 成人综合婷婷国产精品久久免费| 亚洲一区视频在线| 国产精品久久久久久亚洲伦| 91精品国产综合久久福利软件 | av在线免费不卡| 美女视频黄免费的久久| 一区二区三区鲁丝不卡| 久久精品人人做人人爽人人| 欧美日韩一区中文字幕| 成人激情综合网站| 国产一区二区在线免费观看| 亚洲高清视频的网址| 最好看的中文字幕久久| 国产午夜精品理论片a级大结局| 欧美日韩国产美女| 日本电影欧美片| av在线播放不卡| 国产电影精品久久禁18| 激情综合一区二区三区| 日韩综合小视频| 亚洲你懂的在线视频| 国产精品拍天天在线| 久久久久久久久久久黄色| 日韩无一区二区| 欧美一区二区在线看| 欧美日本不卡视频| 欧美日韩国产一二三| 欧洲一区在线电影| 欧洲视频一区二区| 色偷偷成人一区二区三区91| 99国产精品久久久久久久久久| 国产不卡免费视频| 国产成人综合自拍| 成人亚洲一区二区一| 国v精品久久久网| 丁香婷婷综合激情五月色| 国产高清不卡一区二区| 国产精品一区在线| 国产99久久久久久免费看农村| 国产一区二区福利视频| 国产伦精品一区二区三区在线观看| 狠狠色狠狠色综合| 国产精品白丝jk黑袜喷水| 国产不卡视频一区二区三区| 99久久777色| 欧美天堂一区二区三区| 91精品视频网| 久久午夜免费电影| 国产精品久久久久7777按摩| 亚洲欧美日本韩国| 亚洲 欧美综合在线网络| 日本不卡一二三| 国产精品亚洲第一区在线暖暖韩国 | 高清av一区二区| jlzzjlzz亚洲日本少妇| 在线观看亚洲精品视频| 日韩视频在线永久播放| 久久综合久色欧美综合狠狠| 国产精品日日摸夜夜摸av| 亚洲婷婷综合色高清在线| 亚洲电影在线免费观看| 麻豆精品一区二区av白丝在线| 韩日精品视频一区| eeuss鲁一区二区三区| 色婷婷av一区二区三区大白胸 | 欧美va亚洲va香蕉在线| 国产三级一区二区三区| 亚洲激情在线播放| 美日韩一区二区三区| 99国内精品久久| 制服丝袜国产精品| 国产精品久久久久久久久果冻传媒 | 成人免费高清视频在线观看| 在线观看视频欧美| 久久久久久一二三区| 亚洲激情一二三区| 韩国精品主播一区二区在线观看| 成人丝袜18视频在线观看| 欧美午夜在线观看| 久久精品视频一区二区三区| 亚洲午夜私人影院| 国产美女精品人人做人人爽| 色88888久久久久久影院野外| 欧美tk—视频vk| 一区二区三区在线免费| 国产精品一区二区黑丝| 欧美久久久一区| 国产精品乱子久久久久| 久久99精品久久久久久国产越南| 91女神在线视频| 久久九九久精品国产免费直播| 午夜精品久久久久久久| 91视视频在线观看入口直接观看www| 欧美一区日韩一区| 亚洲综合激情另类小说区| 国产精品18久久久久| 8x福利精品第一导航| 亚洲视频一区在线观看| 国产伦精一区二区三区| 日韩欧美国产电影| 香蕉久久夜色精品国产使用方法| av在线不卡观看免费观看| 久久伊人中文字幕| 久久精品久久久精品美女| 欧美三区免费完整视频在线观看| 国产精品进线69影院| 国产一区91精品张津瑜| 7777精品伊人久久久大香线蕉超级流畅| 成人免费小视频| 成人午夜免费av| 国产婷婷精品av在线| 久久 天天综合| 日韩欧美专区在线| 日韩电影在线免费看| 欧美猛男超大videosgay| 一区二区在线观看免费视频播放 | 中文字幕一区二区三区乱码在线| 国产另类ts人妖一区二区| 日韩欧美专区在线| 久久99热狠狠色一区二区| 91精品国产高清一区二区三区| 亚洲成人1区2区| 欧美日韩在线综合| 亚洲成在线观看| 在线不卡a资源高清| 午夜久久久久久久久| 欧美日韩国产123区| 天使萌一区二区三区免费观看| 欧美专区日韩专区| 亚洲高清不卡在线| 欧美日韩亚洲国产综合| 亚洲mv在线观看| 日韩一区二区高清| 麻豆一区二区99久久久久| 精品久久久久99| 国精产品一区一区三区mba视频| 欧美不卡123| 国产黑丝在线一区二区三区| 国产蜜臀av在线一区二区三区| 成人激情文学综合网| 亚洲欧美一区二区久久| 欧美亚洲国产一区在线观看网站| 亚洲在线成人精品| 91精品在线麻豆| 国产精品99久久久久久久女警| 中文字幕欧美日本乱码一线二线| gogo大胆日本视频一区| 亚洲电影在线免费观看| 日韩欧美一区在线观看| 国产成人av网站| 一区二区在线观看视频在线观看| 欧美日本精品一区二区三区| 激情欧美一区二区| 国产精品久久久久久户外露出| 欧美日韩在线观看一区二区| 久久精品国产亚洲a|