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

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

?? mp4_block.c

?? MPEG4解碼源代碼
?? C
字號(hào):
/**************************************************************************
 *                                                                        *
 * This code has been developed by Andrea Graziani. This software 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 (including Project Mayo), will have no liability for use of  *
 * this software or modifications or derivatives thereof.                 *
 *                                                                        *
 * Project Mayo gives users of the Codec a license to this software       *
 * module or modifications thereof for use in hardware or software        *
 * products claiming conformance to the MPEG-4 Video Standard as          *
 * described in the Open DivX license.                                    *
 *                                                                        *
 * The complete Open DivX license can be found at                         *
 * http://www.projectmayo.com/opendivx/license.php                        *
 *                                                                        *
 **************************************************************************/
/**
*  Copyright (C) 2001 - Project Mayo
 *
 * Andrea Graziani (Ag)
 *
 * DivX Advanced Research Center <darc@projectmayo.com>
*
**/
/// mp4_block.c //

#include <math.h>
#include <stdlib.h>
#include <assert.h>

#include "mp4_vars.h"

#include "getbits.h"
#include "clearblock.h"
#include "mp4_iquant.h"
#include "mp4_predict.h"
#include "mp4_vld.h"
#include "debug.h"
#include "mp4_block.h"

/**
 *
**/

static int getDCsizeLum();
static int getDCsizeChr();
static int getDCdiff();
static void setDCscaler(int block_num);

static int getACdir();

/***/

// Purpose: texture decoding of block_num
int block(int block_num, int coded)
{
	int i;
	int dct_dc_size, dct_dc_diff;
	int intraFlag = ((mp4_state->hdr.derived_mb_type == INTRA) || 
		(mp4_state->hdr.derived_mb_type == INTRA_Q)) ? 1 : 0;
	event_t event;

	clearblock(ld->block); // clearblock

	if (intraFlag)
	{
		setDCscaler(block_num); // calculate DC scaler

		if (block_num < 4) {
			dct_dc_size = getDCsizeLum();
			if (dct_dc_size != 0) 
				dct_dc_diff = getDCdiff(dct_dc_size);
			else 
				dct_dc_diff = 0;
			if (dct_dc_size > 8)
				getbits1(); // marker bit
		}
		else {
			dct_dc_size = getDCsizeChr();
			if (dct_dc_size != 0)
				dct_dc_diff = getDCdiff(dct_dc_size);
			else 
				dct_dc_diff = 0;
			if (dct_dc_size > 8)
				getbits1(); // marker bit
		}

		ld->block[0] = (short) dct_dc_diff;
//		_Print("DC diff: %d\n", dct_dc_diff);
	}
	if (intraFlag)
	{
		// dc reconstruction, prediction direction
		dc_recon(block_num, &ld->block[0]);
	}

	if (coded) 
	{
		unsigned int * zigzag; // zigzag scan dir

		if ((intraFlag) && (mp4_state->hdr.ac_pred_flag == 1)) {

			if (mp4_state->coeff_pred.predict_dir == TOP)
				zigzag = mp4_tables->alternate_horizontal_scan;
			else
				zigzag = mp4_tables->alternate_vertical_scan;
		}
		else {
			zigzag = mp4_tables->zig_zag_scan;
		}

		i = intraFlag ? 1 : 0;
		do // event vld
		{
			event = vld_event(intraFlag);
/***
			if (event.run == -1)
			{
				printf("Error: invalid vld code\n");
				exit(201);
			}
***/			
			i+= event.run;
			ld->block[zigzag[i]] = (short) event.level;

//			_Print("Vld Event: Run Level Last %d %d %d\n", event.run, event.level, event.last);

			i++;
		} while (! event.last);
	}

	if (intraFlag)
	{
		// ac reconstruction
		// ac_rescaling(...)
		ac_recon(block_num, &ld->block[0]);
	}

#ifdef _DEBUG_B_ACDC
	if (intraFlag)
	{
		int i;
		_Print("After AcDcRecon:\n");
		_Print("   x ");
		for (i = 1; i < 64; i++) {
			if ((i != 0) && ((i % 8) == 0))
				_Print("\n");
			_Print("%4d ", ld->block[i]);
		}
		_Print("\n");
	}
#endif // _DEBUG_ACDC

	if (mp4_state->hdr.quant_type == 0)
	{
		// inverse quantization
		iquant(ld->block, intraFlag);
	}
	else 
	{
		_Error("Error: MPEG-2 inverse quantization NOT implemented\n");
		exit(110);
	}

#ifdef _DEBUG_B_QUANT
	{
		int i;
		_Print("After IQuant:\n");
		_Print("   x ");
		for (i = 1; i < 64; i++) {
			if ((i != 0) && ((i % 8) == 0))
				_Print("\n");
			_Print("%4d ", ld->block[i]);
		}
		_Print("\n");
	}
#endif // _DEBUG_B_QUANT

	// inverse dct
	idct(ld->block);

	return 1;
}

/***/

int blockIntra(int block_num, int coded)
{
	int i;
	int dct_dc_size, dct_dc_diff;
	event_t event;

	clearblock(ld->block); // clearblock

	// dc coeff
	setDCscaler(block_num); // calculate DC scaler

	if (block_num < 4) {
		dct_dc_size = getDCsizeLum();
		if (dct_dc_size != 0) 
			dct_dc_diff = getDCdiff(dct_dc_size);
		else 
			dct_dc_diff = 0;
		if (dct_dc_size > 8)
			getbits1(); // marker bit
	}
	else {
		dct_dc_size = getDCsizeChr();
		if (dct_dc_size != 0)
			dct_dc_diff = getDCdiff(dct_dc_size);
		else 
			dct_dc_diff = 0;
		if (dct_dc_size > 8)
			getbits1(); // marker bit
	}

	ld->block[0] = (short) dct_dc_diff;

	// dc reconstruction, prediction direction
	dc_recon(block_num, &ld->block[0]);

	if (coded) 
	{
		unsigned int * zigzag; // zigzag scan dir

		if (mp4_state->hdr.ac_pred_flag == 1) {

			if (mp4_state->coeff_pred.predict_dir == TOP)
				zigzag = mp4_tables->alternate_horizontal_scan;
			else
				zigzag = mp4_tables->alternate_vertical_scan;
		}
		else {
			zigzag = mp4_tables->zig_zag_scan;
		}

		i = 1;
		do // event vld
		{
			event = vld_intra_dct();
/***
			if (event.run == -1)
			{
				printf("Error: invalid vld code\n");
				exit(201);
			}
***/			
			i+= event.run;
			ld->block[zigzag[i]] = (short) event.level;

//			_Print("Vld Event: Run Level Last %d %d %d\n", event.run, event.level, event.last);

			i++;
		} while (! event.last);
	}

	// ac reconstruction
	mp4_state->hdr.intrablock_rescaled = ac_rescaling(block_num, &ld->block[0]);
	if (! mp4_state->hdr.intrablock_rescaled)
	{
		ac_recon(block_num, &ld->block[0]);
	}
	ac_store(block_num, &ld->block[0]);

	if (mp4_state->hdr.quant_type == 0)
	{
		iquant(ld->block, 1);
	}
	else 
	{
		iquant_typefirst(ld->block);
	}

	// inverse dct
	idct(ld->block);

	return 1;
}

/***/

int blockInter(int block_num, int coded)
{
	event_t event;
	unsigned int * zigzag = mp4_tables->zig_zag_scan; // zigzag scan dir
	int i;
	
	clearblock(ld->block); // clearblock

	// inverse quant type
	if (mp4_state->hdr.quant_type == 0) 
	{
		int q_scale = mp4_state->hdr.quantizer;
		int q_2scale = q_scale << 1;
		int q_add = (q_scale & 1) ? q_scale : (q_scale - 1);
			
		i = 0;
		do // event vld
		{
			event = vld_inter_dct();

			/***
			if (event.run == -1)
			{
			printf("Error: invalid vld code\n");
			exit(201);
			}
			***/			
			i+= event.run;
			if (event.level > 0) {
				ld->block[zigzag[i]] = (q_2scale * event.level) + q_add;
			}
			else {
				ld->block[zigzag[i]] = (q_2scale * event.level) - q_add;
			}
			
			// _Print("Vld Event: Run Level Last %d %d %d\n", event.run, event.level, event.last);
			
			i++;
		} while (! event.last);
	}
	else 
	{
		int k, m = 0;
		i = 0;

		// event vld
		do 
		{
			event = vld_inter_dct();

			i+= event.run;
	
			k = (event.level > 0) ? 1 : -1;

			assert(ld->block[zigzag[i]] < 2047);
			assert(ld->block[zigzag[i]] > -2048);

			ld->block[zigzag[i]] = ((2 * event.level + k) * mp4_state->hdr.quantizer * 
				mp4_tables->nonintra_quant_matrix[zigzag[i]]) >> 4;

			assert(ld->block[zigzag[i]] < 2047);
			assert(ld->block[zigzag[i]] > -2048);

			m ^= ld->block[zigzag[i]];
			
			// _Print("Vld Event: Run Level Last %d %d %d\n", event.run, event.level, event.last);
			
			i++;
		} while (! event.last);

		if (!(m%2)) ld->block[63] ^= 1;
	}

	// inverse dct
	idct(ld->block);
		
	return 1;
}

/***/

static int getDCsizeLum()
{
	int code;

	// [Ag][note] bad code

	if (showbits(11) == 1) {
		flushbits(11);
		return 12;
	}
  if (showbits(10) == 1) {
    flushbits(10);
    return 11;
  }
  if (showbits(9) == 1) {
    flushbits(9);
    return 10;
	}
	if (showbits(8) == 1) {
		flushbits(8);
		return 9;
	}
	if (showbits(7) == 1) {
		flushbits(7);
		return 8;
	}
	if (showbits(6) == 1) {
		flushbits(6);
		return 7;
	}  
	if (showbits(5) == 1) {
		flushbits(5);
		return 6;
	}
	if (showbits(4) == 1) {
		flushbits(4);
		return 5;
	}

	code = showbits(3);

	if (code == 1) {
		flushbits(3);
		return 4;
	} else if (code == 2) {
		flushbits(3);
		return 3;
	} else if (code == 3) {
		flushbits(3);
		return 0;
	}

  code = showbits(2);

  if (code == 2) {
		flushbits(2);
		return 2;
	} else if (code == 3) {
		flushbits(2);
		return 1;
	}     

	return 0;
}

static int getDCsizeChr()
{
	// [Ag][note] bad code

	if (showbits(12) == 1) {
		flushbits(12);
		return 12;
	}
	if (showbits(11) == 1) {
		flushbits(11);
		return 11;
	}
	if (showbits(10) == 1) {
		flushbits(10);
		return 10;
	}
	if (showbits(9) == 1) {
		flushbits(9);
		return 9;
	}
	if (showbits(8) == 1) {
		flushbits(8);
		return 8;
	}
	if (showbits(7) == 1) {
		flushbits(7);
		return 7;
	}
	if (showbits(6) == 1) {
		flushbits(6);
		return 6;
	}
	if (showbits(5) == 1) {
		flushbits(5);
		return 5;
	}
	if (showbits(4) == 1) {
		flushbits(4);
		return 4;
	} 
	if (showbits(3) == 1) {
		flushbits(3);
		return 3;
	} 

	return (3 - getbits(2));
}

/***/

static int getDCdiff(int dct_dc_size)
{
	int code = getbits(dct_dc_size);
	int msb = code >> (dct_dc_size - 1);

	if (msb == 0) {
		return (-1 * (code^((int) pow(2.0,(double) dct_dc_size) - 1)));
	}
  else { 
		return code;
	}
}

/***/

static void setDCscaler(int block_num) 
{
	int type = (block_num < 4) ? 0 : 1;
	int quant = mp4_state->hdr.quantizer;

	if (type == 0) {
		if (quant > 0 && quant < 5) 
			mp4_state->hdr.dc_scaler = 8;
		else if (quant > 4 && quant < 9) 
			mp4_state->hdr.dc_scaler = (2 * quant);
		else if (quant > 8 && quant < 25) 
			mp4_state->hdr.dc_scaler = (quant + 8);
		else 
			mp4_state->hdr.dc_scaler = (2 * quant - 16);
	}
  else {
		if (quant > 0 && quant < 5) 
			mp4_state->hdr.dc_scaler = 8;
		else if (quant > 4 && quant < 25) 
			mp4_state->hdr.dc_scaler = ((quant + 13) / 2);
		else 
			mp4_state->hdr.dc_scaler = (quant - 6);
	}
}

/***/

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91影视在线播放| 国产亚洲精品bt天堂精选| 色香蕉成人二区免费| 国产 日韩 欧美大片| 国产精品性做久久久久久| 国产又黄又大久久| 国产综合久久久久久鬼色| 韩国精品久久久| 国产成人在线网站| 国产精品一线二线三线| 国产成人在线看| 成人免费av资源| 99久久综合精品| 91蝌蚪porny成人天涯| 在线免费亚洲电影| 欧美日韩亚洲综合一区二区三区| 欧美日韩高清不卡| 欧美一区二区三区爱爱| 精品国产乱码久久久久久1区2区| 欧美不卡一区二区三区四区| 精品国产伦一区二区三区免费| 精品国产髙清在线看国产毛片| 久久综合久久99| 欧美国产在线观看| 自拍偷拍欧美激情| 午夜精品福利久久久| 免费成人性网站| 国产精品中文字幕日韩精品| caoporen国产精品视频| 欧洲中文字幕精品| 日韩一区二区三区四区| 337p粉嫩大胆色噜噜噜噜亚洲| 国产性色一区二区| 亚洲欧洲成人自拍| 亚洲第一综合色| 久久国产麻豆精品| 99久久99久久精品免费观看| 欧美视频一区二区三区四区| 欧美mv和日韩mv国产网站| 中文在线资源观看网站视频免费不卡 | 亚洲午夜视频在线| 麻豆精品一二三| av在线综合网| 欧美日韩成人一区二区| 久久综合精品国产一区二区三区| 综合激情网...| 免费观看30秒视频久久| 99精品欧美一区二区三区小说| 欧美色偷偷大香| 久久久www免费人成精品| 一区二区三区四区亚洲| 国产又黄又大久久| 欧美日韩一区三区| 国产精品―色哟哟| 免费在线观看一区二区三区| 成人sese在线| 精品国产网站在线观看| 亚洲精品国产第一综合99久久 | 一区二区三区在线视频观看| 紧缚捆绑精品一区二区| 色美美综合视频| 久久综合九色综合欧美就去吻| 亚洲一区二区在线视频| 国产很黄免费观看久久| 欧美日韩黄色影视| 国产精品久久久久久久久免费桃花| 日本成人中文字幕在线视频 | 国产精品天美传媒| 日韩精品成人一区二区在线| 成人18视频在线播放| 日韩三级在线观看| 亚洲国产精品一区二区久久恐怖片 | 中文字幕中文在线不卡住| 蜜桃视频在线一区| 欧美日韩中文国产| 亚洲欧美欧美一区二区三区| 国产一区二区伦理片| 欧美精品自拍偷拍| 夜夜嗨av一区二区三区中文字幕| 成人高清免费观看| 精品国产乱码久久久久久1区2区| 同产精品九九九| 91精彩视频在线观看| 国产精品久久久久久久久免费桃花| 国产一区二区伦理片| 日韩免费观看高清完整版在线观看| 亚洲国产你懂的| 色欧美乱欧美15图片| 中文字幕一区二区三区在线播放| 国产精品99久| 久久精品一区二区三区四区| 精品影视av免费| 日韩情涩欧美日韩视频| 日韩电影在线免费看| 在线播放/欧美激情| 亚洲成a人v欧美综合天堂下载| 91久久国产综合久久| 亚洲综合男人的天堂| 在线观看视频一区二区| 一区二区三区欧美视频| 日本伦理一区二区| 一区二区三区四区在线| 在线亚洲精品福利网址导航| 亚洲一区二区三区四区在线| 一本色道久久综合精品竹菊| 亚洲免费毛片网站| 91久久国产最好的精华液| 一区二区三区在线免费| 欧美性猛片aaaaaaa做受| 亚洲自拍欧美精品| 欧美日韩aaaaa| 男人的天堂亚洲一区| 欧美va在线播放| 国产一区二区在线观看免费| 久久久久久久久久看片| 福利电影一区二区三区| 中文字幕一区二区视频| 欧亚一区二区三区| 五月婷婷色综合| 日韩欧美第一区| 国产电影精品久久禁18| 国产精品久久久久久户外露出| 91在线视频官网| 午夜精品爽啪视频| 日韩精品一区二区在线| 国产成人精品三级| 日韩美女视频19| 欧美卡1卡2卡| 国产乱理伦片在线观看夜一区| 国产精品美女一区二区三区| 日本伦理一区二区| 轻轻草成人在线| 中文字幕va一区二区三区| 欧美成人vr18sexvr| 不卡在线观看av| 亚洲成人1区2区| 久久亚洲精品小早川怜子| 99久久免费视频.com| 三级亚洲高清视频| 久久网这里都是精品| 91国偷自产一区二区三区成为亚洲经典 | 一区二区三区欧美视频| 日韩三级视频在线看| av电影天堂一区二区在线观看| 亚洲一区二区三区中文字幕| 欧美精品一区二| 日本高清不卡视频| 国内精品写真在线观看| 亚洲视频一二三区| 日韩欧美成人激情| caoporn国产一区二区| 日韩av电影天堂| 国产精品黄色在线观看| 欧美精品九九99久久| 成人免费的视频| 蜜芽一区二区三区| 中文字幕亚洲精品在线观看| 日韩欧美精品在线视频| 91视视频在线观看入口直接观看www | 在线视频你懂得一区二区三区| 国产做a爰片久久毛片| 亚洲国产成人高清精品| 国产午夜精品久久久久久免费视| 欧美日精品一区视频| 成人avav在线| 久久aⅴ国产欧美74aaa| 一区二区三区91| 国产精品久久久久毛片软件| 在线综合+亚洲+欧美中文字幕| www.亚洲激情.com| 久久成人免费网| 亚洲妇熟xx妇色黄| 国产精品成人免费| 久久久亚洲午夜电影| 欧美一区二区视频观看视频| 91福利社在线观看| 成人av网站在线| 韩国av一区二区三区在线观看| 亚洲成人一区二区在线观看| 亚洲日本韩国一区| 亚洲国产精品精华液ab| 欧美成人vr18sexvr| 91精品国产91热久久久做人人 | 欧美日韩激情一区二区三区| 色综合久久久久综合体| 国产成人高清在线| 韩国av一区二区| 精品一区二区三区欧美| 日韩在线观看一区二区| 亚洲午夜在线观看视频在线| 亚洲欧美日韩国产成人精品影院| 国产精品乱码一区二区三区软件| 宅男噜噜噜66一区二区66| 欧美日韩国产bt| 精品视频在线免费看| 欧美四级电影在线观看| 在线观看免费成人| 在线视频国产一区| 欧美性大战久久| 欧美图区在线视频|