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

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

?? dct8x8_kernel2.cu

?? cuda開(kāi)發(fā)環(huán)境下的矩陣運(yùn)算
?? CU
字號(hào):
/*
 * Copyright 1993-2007 NVIDIA Corporation.  All rights reserved.
 *
 * NOTICE TO USER:
 *
 * This source code is subject to NVIDIA ownership rights under U.S. and
 * international Copyright laws.  Users and possessors of this source code
 * are hereby granted a nonexclusive, royalty-free license to use this code
 * in individual and commercial software.
 *
 * NVIDIA MAKES NO REPRESENTATION ABOUT THE SUITABILITY OF THIS SOURCE
 * CODE FOR ANY PURPOSE.  IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR
 * IMPLIED WARRANTY OF ANY KIND.  NVIDIA DISCLAIMS ALL WARRANTIES WITH
 * REGARD TO THIS SOURCE CODE, INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
 * IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL,
 * OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
 * OF USE, DATA OR PROFITS,  WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
 * OR OTHER TORTIOUS ACTION,  ARISING OUT OF OR IN CONNECTION WITH THE USE
 * OR PERFORMANCE OF THIS SOURCE CODE.
 *
 * U.S. Government End Users.   This source code is a "commercial item" as
 * that term is defined at  48 C.F.R. 2.101 (OCT 1995), consisting  of
 * "commercial computer  software"  and "commercial computer software
 * documentation" as such terms are  used in 48 C.F.R. 12.212 (SEPT 1995)
 * and is provided to the U.S. Government only as a commercial end item.
 * Consistent with 48 C.F.R.12.212 and 48 C.F.R. 227.7202-1 through
 * 227.7202-4 (JUNE 1995), all U.S. Government End Users acquire the
 * source code with only those rights set forth herein.
 *
 * Any use of this source code in individual and commercial software must
 * include, in the user documentation and internal comments to the code,
 * the above Disclaimer and U.S. Government End Users Notice.
 */

/**
**************************************************************************
* \file dct8x8_kernel2.cu
* \brief Contains 2nd kernel implementations of DCT and IDCT routines, used in 
*        JPEG internal data processing. Device code.
*
* This code implements traditional approach to forward and inverse Discrete 
* Cosine Transform to blocks of image pixels (of 8x8 size), as in JPEG standard. 
* The data processing is done using floating point representation.
* The routine that performs quantization of coefficients can be found in 
* dct8x8_kernel1.cu file.
*/

#pragma once

#include "Common.h"


__constant__ float C_a = 1.387039845322148f; //!< a = (2^0.5) * cos(    pi / 16);  Used in forward and inverse DCT.  
__constant__ float C_b = 1.306562964876377f; //!< b = (2^0.5) * cos(    pi /  8);  Used in forward and inverse DCT.  
__constant__ float C_c = 1.175875602419359f; //!< c = (2^0.5) * cos(3 * pi / 16);  Used in forward and inverse DCT.  
__constant__ float C_d = 0.785694958387102f; //!< d = (2^0.5) * cos(5 * pi / 16);  Used in forward and inverse DCT.  
__constant__ float C_e = 0.541196100146197f; //!< e = (2^0.5) * cos(3 * pi /  8);  Used in forward and inverse DCT.  
__constant__ float C_f = 0.275899379282943f; //!< f = (2^0.5) * cos(7 * pi / 16);  Used in forward and inverse DCT.  


/**
*  Normalization constant that is used in forward and inverse DCT
*/
__constant__ float C_norm = 0.3535533905932737f; // 1 / (8^0.5)


/**
*  Block8x8 size. Used for quick GPU indexation without integer
*  arithmetic and any divisions.
*/
__constant__ float Block8x8SizeF = (1.0f * BLOCK_SIZE);


/**
*  Inverse of block8x8 size. Used for quick GPU indexation without integer
*  arithmetic and any divisions.
*/
__constant__ float InvBlock8x8SizeF = (1.0f / BLOCK_SIZE);


/**
*  Epsilon that is used for GPU indexation without integer arithmetic.
*  Problems with indexation may occur when loading images more than 
*  8*10^6 pixels width.
*/
__constant__ float Eps = 0.000001f;


/**
*  Declaration of pointer to array of floats with size specified at runtime from wrapper
*/
extern __shared__ float SharedBlocks[];


/**
**************************************************************************
*  Performs in-place DCT of vector of 8 elements.
*
* \param Vect0			[IN] - Pointer to the first element of vector
* \param Step			[IN] - Value to add to ptr to access other elements 
*  
* \return None
*/
__device__ void CUDAsubroutineInplaceDCTvector(float *Vect0, int Step)
{
	float *Vect1 = Vect0 + Step;
	float *Vect2 = Vect1 + Step;
	float *Vect3 = Vect2 + Step;
	float *Vect4 = Vect3 + Step;
	float *Vect5 = Vect4 + Step;
	float *Vect6 = Vect5 + Step;
	float *Vect7 = Vect6 + Step;

	float X07P = (*Vect0) + (*Vect7);
	float X16P = (*Vect1) + (*Vect6);
	float X25P = (*Vect2) + (*Vect5);
	float X34P = (*Vect3) + (*Vect4);

	float X07M = (*Vect0) - (*Vect7);
	float X61M = (*Vect6) - (*Vect1);
	float X25M = (*Vect2) - (*Vect5);
	float X43M = (*Vect4) - (*Vect3);

	float X07P34PP = X07P + X34P;
	float X07P34PM = X07P - X34P;
	float X16P25PP = X16P + X25P;
	float X16P25PM = X16P - X25P;

	(*Vect0) = C_norm * (X07P34PP + X16P25PP);
	(*Vect2) = C_norm * (C_b * X07P34PM + C_e * X16P25PM);
	(*Vect4) = C_norm * (X07P34PP - X16P25PP);
	(*Vect6) = C_norm * (C_e * X07P34PM - C_b * X16P25PM);

	(*Vect1) = C_norm * (C_a * X07M - C_c * X61M + C_d * X25M - C_f * X43M);
	(*Vect3) = C_norm * (C_c * X07M + C_f * X61M - C_a * X25M + C_d * X43M);
	(*Vect5) = C_norm * (C_d * X07M + C_a * X61M + C_f * X25M - C_c * X43M);
	(*Vect7) = C_norm * (C_f * X07M + C_d * X61M + C_c * X25M + C_a * X43M);
}


/**
**************************************************************************
*  Performs in-place IDCT of vector of 8 elements.
*
* \param Vect0			[IN] - Pointer to the first element of vector
* \param Step			[IN] - Value to add to ptr to access other elements 
*  
* \return None
*/
__device__ void CUDAsubroutineInplaceIDCTvector(float *Vect0, int Step)
{
	float *Vect1 = Vect0 + Step;
	float *Vect2 = Vect1 + Step;
	float *Vect3 = Vect2 + Step;
	float *Vect4 = Vect3 + Step;
	float *Vect5 = Vect4 + Step;
	float *Vect6 = Vect5 + Step;
	float *Vect7 = Vect6 + Step;

	float Y04P   = (*Vect0) + (*Vect4);
	float Y2b6eP = C_b * (*Vect2) + C_e * (*Vect6);

	float Y04P2b6ePP = Y04P + Y2b6eP;
	float Y04P2b6ePM = Y04P - Y2b6eP;
	float Y7f1aP3c5dPP = C_f * (*Vect7) + C_a * (*Vect1) + C_c * (*Vect3) + C_d * (*Vect5);
	float Y7a1fM3d5cMP = C_a * (*Vect7) - C_f * (*Vect1) + C_d * (*Vect3) - C_c * (*Vect5);

	float Y04M   = (*Vect0) - (*Vect4);
	float Y2e6bM = C_e * (*Vect2) - C_b * (*Vect6);

	float Y04M2e6bMP = Y04M + Y2e6bM;
	float Y04M2e6bMM = Y04M - Y2e6bM;
	float Y1c7dM3f5aPM = C_c * (*Vect1) - C_d * (*Vect7) - C_f * (*Vect3) - C_a * (*Vect5);
	float Y1d7cP3a5fMM = C_d * (*Vect1) + C_c * (*Vect7) - C_a * (*Vect3) + C_f * (*Vect5);

	(*Vect0) = C_norm * (Y04P2b6ePP + Y7f1aP3c5dPP);
	(*Vect7) = C_norm * (Y04P2b6ePP - Y7f1aP3c5dPP);
	(*Vect4) = C_norm * (Y04P2b6ePM + Y7a1fM3d5cMP);
	(*Vect3) = C_norm * (Y04P2b6ePM - Y7a1fM3d5cMP);

	(*Vect1) = C_norm * (Y04M2e6bMP + Y1c7dM3f5aPM);
	(*Vect5) = C_norm * (Y04M2e6bMM - Y1d7cP3a5fMM);
	(*Vect2) = C_norm * (Y04M2e6bMM + Y1d7cP3a5fMM);
	(*Vect6) = C_norm * (Y04M2e6bMP - Y1c7dM3f5aPM);
}


/**
**************************************************************************
*  Performs 8x8 block-wise Forward Discrete Cosine Transform of the given 
*  image plane and outputs result to the array of coefficients. 2nd implementation.
*  This kernel is designed to process image by blocks of blocks8x8 that 
*  utilize maximum warps capacity, assuming that it is enough of 8 threads 
*  per block8x8.
*
* \param Dst						[OUT] - Coefficients plane
* \param ImgStride					[IN] - Stride of Dst
* \param NumBlocks8x8InBlock		[IN] - Number of blocks8x8 in block of threads
* \param WidthInBlocks				[IN] - Width of image in blocks8x8
* \param InvWidthInBlocksF			[IN] - Inverse of width of image in blocks8x8
*  
* \return None
*/
__global__ void CUDAkernel2DCT(float *Dst, int ImgStride, int NumBlocks8x8InBlock, int WidthInBlocks, float InvWidthInBlocksF)
{
	//////////////////////////////////////////////////////////////////////////
	// Initialization
	//

	// Floating thread and block numbers
	int ThreadNum = threadIdx.x;
	int BlockNum = blockIdx.x;

	// Current block8x8 in current block
	int CurBlock8x8InBlock = ThreadNum >> BLOCK_SIZE_LOG2;

	// Current column in current block8x8
	int CurThreadInBlock8x8 = ThreadNum - (CurBlock8x8InBlock << BLOCK_SIZE_LOG2);

	// Current block8x8 coordinates in blocks
	int CurBlock8x8OffsetDescriptor = FAST_INT_MUL(BlockNum, NumBlocks8x8InBlock) + CurBlock8x8InBlock;
	int CurBlock8x8OffsetYInBlocks = (int)(((float)CurBlock8x8OffsetDescriptor) * InvWidthInBlocksF + Eps);
	int CurBlock8x8OffsetXInBlocks = CurBlock8x8OffsetDescriptor - FAST_INT_MUL(CurBlock8x8OffsetYInBlocks, WidthInBlocks);

	// Current block8x8 coordinates in pixels (in image)
	int CurBlock8x8OffsetXInImage = CurBlock8x8OffsetXInBlocks << BLOCK_SIZE_LOG2;
	int CurBlock8x8OffsetYInImage = CurBlock8x8OffsetYInBlocks << BLOCK_SIZE_LOG2;

	// Current block8x8 offset in shared memory
	int CurBlock8x8OffsetInShared = CurBlock8x8InBlock << BLOCK_SIZE2_LOG2;
	float *CurBlock8x8 = SharedBlocks + CurBlock8x8OffsetInShared;

	//////////////////////////////////////////////////////////////////////////
	// Copying into shared memory
	//

	// Texture coordinates
	float tex_x = (float)(CurBlock8x8OffsetXInImage + CurThreadInBlock8x8) + 0.5f;
	float tex_y = (float)(CurBlock8x8OffsetYInImage) + 0.5f;
	int CurBlock8x8Index = 0 * BLOCK_SIZE + CurThreadInBlock8x8;

	#pragma unroll
	for (int i=0; i<BLOCK_SIZE; i++)
	{
		CurBlock8x8[CurBlock8x8Index] = tex2D(TexSrc, tex_x, tex_y);
		tex_y += 1.0f;
		CurBlock8x8Index += BLOCK_SIZE;
	}

	//////////////////////////////////////////////////////////////////////////
	// Processing
	//

	//process rows
	__syncthreads();
	CUDAsubroutineInplaceDCTvector(CurBlock8x8 + (CurThreadInBlock8x8<<BLOCK_SIZE_LOG2), 1);

	//process columns
	__syncthreads();
	CUDAsubroutineInplaceDCTvector(CurBlock8x8 + CurThreadInBlock8x8, BLOCK_SIZE);


	//////////////////////////////////////////////////////////////////////////
	// Copying from shared memory
	//

	float *DstAddress = Dst + FAST_INT_MUL(CurBlock8x8OffsetYInImage, ImgStride) + CurBlock8x8OffsetXInImage + CurThreadInBlock8x8;
	CurBlock8x8Index = 0 * BLOCK_SIZE + CurThreadInBlock8x8;
	
	#pragma unroll
	for (int i=0; i<BLOCK_SIZE; i++)
	{
		__syncthreads();
		*DstAddress = CurBlock8x8[CurBlock8x8Index];
		DstAddress += ImgStride;
		CurBlock8x8Index += BLOCK_SIZE;
	}
}


/**
**************************************************************************
*  Performs 8x8 block-wise Inverse Discrete Cosine Transform of the given 
*  coefficients plane and outputs result to the image. 2nd implementation.
*  This kernel is designed to process image by blocks of blocks8x8 that 
*  utilize maximum warps capacity, assuming that it is enough of 8 threads 
*  per block8x8.
*
* \param Dst						[OUT] - Coefficients plane
* \param ImgStride					[IN] - Stride of Dst
* \param NumBlocks8x8InBlock		[IN] - Number of blocks8x8 in block of threads
* \param WidthInBlocks				[IN] - Width of image in blocks8x8
* \param InvWidthInBlocksF			[IN] - Inverse of width of image in blocks8x8
*  
* \return None
*/
__global__ void CUDAkernel2IDCT(float *Dst, int ImgStride, int NumBlocks8x8InBlock, int WidthInBlocks, float InvWidthInBlocksF)
{
	//////////////////////////////////////////////////////////////////////////
	// Initialization
	//

	// Floating thread and block numbers
	int ThreadNum = threadIdx.x;
	int BlockNum = blockIdx.x;

	// Current block8x8 in current block
	int CurBlock8x8InBlock = ThreadNum >> BLOCK_SIZE_LOG2;

	// Current column in current block8x8
	int CurThreadInBlock8x8 = ThreadNum - (CurBlock8x8InBlock << BLOCK_SIZE_LOG2);

	// Current block8x8 coordinates in blocks
	int CurBlock8x8OffsetDescriptor = FAST_INT_MUL(BlockNum, NumBlocks8x8InBlock) + CurBlock8x8InBlock;
	int CurBlock8x8OffsetYInBlocks = (int)(((float)CurBlock8x8OffsetDescriptor) * InvWidthInBlocksF + Eps);
	int CurBlock8x8OffsetXInBlocks = CurBlock8x8OffsetDescriptor - FAST_INT_MUL(CurBlock8x8OffsetYInBlocks, WidthInBlocks);

	// Current block8x8 coordinates in pixels (in image)
	int CurBlock8x8OffsetXInImage = CurBlock8x8OffsetXInBlocks << BLOCK_SIZE_LOG2;
	int CurBlock8x8OffsetYInImage = CurBlock8x8OffsetYInBlocks << BLOCK_SIZE_LOG2;

	// Current block8x8 offset in shared memory
	int CurBlock8x8OffsetInShared = CurBlock8x8InBlock << BLOCK_SIZE2_LOG2;
	float *CurBlock8x8 = SharedBlocks + CurBlock8x8OffsetInShared;

	//////////////////////////////////////////////////////////////////////////
	// Copying into shared memory
	//

	// Texture coordinates
	float tex_x = (float)(CurBlock8x8OffsetXInImage + CurThreadInBlock8x8) + 0.5f;
	float tex_y = (float)(CurBlock8x8OffsetYInImage) + 0.5f;

	#pragma unroll
	for (int i=0; i<BLOCK_SIZE; i++)
	{
		CurBlock8x8[(i<<BLOCK_SIZE_LOG2)+CurThreadInBlock8x8] = tex2D(TexSrc, tex_x, tex_y);
		tex_y += 1.0f;
	}

	//////////////////////////////////////////////////////////////////////////
	// Processing
	//

	//process rows
	__syncthreads();
	CUDAsubroutineInplaceIDCTvector(CurBlock8x8 + (CurThreadInBlock8x8<<BLOCK_SIZE_LOG2), 1);

	//process columns
	__syncthreads();
	CUDAsubroutineInplaceIDCTvector(CurBlock8x8 + CurThreadInBlock8x8, BLOCK_SIZE);


	//////////////////////////////////////////////////////////////////////////
	// Copying from shared memory
	//

	float *DstAddress = Dst + FAST_INT_MUL(CurBlock8x8OffsetYInImage, ImgStride) + CurBlock8x8OffsetXInImage + CurThreadInBlock8x8;
	#pragma unroll
	for (int i=0; i<BLOCK_SIZE; i++)
	{
		__syncthreads();
		*DstAddress = CurBlock8x8[(i<<BLOCK_SIZE_LOG2)+CurThreadInBlock8x8];
		DstAddress += ImgStride;
	}
}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
夜夜嗨av一区二区三区四季av | 一本色道久久综合精品竹菊| 亚洲国产裸拍裸体视频在线观看乱了| 欧美一级高清片在线观看| aaa国产一区| 黄色精品一二区| 无码av免费一区二区三区试看| 中文字幕一区二区三区精华液| 精品乱人伦小说| 欧美精品在线视频| 91网页版在线| 播五月开心婷婷综合| 韩国在线一区二区| 日韩精品国产精品| 一个色妞综合视频在线观看| 中文字幕亚洲一区二区av在线| 久久中文字幕电影| 精品入口麻豆88视频| 欧美精品久久99| 欧美日韩大陆在线| 在线一区二区三区四区五区| 天堂av在线一区| 无吗不卡中文字幕| 亚洲成人精品一区| 亚洲国产日日夜夜| 一区二区三区免费观看| 亚洲黄色片在线观看| 亚洲特黄一级片| 日韩一区欧美一区| 亚洲人午夜精品天堂一二香蕉| 欧美国产日本视频| 中国色在线观看另类| 国产女人aaa级久久久级| 国产亚洲一本大道中文在线| 久久久久久久精| 久久久久久久精| 国产欧美日韩另类一区| 欧美激情一区二区三区不卡| 国产亚洲福利社区一区| 国产日韩欧美不卡在线| 国产欧美一区二区精品性色超碰| 国产天堂亚洲国产碰碰| 国产精品美女一区二区三区| 国产精品免费视频一区| 自拍偷拍亚洲欧美日韩| 一卡二卡三卡日韩欧美| 香蕉乱码成人久久天堂爱免费| 亚洲图片一区二区| 日韩高清一区二区| 精品一二三四区| 国产高清久久久久| 91视频在线观看免费| 日本高清不卡视频| 91麻豆精品91久久久久同性| 日韩视频在线一区二区| 久久九九影视网| 亚洲欧美视频在线观看视频| 亚洲成人动漫av| 国产中文一区二区三区| 成人免费va视频| 在线观看国产91| 日韩一区二区麻豆国产| 国产婷婷色一区二区三区| 亚洲伦理在线免费看| 三级成人在线视频| 国产精品77777| 色狠狠色噜噜噜综合网| 欧美高清视频www夜色资源网| 日韩你懂的电影在线观看| 亚洲国产精品高清| 亚洲永久免费视频| 精品午夜久久福利影院| 成人av午夜电影| 91久久精品一区二区三区| 欧美一区二区三区电影| 国产午夜一区二区三区| 一区二区三区四区不卡在线| 美女视频网站久久| 色综合久久久久久久| 欧美一区二区精美| 成人免费在线视频观看| 日韩精品电影在线| 99久久精品免费| 欧美成人一区二区三区| 亚洲日本欧美天堂| 麻豆一区二区三区| 色婷婷综合五月| 久久综合久久综合亚洲| 一区二区三区四区国产精品| 国产一区二区三区免费看| 在线日韩一区二区| 精品国产制服丝袜高跟| 亚洲一区在线观看免费 | 一区二区三区四区国产精品| 国产综合久久久久影院| 欧美日韩美少妇| 国产精品久久毛片a| 美女看a上一区| 欧美午夜一区二区三区免费大片| 2019国产精品| 午夜成人在线视频| 91丨九色丨蝌蚪丨老版| 久久亚区不卡日本| 免费在线成人网| 欧美在线播放高清精品| 国产精品久久久久一区| 精品一区二区三区的国产在线播放| 欧美伊人久久久久久久久影院 | 亚洲成人久久影院| 91网页版在线| 国产精品久久久久久久久免费相片 | 欧美日韩日本视频| 综合久久综合久久| 成人午夜看片网址| www国产精品av| 奇米在线7777在线精品| 欧美性生活影院| 亚洲另类在线一区| www.亚洲色图.com| 欧美国产日产图区| 成人小视频在线观看| 久久久久久久久99精品| 国产一区二区三区四区在线观看| 日韩一区二区三区视频在线观看| 亚洲成人动漫av| 欧美日韩高清影院| 五月天一区二区| 欧美日韩aaa| 日韩专区一卡二卡| 91 com成人网| 奇米色777欧美一区二区| 欧美一级片在线| 美女在线观看视频一区二区| 4438x成人网最大色成网站| 亚洲成av人综合在线观看| 欧美精品一卡两卡| 美女诱惑一区二区| 精品国产网站在线观看| 韩国女主播一区二区三区| 久久久亚洲综合| 国产成人av电影免费在线观看| 国产色产综合色产在线视频 | 91精品国产福利在线观看| 免费在线观看日韩欧美| 精品va天堂亚洲国产| 国产黄色成人av| 国产精品久久久久桃色tv| 97久久精品人人澡人人爽| 亚洲欧美成aⅴ人在线观看| 91麻豆文化传媒在线观看| √…a在线天堂一区| 欧美亚洲国产一区在线观看网站 | 中文字幕第一区综合| 97久久精品人人做人人爽| 亚洲一线二线三线久久久| 91精品国产入口在线| 久久er99热精品一区二区| 久久久久久久免费视频了| 成人午夜在线播放| 一区二区三区精品视频在线| 欧美日韩在线播放一区| 裸体一区二区三区| 中文在线一区二区| 91免费视频大全| 肉肉av福利一精品导航| 久久久亚洲精华液精华液精华液| 99在线精品一区二区三区| 一区二区三区电影在线播| 欧美精选午夜久久久乱码6080| 国模无码大尺度一区二区三区| 国产精品久久一卡二卡| 欧美中文一区二区三区| 久久电影网电视剧免费观看| 国产精品久久久久久久久快鸭| 欧美亚洲免费在线一区| 激情久久五月天| 亚洲一区日韩精品中文字幕| 精品国产凹凸成av人网站| 99久久久精品免费观看国产蜜| 偷拍亚洲欧洲综合| 国产精品视频观看| 欧美酷刑日本凌虐凌虐| 粉嫩嫩av羞羞动漫久久久| 五月综合激情婷婷六月色窝| 国产丝袜欧美中文另类| 777久久久精品| 成人av在线影院| 久久国产精品一区二区| 一个色妞综合视频在线观看| 欧美电影精品一区二区| 在线免费观看日韩欧美| 国产精品资源在线| 丝瓜av网站精品一区二区| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 国产成人综合在线播放| 婷婷久久综合九色综合伊人色| 中文字幕精品三区| 精品欧美一区二区久久| 欧美日韩精品一区二区三区四区 | 国产女人aaa级久久久级 |