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

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

?? mbenc.cpp

?? 此源碼是在VC平臺下,實現MPEG4編解碼的源碼
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
/*************************************************************************

This software module was originally developed by 

	Ming-Chieh Lee (mingcl@microsoft.com), Microsoft Corporation
	Wei-ge Chen (wchen@microsoft.com), Microsoft Corporation
	Simon Winder (swinder@microsoft.com), Microsoft Corporation
	(date: June, 1997)
and edited by
        Wei Wu (weiwu@stallion.risc.rockwell.com) Rockwell Science Center

and also edited by
	Yoshihiro Kikuchi (TOSHIBA CORPORATION)
	Takeshi Nagai (TOSHIBA CORPORATION)
	Toshiaki Watanabe (TOSHIBA CORPORATION)
	Noboru Yamaguchi (TOSHIBA CORPORATION)

in the course of development of the MPEG-4 Video (ISO/IEC 14496-2). 
This software module is an implementation of a part of one or more MPEG-4 Video tools 
as specified by the MPEG-4 Video. 
ISO/IEC gives users of the MPEG-4 Video free license to this software module or modifications 
thereof for use in hardware or software products claiming conformance to the MPEG-4 Video. 
Those intending to use this software module in hardware or software products are advised that its use may infringe existing patents. 
The original developer of this software module and his/her company, 
the subsequent editors and their companies, 
and ISO/IEC have no liability for use of this software module or modifications thereof in an implementation. 
Copyright is not released for non MPEG-4 Video conforming products. 
Microsoft retains full right to use the code for his/her own purpose, 
assign or donate the code to a third party and to inhibit third parties from using the code for non <MPEG standard> conforming products. 
This copyright notice must be included in all copies or derivative works. 

Copyright (c) 1996, 1997.

Module Name:

	MBenc.cpp

Abstract:

	MacroBlock encoder

Revision History:

	This software module was edited by

		Hiroyuki Katata (katata@imgsl.mkhar.sharp.co.jp), Sharp Corporation
		Norio Ito (norio@imgsl.mkhar.sharp.co.jp), Sharp Corporation
		Shuichi Watanabe (watanabe@imgsl.mkhar.sharp.co.jp), Sharp Corporation
		(date: October, 1997)

	for object based temporal scalability.

	Dec 20, 1997:	Interlaced tools added by NextLevel Systems X.Chen, B. Eifrig
        May. 9   1998:  add boundary by Hyundai Electronics 
                                  Cheol-Soo Park (cspark@super5.hyundai.co.kr) 
	May 9, 1999:	tm5 rate control by DemoGraFX, duhoff@mediaone.net

NOTE:
	
	m_pvopfCurrQ holds the original data until it is texture quantized

*************************************************************************/

#include <stdlib.h>
#include <math.h>
#include <iostream.h>
#include "typeapi.h"
#include "codehead.h"
#include "mode.hpp"
#include "global.hpp"
#include "entropy/bitstrm.hpp"
#include "entropy/entropy.hpp"
#include "entropy/huffman.hpp"
#include "vopses.hpp"
#include "vopseenc.hpp"

#ifdef __MFC_
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif

#define new DEBUG_NEW				   
#endif // __MFC_

/*Void CVideoObjectEncoder::encodePVOPMBWithShape (
	PixelC* ppxlcRefMBY, PixelC* ppxlcRefMBU, PixelC* ppxlcRefMBV,
	PixelC* ppxlcRefMBA, PixelC* ppxlcRefBY,
	CMBMode* pmbmd, const CMotionVector* pmv, CMotionVector* pmvBY,
	ShapeMode shpmdColocatedMB,
	Int imbX, Int imbY,
	CoordI x, CoordI y, Int& iQPPrev)
{
	encodePVOPMBJustShape(ppxlcRefBY,pmbmd,shpmdColocatedMB,pmv,pmvBY,x,y,imbX,imbY);
	dumpCachedShapeBits();
	encodePVOPMBTextureWithShape(ppxlcRefMBY,ppxlcRefMBU,ppxlcRefMBV,ppxlcRefMBA,pmbmd,
		pmv,imbX,imbY,x,y,iQPPrev);
}*/

Void CVideoObjectEncoder::encodePVOPMBJustShape(
	PixelC* ppxlcRefBY, CMBMode* pmbmd, ShapeMode shpmdColocatedMB,
		const CMotionVector* pmv, CMotionVector* pmvBY,
		CoordI x, CoordI y, Int imbX, Int imbY)
{
	m_statsMB.nBitsShape += codeInterShape (
		ppxlcRefBY, m_pvopcRefQ0, pmbmd, shpmdColocatedMB,
		pmv, pmvBY, x, y, imbX, imbY
	);

	// change pmbmd to inter if all transparent
	decideTransparencyStatus (pmbmd, m_ppxlcCurrMBBY);
}

Void CVideoObjectEncoder::dumpCachedShapeBits()
{
#ifdef __TRACE_AND_STATS_
	m_pbitstrmOut->trace("INSERTING PRE-ENCODED MB SHAPE STREAM HERE\n");
	m_pbitstrmOut->trace(m_pbitstrmOut->getCounter(),"Location Before");
#endif // __TRACE_AND_STATS_
	m_pbitstrmOut->putBitStream(*m_pbitstrmShapeMBOut);
#ifdef __TRACE_AND_STATS_
	m_pbitstrmOut->trace(m_pbitstrmOut->getCounter(),"Location After");
#endif // __TRACE_AND_STATS_
	m_pbitstrmShapeMBOut->flush();
	m_pbitstrmShapeMBOut->resetAll();
}

Void CVideoObjectEncoder::encodePVOPMBTextureWithShape(
	PixelC* ppxlcRefMBY, PixelC* ppxlcRefMBU, PixelC* ppxlcRefMBV,
	PixelC* ppxlcRefMBA, CMBMode* pmbmd, const CMotionVector* pmv,
	Int imbX, Int imbY,	CoordI x, CoordI y, Int& iQPPrev,
	Int &iQPPrevAlpha, Bool &bUseNewQPForVlcThr)
{
	// update quantiser
	pmbmd->m_stepSize = iQPPrev + pmbmd->m_intStepDelta;
	if(bUseNewQPForVlcThr)
		pmbmd->m_stepSizeDelayed = pmbmd->m_stepSize;
	else
		pmbmd->m_stepSizeDelayed = iQPPrev;
	iQPPrev = pmbmd->m_stepSize;

	if (pmbmd -> m_dctMd == INTRA || pmbmd -> m_dctMd == INTRAQ) {
		if(pmbmd -> m_rgTranspStatus [0] == PARTIAL)
			LPEPadding (pmbmd);

		if (m_volmd.fAUsage == EIGHT_BIT) {
			// update alpha quant
			if(!m_volmd.bNoGrayQuantUpdate)
			{
				iQPPrevAlpha = (iQPPrev * m_vopmd.intStepPAlpha) / m_vopmd.intStep;
				if(iQPPrevAlpha<1)
					iQPPrevAlpha=1;
			}
			pmbmd->m_stepSizeAlpha = iQPPrevAlpha;
		}

		assert (pmbmd -> m_rgTranspStatus [0] != ALL);
		/*BBM// Added for Boundary by Hyundai(1998-5-9)
                if (m_vopmd.bInterlace && pmbmd -> m_rgTranspStatus [0] == PARTIAL)
                        boundaryMacroBlockMerge (pmbmd);
		// End of Hyundai(1998-5-9)*/
		quantizeTextureIntraMB (imbX, imbY, pmbmd, ppxlcRefMBY, ppxlcRefMBU, ppxlcRefMBV, ppxlcRefMBA);
		codeMBTextureHeadOfPVOP (pmbmd);
		sendDCTCoefOfIntraMBTexture (pmbmd);
		if (m_volmd.fAUsage == EIGHT_BIT) {
			codeMBAlphaHeadOfPVOP (pmbmd);
			sendDCTCoefOfIntraMBAlpha (pmbmd);
		}
		/*BBM// Added for Boundary by Hyundai(1998-5-9)
                if (m_vopmd.bInterlace && pmbmd -> m_bMerged[0])
                        mergedMacroBlockSplit (pmbmd, ppxlcRefMBY, ppxlcRefMBA);
		// End of Hyundai(1998-5-9)*/

		bUseNewQPForVlcThr = FALSE;
	}
	else { // INTER or skipped
		if (m_volmd.fAUsage == EIGHT_BIT) {
			// update alpha quant
			if(!m_volmd.bNoGrayQuantUpdate)
				iQPPrevAlpha = (iQPPrev * m_vopmd.intStepPAlpha) / m_vopmd.intStep;
			pmbmd->m_stepSizeAlpha = iQPPrevAlpha;
		}
		if (pmbmd -> m_rgTranspStatus [0] == PARTIAL) {
			CoordI xRefUV, yRefUV;

// INTERLACE
		// new changes 
			if(pmbmd->m_bFieldMV) {
				CoordI xRefUV1, yRefUV1;
				mvLookupUV (pmbmd, pmv, xRefUV, yRefUV, xRefUV1, yRefUV1);
				motionCompFieldUV(m_ppxlcPredMBU, m_ppxlcPredMBV,
					m_pvopcRefQ0, x, y, xRefUV, yRefUV, pmbmd->m_bForwardTop);
				motionCompFieldUV(m_ppxlcPredMBU + BLOCK_SIZE, m_ppxlcPredMBV + BLOCK_SIZE,
					m_pvopcRefQ0, x, y, xRefUV1, yRefUV1, pmbmd->m_bForwardBottom);
			}
			else {
// ~INTERLACE
			mvLookupUVWithShape (pmbmd, pmv, xRefUV, yRefUV);
			motionCompUV (m_ppxlcPredMBU, m_ppxlcPredMBV, m_pvopcRefQ0, x, y,
				xRefUV, yRefUV, m_vopmd.iRoundingControl,&m_rctRefVOPY0);
			}
			motionCompMBYEnc (pmv, pmbmd, imbX, imbY, x, y, &m_rctRefVOPY0);
			computeTextureErrorWithShape ();
		}
		else {
			// not partial
			CoordI xRefUV, yRefUV, xRefUV1, yRefUV1;
			mvLookupUV (pmbmd, pmv, xRefUV, yRefUV, xRefUV1, yRefUV1);
// INTERLACE
		// new changes 
			if(pmbmd->m_bFieldMV) {
				motionCompFieldUV(m_ppxlcPredMBU, m_ppxlcPredMBV,
					m_pvopcRefQ0, x, y, xRefUV, yRefUV, pmbmd->m_bForwardTop);
				motionCompFieldUV(m_ppxlcPredMBU + BLOCK_SIZE, m_ppxlcPredMBV + BLOCK_SIZE,
					m_pvopcRefQ0, x, y, xRefUV1, yRefUV1, pmbmd->m_bForwardBottom);
			}
			else {
// ~INTERLACE
			motionCompUV (m_ppxlcPredMBU, m_ppxlcPredMBV, m_pvopcRefQ0, x, y,
				xRefUV, yRefUV, m_vopmd.iRoundingControl, &m_rctRefVOPY0);
			}
			motionCompMBYEnc (pmv, pmbmd, imbX, imbY, x, y, &m_rctRefVOPY0);
			computeTextureError ();
		}
		Bool bSkip = pmbmd->m_bhas4MVForward ? (pmv [1].isZero () && pmv [2].isZero () && pmv [3].isZero () && pmv [4].isZero ())
			: (!pmbmd->m_bFieldMV && pmv->isZero()) ;
		/*BBM// Added for Boundary by Hyundai(1998-5-9)
		if (m_vopmd.bInterlace && pmbmd -> m_rgTranspStatus [0] == PARTIAL)
                        boundaryMacroBlockMerge (pmbmd);
		// End of Hyundai(1998-5-9)*/

		if(!m_volmd.bAllowSkippedPMBs)
			bSkip = FALSE;
		quantizeTextureInterMB (pmbmd, pmv, ppxlcRefMBA, bSkip); // decide COD here
		codeMBTextureHeadOfPVOP (pmbmd);
		if (!pmbmd -> m_bSkip) {
			/*BBM// Added for Boundary by Hyundai(1998-5-9)
            if (m_vopmd.bInterlace && pmbmd -> m_bMerged[0])
                    swapTransparentModes (pmbmd, BBS);
			// End of Hyundai(1998-5-9)*/
			m_statsMB.nBitsMV += encodeMVWithShape (pmv, pmbmd, imbX, imbY);
			/*BBM// Added for Boundary by Hyundai(1998-5-9)
			if (m_vopmd.bInterlace && pmbmd -> m_bMerged[0])
					swapTransparentModes (pmbmd, BBM);
			// End of Hyundai(1998-5-9)*/
			sendDCTCoefOfInterMBTexture (pmbmd);
			// addErrorAndPredToCurrQ (ppxlcRefMBY, ppxlcRefMBU, ppxlcRefMBV); // delete by Hyundai, ok swinder
		}
		else
			assignPredToCurrQ (ppxlcRefMBY, ppxlcRefMBU, ppxlcRefMBV);
		if (m_volmd.fAUsage == EIGHT_BIT) {
			codeMBAlphaHeadOfPVOP (pmbmd);
			if (pmbmd -> m_CODAlpha == ALPHA_CODED) {
				sendDCTCoefOfInterMBAlpha (pmbmd);
				// addAlphaErrorAndPredToCurrQ (ppxlcRefMBA); // delete by Hyundai. ok swinder
			}
			else if(pmbmd -> m_CODAlpha == ALPHA_SKIPPED)
				assignAlphaPredToCurrQ (ppxlcRefMBA);
		}
		/*BBM// Added for Boundary by Hyundai(1998-5-9)
                if (m_vopmd.bInterlace && pmbmd -> m_bMerged[0])
                        mergedMacroBlockSplit (pmbmd);
		// End of Hyundai(1998-5-9)*/
        if (!pmbmd -> m_bSkip)
		{
			bUseNewQPForVlcThr = FALSE;
            addErrorAndPredToCurrQ (ppxlcRefMBY, ppxlcRefMBU, ppxlcRefMBV);
		}
        if (m_volmd.fAUsage == EIGHT_BIT && pmbmd -> m_CODAlpha == ALPHA_CODED)
            addAlphaErrorAndPredToCurrQ (ppxlcRefMBA);
	}
}

Void CVideoObjectEncoder::encodePVOPMB (
	PixelC* ppxlcRefMBY, PixelC* ppxlcRefMBU, PixelC* ppxlcRefMBV,
	CMBMode* pmbmd, const CMotionVector* pmv,
	Int iMBX, Int iMBY,
	CoordI x, CoordI y
)
{
	// For Sprite update macroblock there is no motion compensation 
	if (m_uiSprite == 1 && m_vopmd.SpriteXmitMode != STOP) {
		if ( m_bSptMB_NOT_HOLE ) {
			m_iNumSptMB++ ;	   	 
			CopyCurrQToPred(ppxlcRefMBY, ppxlcRefMBU, ppxlcRefMBV);
			computeTextureError ();
			Bool bSkip = pmbmd->m_bhas4MVForward ? (pmv [1].isZero () && pmv [2].isZero () && pmv [3].isZero () && pmv [4].isZero ())
											 : pmv->isZero ();
			quantizeTextureInterMB (pmbmd, pmv, NULL, bSkip); // decide COD here
			codeMBTextureHeadOfPVOP (pmbmd);
			if (!pmbmd -> m_bSkip) {
				sendDCTCoefOfInterMBTexture (pmbmd);
				addErrorAndPredToCurrQ (ppxlcRefMBY, ppxlcRefMBU, ppxlcRefMBV);
			}
		}
		else {
			pmbmd -> m_bSkip = TRUE;
			codeMBTextureHeadOfPVOP (pmbmd);
		}
		return;
	}

	if (pmbmd->m_dctMd == INTRA || pmbmd->m_dctMd == INTRAQ) {
		pmbmd->m_bSkip = FALSE;			//in case use by direct mode in the future
		quantizeTextureIntraMB (iMBX, iMBY, pmbmd, ppxlcRefMBY, ppxlcRefMBU, ppxlcRefMBV, NULL);
		codeMBTextureHeadOfPVOP (pmbmd);
		sendDCTCoefOfIntraMBTexture (pmbmd);
	}
	else {
		CoordI xRefUV, yRefUV, xRefUV1, yRefUV1;
		mvLookupUV (pmbmd, pmv, xRefUV, yRefUV, xRefUV1, yRefUV1);
// INTERLACE
		// pmbmd->m_rgTranspStatus[0] = NONE;			// This a rectangular VOP 
		if(pmbmd->m_bFieldMV) {
			motionCompFieldUV(m_ppxlcPredMBU, m_ppxlcPredMBV,
				m_pvopcRefQ0, x, y, xRefUV, yRefUV, pmbmd->m_bForwardTop);
			motionCompFieldUV(m_ppxlcPredMBU + BLOCK_SIZE, m_ppxlcPredMBV + BLOCK_SIZE,
				m_pvopcRefQ0, x, y, xRefUV1, yRefUV1, pmbmd->m_bForwardBottom);
		}
		else 
// ~INTERLACE
			motionCompUV (m_ppxlcPredMBU, m_ppxlcPredMBV, m_pvopcRefQ0, x, y,
				xRefUV, yRefUV, m_vopmd.iRoundingControl,&m_rctRefVOPY0);
		motionCompMBYEnc (pmv, pmbmd, iMBX, iMBY, x, y, &m_rctRefVOPY0);
		computeTextureError ();
		Bool bSkip = pmbmd->m_bhas4MVForward ? (pmv [1].isZero () && pmv [2].isZero () && pmv [3].isZero () && pmv [4].isZero ())
            : (!pmbmd->m_bFieldMV && pmv->isZero());
		if(!m_volmd.bAllowSkippedPMBs)
			bSkip = FALSE;
		quantizeTextureInterMB (pmbmd, pmv, NULL, bSkip); // decide COD here
		codeMBTextureHeadOfPVOP (pmbmd);
		if (!pmbmd -> m_bSkip) {
			if(!(m_volmd.volType == ENHN_LAYER && m_vopmd.iRefSelectCode == 3))
				m_statsMB.nBitsMV += encodeMVVP (pmv, pmbmd, iMBX, iMBY);
			sendDCTCoefOfInterMBTexture (pmbmd);
			addErrorAndPredToCurrQ (ppxlcRefMBY, ppxlcRefMBU, ppxlcRefMBV);
		}
		else {
			assignPredToCurrQ (ppxlcRefMBY, ppxlcRefMBU, ppxlcRefMBV);
		}
	}
}


Void CVideoObjectEncoder::encodeBVOPMB (
	PixelC* ppxlcCurrQMBY, PixelC* ppxlcCurrQMBU, PixelC* ppxlcCurrQMBV,
	CMBMode* pmbmd, const CMotionVector* pmv, const CMotionVector* pmvBackward,
	const CMBMode* pmbmdRef, const CMotionVector* pmvRef,
	Int iMBX, Int iMBY,
	CoordI x, CoordI y
)
{
	motionCompAndDiff_BVOP_MB (pmv, pmvBackward, pmbmd, x, y, &m_rctRefVOPY0, &m_rctRefVOPY1);
	Bool bSkip;
	if (m_volmd.volType == ENHN_LAYER && m_vopmd.iRefSelectCode == 0 &&
	    pmbmd->m_mbType == FORWARD)
		bSkip = (pmv->m_vctTrueHalfPel.x ==0 && pmv->m_vctTrueHalfPel.y == 0);
	else if (pmbmd->m_mbType == DIRECT)
		bSkip = (pmbmd->m_vctDirectDeltaMV.x ==0 && pmbmd->m_vctDirectDeltaMV.y == 0);
	else 
		bSkip = FALSE;
	quantizeTextureInterMB (pmbmd, pmv, NULL, bSkip); // decide COD here; skip not allowed in non-direct mode
	codeMBTextureHeadOfBVOP (pmbmd);
	if (!pmbmd->m_bSkip) {
		m_statsMB.nBitsMV += encodeMVofBVOP (pmv, pmvBackward, pmbmd, iMBX, iMBY, pmvRef, pmbmdRef);
		sendDCTCoefOfInterMBTexture (pmbmd);
		addErrorAndPredToCurrQ (ppxlcCurrQMBY, ppxlcCurrQMBU, ppxlcCurrQMBV);
	}
	else
		assignPredToCurrQ (ppxlcCurrQMBY, ppxlcCurrQMBU, ppxlcCurrQMBV);
}

Void CVideoObjectEncoder::encodeBVOPMB_WithShape (
	PixelC* ppxlcCurrQMBY, PixelC* ppxlcCurrQMBU, PixelC* ppxlcCurrQMBV, PixelC* ppxlcCurrQMBA, PixelC* ppxlcCurrQBY,
	CMBMode* pmbmd, const CMotionVector* pmv, const CMotionVector* pmvBackward, 
	CMotionVector* pmvBY, ShapeMode shpmdColocatedMB,
	const CMBMode* pmbmdRef, const CMotionVector* pmvRef,
	Int iMBX, Int iMBY,
	CoordI x, CoordI y, Int &iQPPrev, Int &iQPPrevAlpha
)
{
	pmbmd->m_stepSize = iQPPrev;

	if(!m_volmd.bNoGrayQuantUpdate)
	{
		iQPPrevAlpha = (iQPPrev * m_vopmd.intStepBAlpha) / m_vopmd.intStepB;
		if(iQPPrevAlpha<1)
			iQPPrevAlpha=1;
	}
	pmbmd->m_stepSizeAlpha = iQPPrevAlpha;

	m_statsMB.nBitsShape += codeInterShape (
		ppxlcCurrQBY, 
		m_vopmd.fShapeBPredDir==B_FORWARD ? m_pvopcRefQ0 : m_pvopcRefQ1,
		pmbmd, shpmdColocatedMB,
		NULL, pmvBY, 
		x, y, 
		iMBX, iMBY
	);
	downSampleBY (m_ppxlcCurrMBBY, m_ppxlcCurrMBBUV);
	decideTransparencyStatus (pmbmd, m_ppxlcCurrMBBY); // change pmbmd to inter if all transparent
	/*BBM// Added for Boundary by Hyundai(1998-5-9)
	if (m_vopmd.bInterlace) initMergedMode (pmbmd);
	// End of Hyundai(1998-5-9)*/
	if (m_volmd.bShapeOnly == FALSE && pmbmd->m_rgTranspStatus [0] != ALL) {
		if (pmbmd->m_rgTranspStatus [0] == PARTIAL)
			motionCompAndDiff_BVOP_MB_WithShape (pmv, pmvBackward, pmbmd, x, y, &m_rctRefVOPY0, &m_rctRefVOPY1);
		else
			motionCompAndDiff_BVOP_MB (pmv, pmvBackward, pmbmd, x, y, &m_rctRefVOPY0, &m_rctRefVOPY1);
		Bool bSkip = FALSE;
		if (pmbmd->m_mbType == DIRECT)	{
			if(pmvRef == NULL)	//just to be safe
				pmbmd->m_vctDirectDeltaMV = pmv->m_vctTrueHalfPel;
			bSkip = (pmbmd->m_vctDirectDeltaMV.x == 0) && (pmbmd->m_vctDirectDeltaMV.y == 0);
		}
		if(m_volmd.fAUsage == EIGHT_BIT)
			motionCompAndDiffAlpha_BVOP_MB (
				pmv,
				pmvBackward, 
				pmbmd, 
				x, y,
				&m_rctRefVOPY0, &m_rctRefVOPY1
			);
		/*BBM// Added for Boundary by Hyundai(1998-5-9)
		if (m_vopmd.bInterlace && pmbmd -> m_rgTranspStatus [0] == PARTIAL)
                        boundaryMacroBlockMerge (pmbmd);
		// End of Hyundai(1998-5-9)*/
		quantizeTextureInterMB (pmbmd, pmv, ppxlcCurrQMBA, bSkip); // decide COD here; skip not allowed in non-direct mode

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区精品在线| 成人av电影在线观看| 91精品中文字幕一区二区三区| 亚洲一区在线看| 欧美日韩国产免费| 热久久国产精品| 精品美女一区二区| 国产成人精品免费视频网站| 亚洲国产精品99久久久久久久久| 成人午夜av在线| 一区二区在线观看视频| 欧美日韩在线一区二区| 免费观看一级特黄欧美大片| 欧美mv和日韩mv的网站| 岛国精品在线观看| 亚洲国产日韩a在线播放| 欧美一二三区在线观看| 国产91在线观看丝袜| 一区精品在线播放| 欧美精品高清视频| 国产成人精品免费| 亚洲午夜激情网站| 久久免费视频一区| 色欧美88888久久久久久影院| 日韩黄色一级片| 国产精品午夜免费| 欧美日韩国产中文| 国产福利一区二区三区视频在线 | 国产精品理伦片| 欧美三级午夜理伦三级中视频| 六月丁香综合在线视频| 成人免费在线视频观看| 欧美一级日韩免费不卡| 成人av电影在线| 日韩和欧美一区二区三区| 国产欧美日产一区| 日韩一本二本av| 色婷婷久久综合| 国产精品88888| 日本成人在线不卡视频| 亚洲色图欧洲色图婷婷| 精品动漫一区二区三区在线观看| 91成人国产精品| 粉嫩蜜臀av国产精品网站| 日韩福利电影在线观看| 亚洲欧美韩国综合色| 久久久久久99久久久精品网站| 欧美日韩一区二区三区免费看| 国产激情精品久久久第一区二区| 亚洲国产欧美日韩另类综合| 中文字幕免费不卡在线| 日韩精品一区二区三区在线播放| 在线观看欧美黄色| av亚洲精华国产精华精华| 国产精品综合网| 久久电影网站中文字幕| 日韩av在线免费观看不卡| 亚洲激情男女视频| √…a在线天堂一区| 国产亚洲精品福利| 精品国产髙清在线看国产毛片| 欧美性猛片aaaaaaa做受| 成人av免费在线| 国产69精品一区二区亚洲孕妇| 久久电影网站中文字幕 | 欧美一区二区三区免费视频| 欧美一a一片一级一片| 91在线你懂得| av在线一区二区| bt欧美亚洲午夜电影天堂| 成人avav影音| www.色综合.com| av高清久久久| 91免费版在线| 色网站国产精品| 色爱区综合激月婷婷| 91精品福利视频| 日本高清免费不卡视频| 欧美亚洲综合网| 91麻豆精品国产91久久久久久久久| 国产一区二区三区在线观看免费| 国产一区二区三区免费| 美女在线一区二区| 免费高清视频精品| 久久se精品一区二区| 蜜桃av一区二区三区电影| 蜜桃av一区二区三区| 精品一区二区三区视频| 国产在线一区二区| 国产suv精品一区二区6| 高清在线不卡av| 91蜜桃在线免费视频| 精品视频色一区| 日韩丝袜情趣美女图片| 国产三区在线成人av| 国产精品每日更新在线播放网址| 亚洲欧洲另类国产综合| 亚洲最大成人网4388xx| 爽好多水快深点欧美视频| 久久99精品久久久| 国产不卡视频在线播放| 色综合天天综合狠狠| 欧美精品日韩精品| 2欧美一区二区三区在线观看视频| 国产性做久久久久久| 国产精品久久久久天堂| 亚洲h动漫在线| 国产最新精品精品你懂的| 99re在线视频这里只有精品| 欧美性受xxxx| 久久久久一区二区三区四区| 玉米视频成人免费看| 蜜桃传媒麻豆第一区在线观看| 国产成人鲁色资源国产91色综| 在线中文字幕一区二区| 欧美大片日本大片免费观看| 国产精品人人做人人爽人人添| 午夜一区二区三区在线观看| 国产一区二区91| 欧美揉bbbbb揉bbbbb| 中文字幕第一区第二区| 日韩综合小视频| a亚洲天堂av| 精品成人免费观看| 亚洲永久免费视频| 国产在线精品不卡| 欧美日韩大陆一区二区| 日本一区二区在线不卡| 亚洲成av人片| www..com久久爱| 欧美xxxx老人做受| 亚洲福利视频一区| 99久免费精品视频在线观看| 欧美岛国在线观看| 午夜精品久久久久影视| 成年人国产精品| 日韩一区国产二区欧美三区| 亚洲精品国产精品乱码不99| 国内精品免费**视频| 欧美电影一区二区| 一区二区三区在线看| 成人精品视频一区| 2020日本不卡一区二区视频| 亚洲一区在线观看免费观看电影高清| 国产精品888| 精品成人免费观看| 日av在线不卡| 3d动漫精品啪啪一区二区竹菊| 亚洲欧美日韩国产综合| 国产99久久久国产精品免费看| 欧美一二三区在线| 日本欧美加勒比视频| 欧美日韩成人综合在线一区二区| 亚洲私人黄色宅男| 成人免费视频一区| 欧美国产一区二区在线观看| 精品综合免费视频观看| 日韩欧美一级二级| 麻豆成人久久精品二区三区红 | 成人综合在线视频| 精品久久久久久久久久久久包黑料| 亚洲丰满少妇videoshd| 欧美色欧美亚洲另类二区| 亚洲精品少妇30p| 色噜噜狠狠色综合中国| 亚洲欧美国产77777| 91天堂素人约啪| 国产精品久久久爽爽爽麻豆色哟哟 | 久久综合久久久久88| 美腿丝袜亚洲一区| 日韩精品一区二区三区在线 | 精久久久久久久久久久| 日韩视频一区二区三区在线播放| 三级影片在线观看欧美日韩一区二区| 欧美在线你懂得| 三级不卡在线观看| 日韩午夜激情视频| 国产伦精品一区二区三区免费| 久久先锋资源网| 成人精品在线视频观看| 亚洲美女屁股眼交3| 欧美亚洲综合在线| 日韩国产一区二| 久久综合久久综合久久综合| 国产99久久久久| 亚洲综合精品久久| 69久久夜色精品国产69蝌蚪网| 老司机精品视频线观看86| 国产欧美日韩精品在线| 99久久久精品| 三级一区在线视频先锋| 亚洲精品在线观| 91在线一区二区三区| 午夜精品国产更新| 久久久.com| 色哟哟一区二区三区| 免费观看一级特黄欧美大片| 欧美国产激情一区二区三区蜜月| 91老师片黄在线观看| 麻豆精品视频在线观看免费|