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

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

?? sptenc.cpp

?? 小波圖像變換
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
/*************************************************************************

This software module was originally developed by 

	Chuang Gu (chuanggu@microsoft.com), Microsoft Corporation
	(date: Augest, 1997)

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

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:

	sptenc.cpp

Abstract:

	Sprite Encoder.

Revision History:

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

#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 "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::encodeSptTrajectory (Time t, const CSiteD* rgstDest, const CRct& rctWarp)
// code sprite trajactory and make reconstructed frame
{
	m_t = t;
	m_statsVOP.reset ();
	m_pbitstrmOut->reset ();
	cout << "\nVOP " << m_uiVOId << "\n";
	m_vopmd.vopPredType = SPRITE;
	m_rctCurrVOPY = rctWarp;
	codeVOPHead ();
	cout << "\t" << "Time..." << m_t << " (" << m_t/m_volmd.dFrameHz << " sec)\n";
	cout.flush ();
	if (m_iNumOfPnts > 0) {
		quantizeSptTrajectory (rgstDest, rctWarp);
		codeWarpPoints ();		
	}

	if (m_sptMode != BASIC_SPRITE)
		encodeSpritePiece (t);
	if (m_iNumOfPnts > 0) {
        if(m_iNumOfPnts==2 || m_iNumOfPnts==3)	{
			FastAffineWarp (rctWarp, rctWarp / 2, m_uiWarpingAccuracy, m_iNumOfPnts);
        }
        else	{
			CPerspective2D perspYA (m_iNumOfPnts, m_rgstSrcQ, m_rgstDstQ, m_uiWarpingAccuracy);
			warpYA (perspYA, rctWarp, m_uiWarpingAccuracy);
			CSiteD rgstSrcQUV [4], rgstDstQUV [4];
			for (Int i = 0; i < m_iNumOfPnts; i++) {
				rgstSrcQUV [i] = (m_rgstSrcQ [i] - CSiteD (0.5, 0.5)) / 2;
				rgstDstQUV [i] = (m_rgstDstQ [i] - CSiteD (0.5, 0.5)) / 2;
			}
			CPerspective2D perspUV (m_iNumOfPnts, rgstSrcQUV, rgstDstQUV, m_uiWarpingAccuracy);
			warpUV (perspUV, rctWarp / 2, m_uiWarpingAccuracy);
		}
	}

// Begin: modified by Hughes	  4/9/98
//	if((!tentativeFirstSpriteVop) &&  (m_sptMode == BASIC_SPRITE)) {
		// Transmit sprite_trasmit_mode="stop" at the first Sprite VOP.
		// This is a tentative solution for bitstream exchange of
		// normal sprite bitstreams. This part needs to be changed
		// when low latency sprites is integrated.
//		m_pbitstrmOut->putBits (0, 2, "sprite_transmit_mode");
//		tentativeFirstSpriteVop = 1;
//	}
// End: modified by Hughes	  4/9/98

	m_statsVOP.nBitsStuffing += m_pbitstrmOut->flush ();
	m_statsVOL += m_statsVOP;
}

Void CVideoObjectEncoder::quantizeSptTrajectory (const CSiteD* rgstDest, CRct rctWarp)
// construction of m_rgstSrcQ and m_rgstDstQ
{
	CSiteD rgstSrcQ [4];
	rgstSrcQ [0] = CSiteD (rctWarp.left, rctWarp.top);
	rgstSrcQ [1] = CSiteD (rctWarp.right, rctWarp.top);
	rgstSrcQ [2] = CSiteD (rctWarp.left, rctWarp.bottom);
	rgstSrcQ [3] = CSiteD (rctWarp.right, rctWarp.bottom);

	for (Int i = 0; i < m_iNumOfPnts; i++) {
		// quantization	rgstSrc
		CoordD x = rgstSrcQ [i].x, y = rgstSrcQ [i].y;
		Int rnd = (x > 0) ? (Int) (2.0 * x + .5) : (Int) (2.0 * x - .5);
		m_rgstSrcQ [i].x = (CoordD) rnd / (CoordD) 2.;
		rnd = (y > 0) ? (Int) (2.0 * y + .5) : (Int) (2.0 * y - .5);
		m_rgstSrcQ [i].y = (CoordD) rnd / (CoordD) 2.;
		// quantization	rgstDest
		x = rgstDest [i].x;
		y = rgstDest [i].y;
		rnd = (x > 0) ? (Int) (2.0 * x + .5) : (Int) (2.0 * x - .5);
		m_rgstDstQ [i].x = (CoordD) rnd / (CoordD) 2.;
		rnd = (y > 0) ? (Int) (2.0 * y + .5) : (Int) (2.0 * y - .5);
		m_rgstDstQ [i].y = (CoordD) rnd / (CoordD) 2.;
	}
}

UInt CVideoObjectEncoder::codeWarpPoints ()
{
	UInt nBits = 0;
	assert (m_iNumOfPnts > 0);

	// Dest corner points MV encoding
	// construct u, v, du, dv
	Int rgiU [4], rgiV [4], rgiDU [4], rgiDV [4];
	Int j;
	for (j = 0; j < m_iNumOfPnts; j++) { 	//here both m_rgstDstQ and m_rgstSrcQ are in fulpel accuracy
		rgiU [j] = (Int) (2 * (m_rgstDstQ [j].x -  m_rgstSrcQ [j].x));
		rgiV [j] = (Int) (2 * (m_rgstDstQ [j].y -  m_rgstSrcQ [j].y));
	}
	rgiDU [0] = rgiU [0];									rgiDV [0] = rgiV [0];
	rgiDU [1] = rgiU [1] - rgiU [0];						rgiDV [1] = rgiV [1] - rgiV [0];
	rgiDU [2] = rgiU [2] - rgiU [0];						rgiDV [2] = rgiV [2] - rgiV [0];
	rgiDU [3] = rgiU [3] - rgiU [2] - rgiU [1] + rgiU [0];	rgiDV [3] = rgiV [3] - rgiV [2] - rgiV [1] + rgiV [0];
	// du, dv encoding
	Int rgiWrpPnt0Del [2];
	COutBitStream* pobstrmWrpPt0 = m_pentrencSet->m_pentrencWrpPnt -> bitstream ();
	pobstrmWrpPt0->trace (m_rgstDstQ [0], "SPRT_Warp_Point_Q");
	for (j = 0; j < m_iNumOfPnts; j++) { 
		rgiWrpPnt0Del [0] = rgiDU [j];		//make them half pel units
		rgiWrpPnt0Del [1] = rgiDV [j];		//make them half pel units
		for (UInt iXorY = 0; iXorY < 2; iXorY++)	{
			assert (rgiWrpPnt0Del [iXorY] >= -16383 && rgiWrpPnt0Del [iXorY] <= 16383);
			UInt uiAbsWrpPnt0Del = (UInt) abs (rgiWrpPnt0Del [iXorY]);
			Long lSz = 0;
			for (Int i = 14; i > 0; i--)	{
				if (uiAbsWrpPnt0Del & (1 << (i - 1)))	{
					lSz = i;
					break;
				}
			}
			nBits += m_pentrencSet->m_pentrencWrpPnt->encodeSymbol(lSz, "SPRT_Warp_Point");		// huffman encode  // GMC
 
			if (rgiWrpPnt0Del [iXorY] > 0)
				pobstrmWrpPt0->putBits (rgiWrpPnt0Del [iXorY], lSz, "SPRT_Warp_Point_Sgn");	//fix length code
			else if (rgiWrpPnt0Del[iXorY] < 0)
				pobstrmWrpPt0->putBits (~abs(rgiWrpPnt0Del [iXorY]), lSz, "SPRT_Warp_Point_Sgn");		//fix length code
			pobstrmWrpPt0->putBits (MARKER_BIT, 1, "Marker_Bit");
			nBits += lSz + 1; // GMC
		}
	}
	return nBits;
}

//low latency stuff from now on
static	CRct InitPieceRect ;
static	CRct InitPartialRect ;

// code initial sprite piece 
Void CVideoObjectEncoder::encodeInitSprite (const CRct& rctOrg)
{

	m_rctOrg = 	rctOrg;

	if (( m_rctSpt.width < rctOrg.width)  && 		  // handle the bream caption case
		( m_rctSpt.height() < rctOrg.height() ) )	{			
		m_vopmd.SpriteXmitMode = NEXT;
		encode (TRUE, -1, IVOP);
		return;
	}
	m_bSptZoom = FALSE;  // Assuming sprite is not zooming
	m_bSptHvPan = TRUE;  // Assuming sprite is panning horizontally
	m_bSptRightPiece = TRUE;  // Assuming sent right side of the sprite piece
	Int OldCount = m_pbitstrmOut -> getCounter (); // used to compute average macroblock bits
	//	 save sprite object information
	m_pvopcSpt =  m_pvopcOrig;
	m_rctSptQ =  m_pvopcSpt -> whereY ();

	if (m_volmd.fAUsage != RECTANGLE) {
		m_iPieceWidth = m_rctSptQ.width - 2 * EXPANDY_REF_FRAME;
		m_iPieceHeight = m_rctSptQ.height() - 2 * EXPANDY_REF_FRAME;
		m_rctCurrVOPY = CRct(0, 0, m_iPieceWidth, m_iPieceHeight);
	}

// Begin: modified by Hughes	  4/9/98
//	m_rctSptExp = m_rctCurrVOPY;  // see initialSpritePiece()
// end:  modified by Hughes	  4/9/98

	m_iNumMBX = m_rctSptExp.width / MB_SIZE; 
	m_iNumMBY = m_rctSptExp.height () / MB_SIZE;
	m_ppPieceMBstatus = new SptMBstatus* [m_iNumMBY]; 	
	m_ppUpdateMBstatus = new SptMBstatus* [m_iNumMBY];
	m_rgmbmdSpt = new CMBMode* [m_iNumMBY];
	m_rgpmbmCurr_Spt = new MacroBlockMemory** [m_iNumMBY];

// Begin: modified by Hughes	  4/9/98
	Int iNumMB = m_iNumMBX * m_iNumMBY;
	m_rgmbmdSprite = new CMBMode [iNumMB];
	Int iMBY;
//	Int iMBX, iMBY;
// end:  modified by Hughes	  4/9/98

	Int iMB, iBlk;
	Int nBlk = (m_volmd.fAUsage == EIGHT_BIT) ? 10 : 6;
	for (iMBY = 0; iMBY < m_iNumMBY; iMBY++) {
		m_ppPieceMBstatus[iMBY] = new SptMBstatus [m_iNumMBX];
		m_ppUpdateMBstatus[iMBY] = new SptMBstatus [m_iNumMBX];
		m_rgmbmdSpt[iMBY] = new CMBMode [m_iNumMBX];		
		m_rgpmbmCurr_Spt[iMBY] = new MacroBlockMemory* [m_iNumMBX];
		for (iMB = 0; iMB < m_iNumMBX; iMB++)	{
			m_rgpmbmCurr_Spt[iMBY][iMB] = new MacroBlockMemory;
			m_rgpmbmCurr_Spt[iMBY][iMB]->rgblkm = new BlockMemory [nBlk];
			for (iBlk = 0; iBlk < nBlk; iBlk++)	{
				(m_rgpmbmCurr_Spt[iMBY][iMB]->rgblkm) [iBlk] = new Int [(BLOCK_SIZE << 1) - 1];
			}
// Begin: modified by Hughes	  4/9/98
			m_ppPieceMBstatus[iMBY][iMB] = NOT_DONE;
			m_ppUpdateMBstatus[iMBY][iMB] = NOT_DONE;
// end:  modified by Hughes	  4/9/98
		}
	}

// Begin: modified by Hughes	  4/9/98
/*
	CRct rctRefFrameY ;
	if (m_volmd.fAUsage != RECTANGLE) 
	{
		m_pvopcSptP = new CVOPU8YUVBA (*m_pvopcSpt, m_volmd.fAUsage, m_rctSptPieceY);
		m_rctSptPieceY = findTightBoundingBox (m_pvopcSptP);
		delete m_pvopcSptP;
	}
	rctRefFrameY = m_rctSptPieceY ;
	m_rctCurrVOPY = rctRefFrameY;

	m_rctSptPieceY.shift(m_rctSpt.left, m_rctSpt.top);	  // absolute coordinates for VOP
	if ( m_sptMode == PIECE_UPDATE)
		m_vopmd.SpriteXmitMode  = UPDATE;

 	// encode initial sprite piece
	m_pvopcSptP = new CVOPU8YUVBA (*m_pvopcSpt, m_volmd.fAUsage, rctRefFrameY);
	m_rctRefFrameY = CRct (
		-EXPANDY_REF_FRAME, -EXPANDY_REF_FRAME, 
		EXPANDY_REF_FRAME + rctRefFrameY.width, 
		EXPANDY_REF_FRAME + rctRefFrameY.height()
	);
	m_rctRefFrameY.shift (rctRefFrameY.left, rctRefFrameY.top);
	m_rctRefFrameUV = m_rctRefFrameY.downSampleBy2 ();

	m_pvopcOrig = new CVOPU8YUVBA (m_volmd.fAUsage, m_rctRefFrameY); 
	VOPOverlay (*m_pvopcSptP, *m_pvopcOrig);
	
	m_pvopcOrig->setBoundRct (rctRefFrameY);

	// dshu: begin of modification  
	delete m_pvopcRefQ0;	
	delete m_pvopcRefQ1;
	// dshu: end of modification

	m_pvopcRefQ1 = new CVOPU8YUVBA (m_volmd.fAUsage, m_rctRefFrameY);
 	m_pvopcRefQ0 = new CVOPU8YUVBA (m_volmd.fAUsage, m_rctRefFrameY);
	m_iFrameWidthY = m_pvopcRefQ0->whereY ().width;
	m_iFrameWidthUV = m_pvopcRefQ0->whereUV ().width;
	m_iFrameWidthYxMBSize = MB_SIZE * m_pvopcRefQ0->whereY ().width; 
	m_iFrameWidthYxBlkSize = BLOCK_SIZE * m_pvopcRefQ0->whereY ().width; 
	m_iFrameWidthUVxBlkSize = BLOCK_SIZE * m_pvopcRefQ0->whereUV ().width;

	m_iPieceHeight = rctRefFrameY.height () / MB_SIZE;
	m_iPieceWidth= rctRefFrameY.width  / MB_SIZE;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色哟哟国产精品| 国产aⅴ综合色| 国产福利不卡视频| 在线免费观看日韩欧美| 久久久.com| 成人免费毛片片v| 精品久久国产字幕高潮| 国产精品护士白丝一区av| 麻豆久久久久久久| 在线视频欧美区| 国产精品美女久久久久av爽李琼| 亚洲va在线va天堂| av激情亚洲男人天堂| 精品嫩草影院久久| 亚洲一区二区三区激情| 精品成人免费观看| 欧美本精品男人aⅴ天堂| 久久久久久久久免费| 欧美日韩激情一区| 92精品国产成人观看免费 | 国产精品成人一区二区三区夜夜夜| 亚洲精品自拍动漫在线| 色一区在线观看| 裸体健美xxxx欧美裸体表演| 91蜜桃网址入口| 国产日韩欧美制服另类| 久久国产乱子精品免费女| 欧美日韩国产123区| 一区二区三区精品视频在线| 日本美女一区二区三区| 久久成人麻豆午夜电影| 欧美一区二区三区小说| 亚洲妇熟xx妇色黄| 91成人国产精品| 一级女性全黄久久生活片免费| 91亚洲永久精品| 亚洲精品高清在线| 91免费版在线| 亚洲精品日日夜夜| 精品福利一区二区三区免费视频| 懂色av中文一区二区三区 | 91麻豆精品在线观看| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 亚洲第一福利一区| 日韩视频免费直播| 欧美精选一区二区| 免费成人深夜小野草| 日韩欧美不卡在线观看视频| 麻豆精品精品国产自在97香蕉| 欧美日韩另类一区| 老司机免费视频一区二区| 2014亚洲片线观看视频免费| 国产精品亚洲一区二区三区在线| 久久久99久久| 在线观看av一区| 久久国产综合精品| 亚洲国产精品二十页| 色成人在线视频| 奇米影视一区二区三区| 久久久久久久久久久电影| 白白色 亚洲乱淫| 亚洲国产va精品久久久不卡综合| 日韩一区二区在线观看| 国产99精品在线观看| 一区二区三区av电影| 日韩小视频在线观看专区| 国产99久久久国产精品免费看| 一区二区久久久久| 欧美本精品男人aⅴ天堂| 99久久综合色| 日韩电影在线观看网站| 国产欧美日韩视频一区二区 | 欧美欧美午夜aⅴ在线观看| 久久超碰97人人做人人爱| 亚洲色图色小说| 精品国产a毛片| 在线观看视频91| 国产精品自拍毛片| 午夜精品久久久久久久99水蜜桃| 久久久久久久久久久黄色| 欧美性受极品xxxx喷水| 国产在线精品一区二区不卡了| 亚洲欧洲精品一区二区三区 | 精品一区二区三区在线视频| 中文字幕欧美日韩一区| 91精品欧美综合在线观看最新| 久久精品理论片| 欧美激情综合五月色丁香| 狠狠网亚洲精品| 亚洲一区二区黄色| 国产精品麻豆视频| 亚洲精品在线观看视频| 欧美日韩黄色一区二区| 北条麻妃国产九九精品视频| 免费精品视频在线| 亚洲一区二区三区三| 国产精品三级久久久久三级| 91麻豆精品国产91久久久资源速度| 亚洲午夜一区二区| 最新中文字幕一区二区三区 | 午夜精品爽啪视频| 亚洲免费伊人电影| 国产精品毛片高清在线完整版| 欧美一区二区三区免费在线看 | 国产成人精品1024| 99久久久无码国产精品| 国产精品中文字幕一区二区三区| 亚洲成av人片在线观看无码| 亚洲免费毛片网站| 国产精品萝li| 国产精品理论在线观看| 中文字幕不卡的av| 中文字幕不卡在线播放| 欧美韩国日本一区| 国产精品视频免费看| 久久久综合网站| 久久网这里都是精品| 精品国产凹凸成av人导航| 久久中文娱乐网| 久久久99久久| 中文字幕亚洲在| 一级精品视频在线观看宜春院| 亚洲女女做受ⅹxx高潮| 最新国产精品久久精品| 中文字幕一区二| 一区二区三区波多野结衣在线观看| 亚洲欧美日韩中文播放| 一区二区三区**美女毛片| 亚州成人在线电影| 麻豆国产一区二区| 国产一区二区三区免费播放| 国产精品一级二级三级| 欧美日韩激情一区| 欧美日韩一本到| 日韩一区二区免费视频| 久久影院午夜片一区| 国产精品久久久久久久久免费樱桃| 中文字幕视频一区| 亚洲成人自拍网| 精品一区二区三区免费| 99麻豆久久久国产精品免费| 欧美亚洲一区三区| 精品国产欧美一区二区| 中文字幕不卡一区| 丝袜a∨在线一区二区三区不卡| 美女视频一区二区三区| 成人激情小说网站| 欧美日韩一区小说| 久久奇米777| 亚洲精品免费电影| 美女mm1313爽爽久久久蜜臀| 国产一区二区在线影院| 色香色香欲天天天影视综合网| 欧美年轻男男videosbes| 久久久噜噜噜久久人人看 | av在线不卡网| 色天使久久综合网天天| 精品一区二区三区不卡 | 精品对白一区国产伦| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 国产精品亚洲成人| 99re亚洲国产精品| 麻豆一区二区99久久久久| 成人中文字幕在线| 精品视频1区2区3区| 欧美国产乱子伦| 青青草97国产精品免费观看无弹窗版| 粉嫩av亚洲一区二区图片| 欧美一二三区在线观看| 亚洲欧美电影院| 国产一区二区三区免费在线观看| 欧美伊人久久久久久久久影院| 国产香蕉久久精品综合网| 日韩成人av影视| 色狠狠一区二区| 国产精品乱人伦中文| 激情五月激情综合网| 精品一区精品二区高清| 另类人妖一区二区av| 欧美日韩国产影片| 亚洲黄色片在线观看| 成人丝袜视频网| 久久综合九色欧美综合狠狠| 免费在线观看一区| 欧美午夜精品一区二区蜜桃| 18成人在线视频| 99精品国产91久久久久久| 日韩一级成人av| 亚洲大片一区二区三区| 91视频在线观看| 国产精品天美传媒| 国产高清不卡一区二区| 精品捆绑美女sm三区| 日韩精品视频网| 欧美精品久久99久久在免费线| 一区二区三区中文字幕电影| 91一区二区在线观看| 中文字幕字幕中文在线中不卡视频| 成人网在线免费视频| 国产精品久久久久毛片软件|