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

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

?? mbtransquant.c

?? 用MPEG-4對YUV視頻文件編碼壓縮成divx視頻文件
?? C
?? 第 1 頁 / 共 2 頁
字號:
 /******************************************************************************
  *                                                                            *
  *  This file is part of XviD, a free MPEG-4 video encoder/decoder            *
  *                                                                            *
  *  XviD is an implementation of a part of one or more MPEG-4 Video tools     *
  *  as specified in ISO/IEC 14496-2 standard.  Those intending to use this    *
  *  software module in hardware or software products are advised that its     *
  *  use may infringe existing patents or copyrights, and any such use         *
  *  would be at such party's own risk.  The original developer of this        *
  *  software module and his/her company, and subsequent editors and their     *
  *  companies, will have no liability for use of this software or             *
  *  modifications or derivatives thereof.                                     *
  *                                                                            *
  *  XviD is free software; you can redistribute it and/or modify it           *
  *  under the terms of the GNU General Public License as published by         *
  *  the Free Software Foundation; either version 2 of the License, or         *
  *  (at your option) any later version.                                       *
  *                                                                            *
  *  XviD is distributed in the hope that it will be useful, but               *
  *  WITHOUT ANY WARRANTY; without even the implied warranty of                *
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             *
  *  GNU General Public License for more details.                              *
  *                                                                            *
  *  You should have received a copy of the GNU General Public License         *
  *  along with this program; if not, write to the Free Software               *
  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA  *
  *                                                                            *
  ******************************************************************************/

 /******************************************************************************
  *                                                                            *
  *  mbtransquant.c                                                            *
  *                                                                            *
  *  Copyright (C) 2001 - Peter Ross <pross@cs.rmit.edu.au>                    *
  *  Copyright (C) 2001 - Michael Militzer <isibaar@xvid.org>                  *
  *                                                                            *
  *  For more information visit the XviD homepage: http://www.xvid.org         *
  *                                                                            *
  ******************************************************************************/

 /******************************************************************************
  *                                                                            *
  *  Revision history:                                                         *
  *                                                                            *
  *  29.03.2002 interlacing speedup - used transfer strides instead of
  *             manual field-to-frame conversion
  *  26.03.2002 interlacing support - moved transfers outside loops
  *  22.12.2001 get_dc_scaler() moved to common.h
  *  19.11.2001 introduced coefficient thresholding (Isibaar)                  *
  *  17.11.2001 initial version                                                *
  *                                                                            *
  ******************************************************************************/

#include <string.h>

#include "../user_macro.h"
#include "../portab.h"
#include "mbfunctions.h"

#include "../global.h"
#include "mem_transfer.h"
#include "timer.h"
#include "../dct/fdct.h"
#include "../dct/idct.h"
#include "../quant/quant_mpeg4.h"
/*#include "../quant/quant_h263.h"*/
#include "../encoder.h"
/* whq,2002.12.19 */
/*#include "../prediction/mbprediction.h"*/
#include "../bitstream/cbp.h"


/*!
 ****************************************************************************
 * 
 * Add prediction in MBTransQuantIntra, 2002.12.22, by whq
 *
 ***************************************************************************
*/
#define TOOSMALL_LIMIT 1		/* skip blocks having a coefficient sum below this value */
/* whq,2002.12.19 prediction */
/*whq,2002.12.18*/
extern int16_t dc_quant[2][31];

/**************************ADD by zjy***************************/
extern FILE *ftestlog;
/***************************************************************/




/*whq,2002.12.18*/
static const int16_t default_acdc_values[15] = {
	1024,
	0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0
};


/*!
 ****************************************************************************
 * \brief
 *
 * predict ac,dc direction according to the neighbour blocks
 *
 ***************************************************************************
*/
void
predict_acdc(MACROBLOCK * pMBs,				/*<-- macroblock struct */		
			 uint32_t x,					/*<-- macroblock row pos */
			 uint32_t y,					/*<-- macroblock column pos */
			 uint32_t mb_width,				/*<-- macroblock number in a row */
			 uint32_t block,				/*<-- block number in a macroblock */
			 int16_t qcoeff[64],			/*<-- quant orig value,no use now*/
			 uint32_t current_quant,		/*<-- quant value */
			 uint32_t chrom_lumflag,		/*<-- chrom or lum block */
			 int16_t predictors[8])			/*<--> first row or column predict value */

{
/* whq,2002.12.17 ,delete */
/*
	const int mbpos = (y * mb_width) + x;
*/
	/*宏塊的左、上、對角宏塊的預測值*/
	int16_t *left, *top, *diag, *current;


/* whq,2002.12.17 */
/* save the first col and first row predict value */

	/*塊的左、上、對角塊的預測值*/
	const int16_t *pLeft = default_acdc_values;
	const int16_t *pTop = default_acdc_values;
	const int16_t *pDiag = default_acdc_values;
	int32_t level0,sign0;

	uint32_t index = x + y * mb_width;	/*current macroblock*/
	int *acpred_direction = &pMBs[index].acpred_directions[block];
	uint32_t i;

/*whq,2002.12.18*/
		
	
	int16_t (*q)[31];
	q = dc_quant;
	left = top = diag = current = 0;
/* use x,y to judge the macroblocks position */
	/* grab left,top and diag macroblocks*/
	/* 當前宏塊的左邊、上邊,對角線宏塊 */

	/* left macroblock*/ 

	if (x &&  
		(pMBs[index - 1].mode == MODE_INTRA ||
		 pMBs[index - 1].mode == MODE_INTRA_Q))
	{

		left = pMBs[index - 1].pred_values[0];

	}
	/* top macroblock*/

	if (y&&(pMBs[index - mb_width].mode == MODE_INTRA ||
		 pMBs[index - mb_width].mode == MODE_INTRA_Q)) {

		top = pMBs[index - mb_width].pred_values[0];

	}
	/* diag macroblock */

	if (x && y &&
		(pMBs[index - 1 - mb_width].mode == MODE_INTRA ||
		 pMBs[index - 1 - mb_width].mode == MODE_INTRA_Q)) {

		diag = pMBs[index - 1 - mb_width].pred_values[0];
	}

	current = pMBs[index].pred_values[0];

	/* now grab pLeft, pTop, pDiag _blocks_,for block level only  */
    /* 判斷當前塊所使用左邊塊,上邊塊和對角線塊 */
	switch (block) {

	case 0:
		if (left)
			pLeft = left + MBPRED_SIZE;

		if (top)
			pTop = top + (MBPRED_SIZE << 1);

		if (diag)
			pDiag = diag + 3 * MBPRED_SIZE;

		break;

	case 1:
		pLeft = current;
/* whq,2002.12.17 ,delete */
/*
		left_quant = current_quant;
*/

		if (top) {
			pTop = top + 3 * MBPRED_SIZE;
			pDiag = top + (MBPRED_SIZE << 1);
		}
		break;

	case 2:
		if (left) {
			pLeft = left + 3 * MBPRED_SIZE;
			pDiag = left + MBPRED_SIZE;
		}

		pTop = current;
/* whq,2002.12.17 ,delete */
/*
		top_quant = current_quant;
*/

		break;

	case 3:
		pLeft = current + (MBPRED_SIZE << 1);
/* whq,2002.12.17 ,delete */
/*
		left_quant = current_quant;
		top_quant = current_quant;
*/

		pTop = current + MBPRED_SIZE;		
		pDiag = current;

		break;

	case 4:
		if (left)
			pLeft = left + (MBPRED_SIZE << 2);
		if (top)
			pTop = top + (MBPRED_SIZE << 2);
		if (diag)
			pDiag = diag + (MBPRED_SIZE << 2);
		break;

	case 5:
		if (left)
			pLeft = left + 5 * MBPRED_SIZE;
		if (top)
			pTop = top + 5 * MBPRED_SIZE;
		if (diag)
			pDiag = diag + 5 * MBPRED_SIZE;
		break;
	}

	/*  determine ac prediction direction & ac/dc predictor*/
	/*  place rescaled ac/dc predictions into predictors[] for later use*/
	/*  根據水平和垂直梯度判斷預測值,pTop等中dc保存的是原始值,未經量化,
		ac保存的是經過量化的,predictor中保存的是量化后的還是?????*/
	if (abs(pLeft[0] - pDiag[0]) < abs(pDiag[0] - pTop[0])) {
		*acpred_direction = 1;	/* vertical*/
		/*whq,2002.12.17, ???????????????*/
		
        /* whq,2002.12.18,look up the table to convert div to mul */	
		/*predictors[0] = DIV_DIV(pTop[0], iDcScaler);*/
		sign0  = max(min(pTop[0],1),-1);
		level0 = abs(pTop[0]);
		predictors[0] =(level0*(*(*(q+chrom_lumflag)+current_quant-1))+32768)>>16;
		predictors[0] = sign0*predictors[0];
		
		
		/*predictors[0] = pTop[0];*/
		for (i = 1; i < 8; i++) {
		/* whq,2002.12.17 ,delete */
		/*
			predictors[i] = rescale(top_quant, current_quant, pTop[i]);
		*/
			predictors[i] = pTop[i];

		}
	} else {
		*acpred_direction = 2;	/* horizontal*/
		/*whq,2002.12.17, ???????????????*/
		
		/*predictors[0] = DIV_DIV(pLeft[0], iDcScaler);*/

		sign0  = max(min(pLeft[0],1),-1);
		level0 = abs(pLeft[0]);
		predictors[0] =(level0*(*(*(q+chrom_lumflag)+current_quant-1))+32768)>>16;
		predictors[0] = sign0*predictors[0];
		/*predictors[0] = pLeft[0];*/

		for (i = 1; i < 8; i++) {
		/* whq,2002.12.17 ,delete */
		/*
			predictors[i] = rescale(left_quant, current_quant, pLeft[i + 7]);
		*/
			predictors[i] =  pLeft[i + 7];

		}
	}
}


/*!
 ****************************************************************************
 * \brief
 *
 *		compute the diff between sum of abs(level) and sum of 
 *      abs(predict-diff) for deciding predict or not
 *      
 ***************************************************************************
*/
int32_t							/*==> return the diff to judge use prediction or not*/
calc_acdc(MACROBLOCK * pMB,			/*<-- macroblock struct */	
		  uint32_t block,			/*<-- block number in a macroblock */
		  int16_t qcoeff[64],		/*<--> in:quant orig value/out:dc diff,other not change*/
		  uint32_t iDcScaler,		/*<-- dc quant scaler */
		  int16_t predictors[8]		/*<--> in:predict row or column value
										  /out:dc not change,but ac is the diff*/
		  )
{
	int16_t *pCurrent = pMB->pred_values[block];
	uint32_t i;
	uint32_t S1 = 0, S2 = 0;
	int16_t level;


	/* store current coeffs to pred_values[] for future prediction */
	/* pCurrent[0]??,whq,2002.12.17 ,
	   qcoeff[0]的意義是dc經過量化的結果
		恢復成量化前的,用于以后塊的dc預測*/

	
	pCurrent[0] = qcoeff[0] * iDcScaler;

	
	for (i = 1; i < 8; i++) {
		pCurrent[i] = qcoeff[i];
		pCurrent[i + 7] = qcoeff[i * 8];
	}

	/* subtract predictors and store back in predictors[] */
	/*whq,predictors ?? */
	/*qcoeff[0] = qcoeff[0] - predictors[0];*/
	/*dc must be predict,ac is not sure */
	/* whq,2002.12.18 */
	qcoeff[0] = qcoeff[0] - predictors[0];

	if (pMB->acpred_directions[block] == 1) {
		for (i = 1; i < 8; i++) {

			level = qcoeff[i];
			S2 += abs(level);
			level -= predictors[i];
			S1 += abs(level);
			predictors[i] = level;
		}
	} else						/*acpred_direction == 2*/
	{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美疯狂做受xxxx富婆| 亚洲私人影院在线观看| 国产精品乱人伦| 五月天视频一区| 成人少妇影院yyyy| 91麻豆精品国产91久久久| 国产精品久久久久aaaa樱花| 日本一区中文字幕| 欧美三级午夜理伦三级中视频| 国产免费久久精品| 麻豆成人av在线| 在线日韩国产精品| 亚洲日本韩国一区| 成人国产亚洲欧美成人综合网| 精品国产欧美一区二区| 日本美女一区二区三区| 欧美日韩免费高清一区色橹橹| 中文字幕一区二区5566日韩| 国产宾馆实践打屁股91| 久久午夜羞羞影院免费观看| 国产一区在线看| 久久久精品黄色| 国产电影精品久久禁18| 日本一区免费视频| 国产99久久久久| 久久久久99精品一区| 美脚の诱脚舐め脚责91| 日韩午夜电影av| 美国毛片一区二区三区| 欧美一级欧美一级在线播放| 免费成人在线观看视频| 日韩一区二区视频在线观看| 久久狠狠亚洲综合| 欧美sm美女调教| 国产成人免费9x9x人网站视频| 久久精品亚洲国产奇米99| 国产经典欧美精品| 亚洲欧洲日产国码二区| 色婷婷久久综合| 一区二区三区欧美在线观看| 在线观看欧美日本| 日韩av网站在线观看| 欧美大片在线观看一区| 国产福利不卡视频| 亚洲欧洲综合另类| 在线综合亚洲欧美在线视频| 精品一区二区在线免费观看| 欧美高清在线视频| 暴力调教一区二区三区| 亚洲va在线va天堂| 久久综合九色综合欧美亚洲| 国产成人在线观看免费网站| 日韩毛片一二三区| 欧美揉bbbbb揉bbbbb| 久久国产精品99精品国产| 久久精品视频一区二区三区| 99re6这里只有精品视频在线观看| 一区二区三区在线看| 欧美一级高清片在线观看| 国产成人在线色| 亚洲一区二区三区爽爽爽爽爽| 欧美一区二区三区男人的天堂| 国产美女精品一区二区三区| 亚洲精品国产精华液| 精品久久久久久无| 91亚洲国产成人精品一区二三 | 蜜臀91精品一区二区三区| 久久亚洲影视婷婷| 91国偷自产一区二区三区成为亚洲经典| 婷婷中文字幕综合| 国产精品视频看| 欧美精品成人一区二区三区四区| 国产乱码一区二区三区| 亚洲午夜视频在线观看| 国产三级久久久| 欧美久久久久久久久中文字幕| 成人亚洲一区二区一| 亚洲韩国精品一区| 亚洲国产精品99久久久久久久久 | 亚洲国产成人高清精品| 国产亚洲va综合人人澡精品| 欧美日韩在线观看一区二区 | 国产精品亚洲人在线观看| 亚洲一区二区av电影| 国产欧美日韩综合| 欧美变态tickling挠脚心| 欧美中文字幕久久| 91视频国产观看| 成人在线视频一区二区| 奇米一区二区三区| 日本不卡在线视频| 日韩精品免费视频人成| 尤物视频一区二区| 亚洲色欲色欲www| 国产精品视频看| 久久久久久一级片| 精品国产成人在线影院 | 国产乱对白刺激视频不卡| 亚洲福利视频三区| 一区二区理论电影在线观看| 国产精品入口麻豆原神| 久久久久久久久99精品| 精品美女一区二区三区| 欧美一区二区三区在线观看视频| 在线观看日韩毛片| 欧美午夜精品久久久久久孕妇| 成人99免费视频| 99国产精品国产精品毛片| 成人性生交大片免费| 国产不卡视频一区| 成人动漫视频在线| 97精品视频在线观看自产线路二| 岛国精品在线观看| 丰满放荡岳乱妇91ww| av中文字幕一区| 日本久久电影网| 欧美艳星brazzers| 91精品国产91久久综合桃花 | 麻豆91小视频| 久久福利视频一区二区| 激情成人午夜视频| 国产a视频精品免费观看| 99国产欧美久久久精品| 欧美亚男人的天堂| 欧美卡1卡2卡| 精品久久人人做人人爽| 中文字幕乱码日本亚洲一区二区| 国产精品久久久久久久蜜臀 | 中文字幕在线播放不卡一区| 亚洲另类在线制服丝袜| 亚洲高清一区二区三区| 寂寞少妇一区二区三区| 成人中文字幕合集| 欧美日韩一区高清| 久久综合久色欧美综合狠狠| 中文字幕一区日韩精品欧美| 亚洲激情校园春色| 久久国产夜色精品鲁鲁99| 国产成人av一区二区三区在线观看| 波多野结衣欧美| 欧美亚洲禁片免费| 久久久www免费人成精品| 樱桃视频在线观看一区| 美国三级日本三级久久99| 成人免费观看av| 欧美另类一区二区三区| 日本一区二区三区dvd视频在线 | 国产精品久久久久aaaa樱花| 午夜av电影一区| 成a人片亚洲日本久久| 欧美日韩国产综合一区二区 | 午夜欧美电影在线观看| 狠狠色狠狠色合久久伊人| 欧美在线影院一区二区| 久久天堂av综合合色蜜桃网| 一区二区三区在线不卡| 国产中文字幕精品| 在线视频国内一区二区| 欧美极品xxx| 青青草伊人久久| 91美女精品福利| 国产亚洲制服色| 日韩有码一区二区三区| 色综合久久久久网| 久久蜜桃一区二区| 日韩精品一二三四| 色8久久精品久久久久久蜜| 日本一区二区视频在线| 蜜臀久久久久久久| 欧美综合天天夜夜久久| 国产精品视频第一区| 九九在线精品视频| 欧美一区二区视频免费观看| 亚洲精品国产成人久久av盗摄 | 国产高清不卡一区二区| 欧美一卡二卡三卡四卡| 亚洲宅男天堂在线观看无病毒| 国产二区国产一区在线观看| 日韩天堂在线观看| 日本不卡视频在线观看| 欧美伦理影视网| 亚洲午夜久久久久| 在线一区二区视频| 中文字幕一区在线| 99精品视频在线免费观看| 中文字幕va一区二区三区| 国产成人精品一区二| 久久久青草青青国产亚洲免观| 久久精品国产999大香线蕉| 91精品国产免费久久综合| 丝袜美腿亚洲综合| 777午夜精品免费视频| 日韩精品成人一区二区在线| 欧美精品免费视频| 亚洲第一综合色| 正在播放一区二区| 另类小说视频一区二区| 欧美哺乳videos| 国产精品性做久久久久久| 国产欧美1区2区3区|