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

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

?? vopseenc.cpp

?? 此源碼是在VC平臺(tái)下,實(shí)現(xiàn)MPEG4編解碼的源碼
?? CPP
?? 第 1 頁 / 共 5 頁
字號(hào):
/*************************************************************************

This software module was originally developed by 

	Ming-Chieh Lee (mingcl@microsoft.com), Microsoft Corporation
	Wei-ge Chen (wchen@microsoft.com), Microsoft Corporation
	Bruce Lin (blin@microsoft.com), Microsoft Corporation
	Chuang Gu (chuanggu@microsoft.com), Microsoft Corporation
	Simon Winder (swinder@microsoft.com), Microsoft Corporation
	(date: March, 1996)
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)

and also edited by
	David B. Shu (dbshu@hrl.com), Hughes Electronics/HRL Laboratories

	Marc Mongenet (Marc.Mongenet@epfl.ch), Swiss Federal Institute of Technology, Lausanne (EPFL)

and also edited by
	Yoshinori Suzuki (Hitachi, Ltd.)

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:

	vopSeEnc.hpp

Abstract:

	Encoder for one VO.

Revision History:
	Sept. 30, 1997: Error resilient tools added by Toshiba
	Dec.  11, 1997:	Interlaced tools added by NextLevel Systems
					X. Chen, xchen@nlvl.com B. Eifrig, beifrig@nlvl.com
	Jun.  16, 1998: add Complexity Estimation syntax support
					Marc Mongenet (Marc.Mongenet@epfl.ch) - EPFL
	Jan.  28, 1999: Rounding control parameters added by Hitachi, Ltd.
	May    9, 1999:	tm5 rate control by DemoGraFX, duhoff@mediaone.net

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

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

#include "typeapi.h"
#include "codehead.h"
#include "global.hpp"
#include "entropy/bitstrm.hpp"
#include "entropy/entropy.hpp"
#include "entropy/huffman.hpp"
#include "mode.hpp"
#include "dct.hpp"
#include "tps_enhcbuf.hpp" // added by Sharp (98/2/12)
#include "vopses.hpp"
#include "vopseenc.hpp"
#include "enhcbufenc.hpp" // added by Sharp (98/2/12)
#include "cae.h" // Added for error resilient mode by Toshiba(1997-11-14)

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

#define new DEBUG_NEW				   
#endif // __MFC_

CVideoObjectEncoder::~CVideoObjectEncoder ()
{
	delete m_pvopcOrig;
	delete m_pvopcRefOrig1;
	delete m_pvopcRefOrig0;

	delete m_puciRefQZoom0;
	delete m_puciRefQZoom1;
	delete m_pfdct;
	delete [] m_rgdSNR;

	// bitstream stuff
	delete [] m_pchBitsBuffer; 
	delete m_pbitstrmOut;
	delete m_pentrencSet;
	delete [] m_pchShapeBitsBuffer;
	delete m_pbitstrmShape;

//	Added for data partitioning mode By Toshiba(1998-1-16:DP+RVLC)
	delete [] *m_pchShapeBitsBuffer_DP;
	delete [] *m_pbitstrmShape_DP;
	delete m_pchShapeBitsBuffer_DP;
	delete m_pbitstrmShape_DP;
//	End Toshiba(1998-1-16)

	// shape
	delete [] m_rgiSubBlkIndx16x16;
	delete [] m_rgiSSubBlkIndx16x16;
	delete [] m_rgiSubBlkIndx18x18;
	delete [] m_rgiSubBlkIndx20x20;
	delete [] m_rgiPxlIndx12x12;
	delete [] m_rgiPxlIndx8x8;

	// B-VOP MB buffer
	delete m_puciDirectPredMB;
	delete m_puciInterpPredMB;
	delete m_piiDirectErrorMB; 
	delete m_piiInterpErrorMB; 
}

CVideoObjectEncoder::CVideoObjectEncoder (
	UInt uiVOId, 
	VOLMode& volmd, 
	VOPMode& vopmd, 
	UInt nFirstFrame,
	UInt nLastFrame,
	Int iSessionWidth,
	Int iSessionHeight,
	UInt uiRateControl,
	UInt uiBudget,
	ostream* pstrmTrace, // trace outstream
	UInt uiWarpingAccuracy, // for sprite warping
	Int iNumOfPnts, // for sprite warping
	CSiteD** rgstDest, // for sprite warping destination
	SptMode SpriteMode,					// sprite reconstruction mode
	CRct rctFrame,						// sprite warping source
    CRct rctSpt,     	// rct sprite
	Int iMVFileUsage,
	Char* pchMVFileName
) :
	CVideoObject (),
	m_nFirstFrame (nFirstFrame), m_nLastFrame (nLastFrame), 
	m_iBufferSize (uiBudget), m_uiRateControl (uiRateControl),
	m_pvopcOrig (NULL),
	m_rgiSubBlkIndx16x16 (NULL),
	m_rgiSSubBlkIndx16x16 (NULL),
	m_rgiSubBlkIndx18x18 (NULL),
	m_rgiSubBlkIndx20x20 (NULL),
	m_rgiPxlIndx12x12 (NULL),
	m_rgiPxlIndx8x8 (NULL)
{
	m_ivolWidth = iSessionWidth;
	m_ivolHeight = iSessionHeight;		
		
	// sprite stuff
	if (iNumOfPnts >= 0) {
		m_uiSprite = 1;
		m_uiWarpingAccuracy = uiWarpingAccuracy;
		m_iNumOfPnts = iNumOfPnts;
		m_rgstSrcQ = new CSiteD [m_iNumOfPnts];
		m_rgstDstQ = new CSiteD [m_iNumOfPnts];
		m_rctSpt = rctSpt;
		//#ifdef __LOW_LATENCY_SPRITE_
		m_pprgstDest = rgstDest;
		m_sptMode = SpriteMode ;
		m_rctOrg = 	rctFrame;
		m_rctDisplayWindow = m_rctOrg;	//only used for sprite, will be combined with Org later
	}
	else 
		m_uiSprite = 0;

	m_pchBitsBuffer = new Char [iSessionWidth * iSessionHeight * 2];	//we think this is enof for 4:2:0; if crushes, increase the buffer
	m_pbitstrmOut = new COutBitStream (m_pchBitsBuffer, 0, pstrmTrace);
	m_pentrencSet = new CEntropyEncoderSet (*m_pbitstrmOut);

	// shape cache
	m_pchShapeBitsBuffer = new Char [MB_SIZE * MB_SIZE * 2]; // same as above
	m_pbitstrmShape = new COutBitStream (m_pchShapeBitsBuffer, 0, pstrmTrace);
	m_pbitstrmShapeMBOut = m_pbitstrmOut; // initially the output stream (only changes for inter)

	m_uiVOId = uiVOId;
	m_volmd = volmd;

	// NBIT: set right clip table
	setClipTab();

	Int iClockRate = m_volmd.iClockRate;
	assert (iClockRate >= 1 && iClockRate < 65536);
	for (m_iNumBitsTimeIncr = 1; m_iNumBitsTimeIncr < NUMBITS_TIME_RESOLUTION; m_iNumBitsTimeIncr++)	{	
		if (iClockRate == 1)			
			break;
		iClockRate = (iClockRate >> 1);
	}

	m_vopmd = vopmd;
//	decideMVInfo ();                // MV search radius now varys with GOP
	m_vopmd.iRoundingControlEncSwitch = m_volmd.iInitialRoundingType;
	if(!m_volmd.bRoundingControlDisable)
		m_vopmd.iRoundingControlEncSwitch ^= 0x00000001;
	m_vopmd.iRoundingControl = m_vopmd.iRoundingControlEncSwitch;
	Int iMod = iSessionWidth % MB_SIZE;
	Int iSessionWidthRound = (iMod > 0) ? iSessionWidth + MB_SIZE - iMod : iSessionWidth;
	iMod = iSessionHeight % MB_SIZE;
	Int iSessionHeightRound = (iMod > 0) ? iSessionHeight + MB_SIZE - iMod : iSessionHeight;
//	Added for data partitioning mode By Toshiba(1998-1-16:DP+RVLC)
	Int iMB;
	Int iMBN = (iSessionWidthRound/MB_SIZE)*(iSessionHeightRound/MB_SIZE);
	m_pchShapeBitsBuffer_DP = new Char* [iMBN];
	m_pbitstrmShape_DP = new COutBitStream* [iMBN];
	for (iMB = 0; iMB < iMBN; iMB++) {
		m_pchShapeBitsBuffer_DP[iMB] = new Char [MB_SIZE * MB_SIZE * 2]; // same as above
		m_pbitstrmShape_DP[iMB] = new COutBitStream (m_pchShapeBitsBuffer_DP[iMB], 0, pstrmTrace);
	}
// End Toshiba(1998-1-16:DP+RVLC)
	m_rctRefFrameY = CRct (
		-EXPANDY_REF_FRAME, -EXPANDY_REF_FRAME, 
		EXPANDY_REF_FRAME + iSessionWidthRound, EXPANDY_REF_FRAME + iSessionHeightRound
	);
	m_rctRefFrameUV = m_rctRefFrameY.downSampleBy2 ();
	m_pvopcOrig = new CVOPU8YUVBA (m_volmd.fAUsage, m_rctRefFrameY);
	m_pvopcRefOrig0 = new CVOPU8YUVBA (m_volmd.fAUsage, m_rctRefFrameY);
	m_pvopcRefOrig1 = new CVOPU8YUVBA (m_volmd.fAUsage, m_rctRefFrameY);
	allocateVOLMembers (iSessionWidthRound, iSessionHeightRound);

    //#ifdef __LOW_LATENCY_SPRITE_
	// identify initial sprite piece
	if ((m_uiSprite == 1) && (m_sptMode != BASIC_SPRITE) ){
		initialSpritePiece (iSessionWidthRound, iSessionHeightRound);
	}

    CRct rctFrameZoom = m_rctRefFrameY.upSampleBy2 ();
	m_puciRefQZoom0 = new CU8Image (rctFrameZoom);

	m_puciRefQZoom1 = new CU8Image (rctFrameZoom);

	m_pfdct = new CFwdBlockDCT(volmd.nBits);

	// B-VOP MB buffer
	m_puciDirectPredMB = new CU8Image (CRct (0, 0, MB_SIZE, MB_SIZE));
	m_puciInterpPredMB = new CU8Image (CRct (0, 0, MB_SIZE, MB_SIZE));
	m_ppxlcDirectPredMBY = (PixelC*) m_puciDirectPredMB->pixels (); 
	m_ppxlcInterpPredMBY = (PixelC*) m_puciInterpPredMB->pixels (); 

	m_piiDirectErrorMB = new CIntImage (CRct (0, 0, MB_SIZE, MB_SIZE)); 
	m_piiInterpErrorMB = new CIntImage (CRct (0, 0, MB_SIZE, MB_SIZE)); 
	m_ppxliDirectErrorMBY = (PixelI*) m_piiDirectErrorMB->pixels (); 
	m_ppxliInterpErrorMBY = (PixelI*) m_piiInterpErrorMB->pixels (); 

	// with shape
	if (m_volmd.fAUsage != RECTANGLE) {
		m_rgiSubBlkIndx16x16 = computeShapeSubBlkIndex (4, 16);
		m_rgiSSubBlkIndx16x16 = computeShapeSubBlkIndex (2, 16);
		m_rgiSubBlkIndx18x18 = computeShapeSubBlkIndex (4, 18);
		m_rgiSubBlkIndx20x20 = computeShapeSubBlkIndex (4, 20);
		m_rgiPxlIndx12x12 = new Int [8 * 8];		
		Int* piPxl = m_rgiPxlIndx12x12;
		UInt i, j;
		for (i = 2; i < 10; i++)
			for (j = 2; j < 10; j++)
				*piPxl++ = i * 12 + j;
		m_rgiPxlIndx8x8 = new Int [4 * 4];		
		piPxl = m_rgiPxlIndx8x8;
		for (i = 2; i < 6; i++)
			for (j = 2; j < 6; j++)
				*piPxl++ = i * 8 + j;
	}

	m_statsVOL.reset ();
	codeVOHead ();
	codeVOLHead (iSessionWidth, iSessionHeight);//, rctSprite);

	// Added for error resilient mode by Toshiba(1997-11-14): Moved (1998-1-16)
	g_iMaxHeading = MAXHEADING_ERR;
	g_iMaxMiddle = MAXMIDDLE_ERR;
	g_iMaxTrailing = MAXTRAILING_ERR;

	// End Toshiba(1997-11-14)

	m_statsVOL.nBitsStuffing += m_pbitstrmOut->flush ();
	m_statRC.resetSkipMode ();
	m_rgdSNR = (m_volmd.fAUsage == EIGHT_BIT) ? new Double [4] : new Double [3];

	// some fixed variables	
	m_iFrameWidthZoomY = m_iFrameWidthY * 2;
	m_iFrameWidthZoomUV = m_iFrameWidthUV * 2;
	m_iFrameWidthZoomYx2Minus2MB = m_iFrameWidthY * 2 * 2 - 2 * MB_SIZE;
	m_iFrameWidthZoomYx2Minus2Blk = m_iFrameWidthY * 2 * 2 - 2 * BLOCK_SIZE;

	if (m_volmd.fAUsage == RECTANGLE) {
		m_rctCurrVOPY = CRct (0, 0, iSessionWidthRound, iSessionHeightRound);
		m_pvopcOrig->setBoundRct (m_rctCurrVOPY);
		m_rctCurrVOPUV = m_rctCurrVOPY.downSampleBy2 ();
		
		m_rctRefVOPY0 = m_rctCurrVOPY;
		m_rctRefVOPY0.expand (EXPANDY_REFVOP);
		m_rctRefVOPUV0 = m_rctRefVOPY0.downSampleBy2 ();
		
		m_rctRefVOPY1 = m_rctRefVOPY0;
		m_rctRefVOPUV1 = m_rctRefVOPUV0;
		
		m_rctRefVOPZoom0 = m_rctRefVOPY0.upSampleBy2 ();
		m_rctRefVOPZoom1 = m_rctRefVOPY1.upSampleBy2 ();
		m_pvopcRefOrig0->setBoundRct (m_rctRefVOPY0);
		m_pvopcRefOrig1->setBoundRct (m_rctRefVOPY1);

// dshu: begin of modification
	if ((m_uiSprite == 0) || ((m_uiSprite == 1) && (m_sptMode == BASIC_SPRITE)) )	
// dshu: end of modification

		computeVOLConstMembers (); // these VOP members are the same for all frames
	}

	m_vopmd.SpriteXmitMode = STOP ;	
    // tentative solution for indicating the first Sprite VOP
    tentativeFirstSpriteVop = 0;

	// Open motion vector file if used
	m_pchMVFileName = pchMVFileName;
	if (m_iMVFileUsage = iMVFileUsage) {
		m_fMVFile = fopen(m_pchMVFileName, (m_iMVFileUsage == 1) ? "r" : "w");
		assert(m_fMVFile != NULL);
		m_iMVLineNo = 0;
	}
}

// for back/forward shape

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久九九久久九九| 久久综合99re88久久爱| 激情综合网av| 一区二区视频免费在线观看| 欧美一卡2卡3卡4卡| 91亚洲永久精品| 精品一区二区三区免费播放| 亚洲一区自拍偷拍| 国产三级精品视频| 欧美一级夜夜爽| 欧洲人成人精品| 大胆亚洲人体视频| 玖玖九九国产精品| 亚洲国产aⅴ成人精品无吗| 欧美激情综合在线| 精品国产乱码久久久久久影片| 色老汉一区二区三区| 国产精品888| 精品在线你懂的| 99精品一区二区三区| 国产精品中文字幕欧美| 免费精品99久久国产综合精品| 亚洲最大成人网4388xx| 自拍偷拍欧美激情| 国产精品欧美一区二区三区| 久久嫩草精品久久久精品一| 欧美一区二区免费观在线| 欧美日本国产一区| 欧美午夜不卡在线观看免费| 色伊人久久综合中文字幕| 成人毛片老司机大片| 国产激情视频一区二区三区欧美| 美女脱光内衣内裤视频久久影院| 天天av天天翘天天综合网| 一区二区三区中文字幕电影 | 精品国产乱码久久久久久免费| 欧美人与z0zoxxxx视频| 欧美三级电影在线看| 欧洲一区二区av| 欧美偷拍一区二区| 欧美视频精品在线观看| 欧美伊人久久大香线蕉综合69| 色综合久久天天综合网| 在线视频国内一区二区| 91福利在线看| 欧美视频自拍偷拍| 欧美高清视频一二三区 | 欧美精品 日韩| 在线播放中文字幕一区| 91精品在线麻豆| 日韩免费观看高清完整版在线观看| 日韩一区二区免费在线电影| 日韩三级视频在线观看| 精品日韩99亚洲| 国产午夜一区二区三区| 中文字幕不卡在线观看| 亚洲免费观看在线观看| 亚洲福利视频一区二区| 日本视频免费一区| 国产一区二区调教| 99久久久久久| 欧美日韩在线不卡| 精品国产在天天线2019| 国产午夜精品美女毛片视频| 中文字幕在线观看不卡| 亚洲综合丁香婷婷六月香| 日韩专区欧美专区| 国产精品一品二品| 97精品视频在线观看自产线路二| 欧美午夜影院一区| 日韩欧美123| 中文字幕一区视频| 午夜免费久久看| 国产精品综合二区| 在线看不卡av| 精品国产91久久久久久久妲己| 国产精品色一区二区三区| 亚洲午夜精品17c| 国产麻豆午夜三级精品| 色综合天天视频在线观看| 91精品婷婷国产综合久久 | 精品少妇一区二区| 亚洲视频狠狠干| 日韩二区三区四区| eeuss国产一区二区三区| 欧美精品丝袜中出| 中文字幕的久久| 日韩二区三区在线观看| 成人a区在线观看| 欧美精品 日韩| 日韩一区日韩二区| 精品一区二区免费视频| 在线免费观看日本欧美| 久久综合九色综合97婷婷| 一区二区三区四区在线免费观看 | 欧美一区午夜精品| 欧美国产精品一区二区| 午夜电影一区二区三区| 菠萝蜜视频在线观看一区| 欧美精品18+| 亚洲色图在线看| 久久www免费人成看片高清| 91九色最新地址| 国产视频911| 免费美女久久99| 欧美主播一区二区三区美女| 欧美激情综合在线| 美女一区二区视频| 欧美丝袜丝交足nylons图片| 国产精品免费aⅴ片在线观看| 蜜桃久久久久久久| 欧美三电影在线| 中文字幕亚洲视频| 国产精品主播直播| 欧美成人激情免费网| 丝袜国产日韩另类美女| 色www精品视频在线观看| 亚洲国产成人午夜在线一区| 国模冰冰炮一区二区| 欧美一区二区精品| 免费在线成人网| 欧美精品日韩综合在线| 亚洲亚洲人成综合网络| 91免费在线播放| 国产精品国产自产拍高清av王其| 国产乱色国产精品免费视频| 日韩一卡二卡三卡| 免费高清视频精品| 91精品国产入口| 日韩—二三区免费观看av| 精品视频999| 婷婷久久综合九色综合伊人色| 日本高清免费不卡视频| 亚洲裸体在线观看| 色婷婷久久99综合精品jk白丝| 国产精品激情偷乱一区二区∴| 国产成人综合网站| 欧美国产日产图区| 成人黄色大片在线观看| 国产精品麻豆久久久| voyeur盗摄精品| 18成人在线观看| 色婷婷av一区| 亚洲一区在线观看视频| 色老汉一区二区三区| 亚洲成人自拍偷拍| 91麻豆精品91久久久久久清纯| 免费在线看一区| 久久亚区不卡日本| 成人精品gif动图一区| 国产精品久久久久9999吃药| 91偷拍与自偷拍精品| 一区二区三区成人在线视频| 欧美日韩国产影片| 蜜桃视频在线一区| 日本一区二区三区国色天香| av中文字幕不卡| 一区二区免费在线播放| 91麻豆精品国产综合久久久久久| 免费三级欧美电影| 久久久噜噜噜久久中文字幕色伊伊| 国产黄色精品网站| 亚洲伦理在线精品| 欧美一区二区三区精品| 国产盗摄一区二区三区| 亚洲欧美aⅴ...| 欧美一区二区三区人| 国产成人鲁色资源国产91色综 | 成人精品免费视频| 一区二区高清视频在线观看| 制服.丝袜.亚洲.另类.中文| 国产一区在线观看麻豆| 国产精品久久一级| 7777精品伊人久久久大香线蕉经典版下载 | 91精品1区2区| 麻豆91免费观看| 亚洲欧洲www| 91精品国产91久久久久久一区二区| 国产另类ts人妖一区二区| 亚洲免费视频中文字幕| 精品噜噜噜噜久久久久久久久试看| www.日本不卡| 久久99热这里只有精品| 亚洲啪啪综合av一区二区三区| 91精品国产综合久久福利软件| 国产成人精品一区二区三区四区| 有码一区二区三区| 久久精品男人的天堂| 欧美日韩一区二区三区高清| 粉嫩aⅴ一区二区三区四区五区| 亚洲五码中文字幕| 国产精品国产三级国产普通话蜜臀 | 成人网在线免费视频| 婷婷久久综合九色综合伊人色| 国产精品久久毛片av大全日韩| 91精品国产综合久久国产大片| 96av麻豆蜜桃一区二区| 精品一区二区三区视频| 午夜精品福利一区二区蜜股av| 国产精品久久久久久久久搜平片|