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

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

?? mp4_block.c

?? 本程序介紹MPEG-4解碼技術
?? 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();

/***/


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); 

	if (intraFlag)
	{
		setDCscaler(block_num); 

		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(); 
		}
		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(); 
		}

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

	}
	if (intraFlag)
	{

		dc_recon(block_num, &ld->block[0]);
	}

	if (coded) 
	{
		unsigned int * zigzag;

		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(intraFlag);
			
			i+= event.run;
			ld->block[zigzag[i]] = (short) event.level;

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

	if (intraFlag)
	{
		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)
	{
		
		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 
	
	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); 

	setDCscaler(block_num); 

	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(); 
	}
	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(); 
	}

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

	dc_recon(block_num, &ld->block[0]);

	if (coded) 
	{
		unsigned int * zigzag; 

		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_intra_dct();
			
			i+= event.run;
			ld->block[zigzag[i]] = (short) event.level;

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

	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);
	}

	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); 

	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_inter_dct();

		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;
			}
			
			
			i++;
		} while (! event.last);
	}
	else 
	{
		int k, m = 0;
		i = 0;

		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]];
			
			
			i++;
		} while (! event.last);

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

	idct(ld->block);
		
	return 1;
}



static int getDCsizeLum()
{
	int 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()
{

	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);
	}
}

/***/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
另类专区欧美蜜桃臀第一页| 色猫猫国产区一区二在线视频| 日韩在线a电影| 亚洲一区在线视频| 亚洲精品欧美在线| 中文字幕字幕中文在线中不卡视频| 国产精品水嫩水嫩| 最新热久久免费视频| 天天综合网天天综合色| 亚洲综合色噜噜狠狠| 亚洲一区欧美一区| 亚洲第一在线综合网站| 亚洲444eee在线观看| 香蕉久久夜色精品国产使用方法| 亚洲成a人v欧美综合天堂| 亚洲高清免费观看高清完整版在线观看| 一区二区高清视频在线观看| 亚洲五码中文字幕| 亚瑟在线精品视频| 日韩va欧美va亚洲va久久| 美女视频网站久久| 国产一区二区三区精品视频 | 色就色 综合激情| 91亚洲男人天堂| 91国偷自产一区二区开放时间| 91天堂素人约啪| 日本丰满少妇一区二区三区| 欧日韩精品视频| 日韩一级欧美一级| 国产日韩影视精品| 亚洲三级久久久| 日韩中文字幕不卡| 国产一区二区精品久久99| 国产很黄免费观看久久| 色综合久久综合网欧美综合网 | 精品播放一区二区| 国产欧美日韩综合精品一区二区| 成人免费一区二区三区视频| 亚洲成人综合在线| 国产一区二区不卡| 色婷婷国产精品综合在线观看| 欧美日韩黄视频| 国产午夜精品理论片a级大结局| 国产精品超碰97尤物18| 亚洲国产精品一区二区尤物区| 蜜臀久久久99精品久久久久久| 国产.精品.日韩.另类.中文.在线.播放| 91网站在线观看视频| 日韩一区二区在线观看视频播放| 中文av一区二区| 午夜精品久久久久久久久| 亚洲自拍偷拍网站| 亚洲欧洲精品一区二区精品久久久 | 日韩三级.com| 亚洲日本va在线观看| 日av在线不卡| 成人国产免费视频| 在线播放91灌醉迷j高跟美女| 久久精品人人做人人综合 | 亚州成人在线电影| 不卡一区在线观看| 日韩欧美一区二区久久婷婷| 亚洲精品视频一区| 国产精品1区2区3区| 欧美日韩综合色| 国产精品久久久久天堂| 蜜臀av性久久久久蜜臀aⅴ | 国产欧美日韩另类视频免费观看| 一区二区免费视频| 国产不卡免费视频| 在线播放中文一区| 亚洲欧美另类久久久精品| 韩国av一区二区三区在线观看| 欧美综合一区二区| 一区精品在线播放| 国产一区美女在线| 在线成人av网站| 洋洋成人永久网站入口| 成人激情开心网| 精品av久久707| 美洲天堂一区二卡三卡四卡视频| 色婷婷精品久久二区二区蜜臀av| 国产欧美综合在线观看第十页| 日韩电影网1区2区| 欧美视频在线一区| 一区二区三区不卡视频在线观看| 99久久精品一区| 日本一二三四高清不卡| 精品在线播放免费| 日韩一区国产二区欧美三区| 偷拍与自拍一区| 欧亚一区二区三区| 亚洲一区二区三区四区五区黄 | 日韩欧美一级在线播放| 五月天一区二区三区| 在线观看av不卡| 亚洲精品国产第一综合99久久| 99精品视频在线观看| 欧美国产一区在线| 成人性色生活片| 国产农村妇女精品| 大胆亚洲人体视频| 中文字幕av资源一区| 国产69精品久久777的优势| 日本一区二区视频在线观看| 国产成人精品综合在线观看 | 亚洲国产成人高清精品| 欧美在线视频你懂得| 一区二区三区四区视频精品免费 | 久久精品理论片| 日韩免费在线观看| 麻豆91精品视频| 日韩欧美色电影| 九九精品一区二区| 久久久久久久久久久电影| 国产做a爰片久久毛片| 久久夜色精品一区| 国产成人亚洲综合a∨婷婷图片| 国产片一区二区三区| gogo大胆日本视频一区| 亚洲欧美日韩国产综合| 欧美丝袜丝交足nylons| 蜜臀99久久精品久久久久久软件| 日韩欧美在线影院| 国产一区视频在线看| 国产精品国产三级国产aⅴ原创| 97超碰欧美中文字幕| 一区二区三区在线观看动漫| 91超碰这里只有精品国产| 久久激五月天综合精品| 国产日韩精品一区二区浪潮av| 成人动漫一区二区| 一级特黄大欧美久久久| 日韩精品一区二区三区视频播放| 粉嫩一区二区三区在线看| 亚洲视频每日更新| 91精品福利在线一区二区三区 | 国产在线不卡一卡二卡三卡四卡| 久久精品亚洲精品国产欧美kt∨| 波多野结衣亚洲| 亚洲香蕉伊在人在线观| 欧美成人免费网站| av网站免费线看精品| 午夜视频在线观看一区| 国产人妖乱国产精品人妖| 91蜜桃网址入口| 美女性感视频久久| 中文字幕在线不卡| 制服.丝袜.亚洲.中文.综合| 国产精品综合一区二区三区| 亚洲精品视频在线观看网站| 精品国产精品一区二区夜夜嗨| 99精品久久久久久| 蜜桃av一区二区在线观看| 亚洲欧美中日韩| 欧美一区二区成人6969| 97se亚洲国产综合自在线不卡| 日韩制服丝袜av| 亚洲欧美一区二区在线观看| 欧美一区二区福利视频| 色综合天天综合色综合av| 久久精品国产亚洲一区二区三区| 尤物在线观看一区| 久久先锋影音av鲁色资源网| 欧美在线|欧美| 国产成人av一区| 日本视频一区二区| 亚洲精品日韩一| 久久久久亚洲综合| 3d动漫精品啪啪1区2区免费 | 久久久电影一区二区三区| 欧美日韩国产一二三| 93久久精品日日躁夜夜躁欧美| 老司机免费视频一区二区三区| 亚洲乱码中文字幕| 国产精品嫩草99a| 欧美精品一区二区三区蜜桃| 欧美日韩精品一区二区三区| 99久久精品国产一区二区三区| 久久99精品久久久久久国产越南 | 青青草原综合久久大伊人精品| 亚洲三级免费电影| 中文字幕av一区二区三区高| 欧美r级电影在线观看| 欧美精品成人一区二区三区四区| 色综合激情五月| 成a人片亚洲日本久久| 国产一区二区不卡老阿姨| 精品中文av资源站在线观看| 日本色综合中文字幕| 性欧美疯狂xxxxbbbb| 伊人一区二区三区| 日韩一区在线播放| 中文字幕av一区 二区| 欧美激情一区在线| 国产午夜精品久久| 久久精品一区八戒影视| 久久久99精品免费观看| 久久综合中文字幕| 久久欧美一区二区|