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

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

?? mp4_block.c

?? < VC++視頻音頻開發(fā)>> 這本書的源碼
?? C
字號(hào):


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

/***/

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产乱码久久久久久浪潮| 欧美午夜免费电影| 久久精品人人做| 国产精品一区二区三区四区| 久久久综合精品| www.在线成人| 亚洲人成网站影音先锋播放| 欧美性猛片aaaaaaa做受| 性久久久久久久久久久久 | 国产成人小视频| 欧美激情一区二区三区在线| www.欧美.com| 亚洲最大成人综合| 日韩欧美123| 丁香网亚洲国际| 一区二区三区在线观看网站| 日韩欧美一区中文| 国产成人一区二区精品非洲| 亚洲欧美一区二区三区极速播放| 在线播放日韩导航| 国产在线视频一区二区| 18欧美亚洲精品| 欧美精品一级二级三级| 国产精品99久久久久久有的能看| 成人欧美一区二区三区在线播放| 欧美日韩精品系列| 国产成人夜色高潮福利影视| 一区二区三区蜜桃| 精品黑人一区二区三区久久| 91丨porny丨国产| 蜜桃久久久久久| 国产精品每日更新在线播放网址| 精品视频一区二区不卡| 国产精品1区2区3区| 一区二区三区中文在线观看| 欧美mv日韩mv国产网站app| 99久久婷婷国产综合精品电影| 日韩黄色免费电影| 中文字幕中文字幕一区| 日韩欧美在线网站| 在线日韩国产精品| 国产麻豆精品theporn| 一二三区精品福利视频| 久久久不卡网国产精品二区 | 精品亚洲aⅴ乱码一区二区三区| 国产精品初高中害羞小美女文| 日韩欧美中文字幕制服| 欧美综合在线视频| 成人app下载| 精品系列免费在线观看| 午夜国产精品影院在线观看| 亚洲天堂福利av| 国产日韩一级二级三级| 日韩精品资源二区在线| 欧美午夜视频网站| 99久久久精品免费观看国产蜜| 激情综合一区二区三区| 奇米精品一区二区三区在线观看一 | 91麻豆6部合集magnet| 国产精品一区二区在线看| 五月天久久比比资源色| 亚洲人123区| 国产精品国模大尺度视频| 久久久蜜桃精品| 精品国产一区二区三区久久影院| 欧美日韩免费视频| 在线视频一区二区三区| 91麻豆国产福利精品| 成人免费毛片嘿嘿连载视频| 国产综合色视频| 久久99国产精品久久| 美女看a上一区| 蜜臀av性久久久久蜜臀av麻豆| 日韩经典一区二区| 天天av天天翘天天综合网色鬼国产| 亚洲另类一区二区| 亚洲桃色在线一区| 亚洲美女视频一区| 一区二区三区在线视频观看| 一区二区免费在线| 亚洲午夜精品网| 亚洲bt欧美bt精品777| 亚洲午夜精品17c| 天天av天天翘天天综合网| 午夜精品爽啪视频| 日本成人中文字幕| 麻豆成人综合网| 国产精品一区久久久久| 成人精品一区二区三区四区| 成人高清视频在线观看| 91蝌蚪porny九色| 在线亚洲人成电影网站色www| 欧美三级资源在线| 日韩一二在线观看| 久久色在线视频| 国产精品欧美一区喷水| 一区二区三区四区不卡视频| 亚洲国产精品视频| 老司机一区二区| 成人免费毛片a| 在线一区二区观看| 日韩视频免费观看高清在线视频| 337p粉嫩大胆色噜噜噜噜亚洲| 久久久久久免费网| 1000精品久久久久久久久| 亚洲一区二区三区视频在线 | 国产日韩欧美亚洲| 日韩伦理av电影| 日韩黄色一级片| 国产成人亚洲综合色影视| 色婷婷激情综合| 91精品国产色综合久久不卡蜜臀 | 欧美另类高清zo欧美| 日韩欧美高清一区| 国产精品乱码一区二区三区软件| 一区二区三区日韩| 免费成人在线网站| 99久久婷婷国产综合精品电影| 欧美日韩精品高清| 中文无字幕一区二区三区| 亚洲宅男天堂在线观看无病毒| 蓝色福利精品导航| 一本在线高清不卡dvd| 欧美大度的电影原声| 亚洲丝袜制服诱惑| 精品一区二区三区日韩| 91久久精品日日躁夜夜躁欧美| 欧美成人精品3d动漫h| 日韩一区中文字幕| 国产真实乱子伦精品视频| 91麻豆福利精品推荐| 久久久亚洲精品石原莉奈| 亚洲成a人片在线不卡一二三区| 韩国成人福利片在线播放| 欧美色爱综合网| 中文字幕一区二区三区av| 蜜桃av一区二区在线观看| 日本精品一区二区三区高清 | 日韩欧美不卡在线观看视频| 一区二区三区色| 丁香五精品蜜臀久久久久99网站 | 91福利视频网站| 国产精品美女久久久久久| 激情综合网激情| 91精品国产一区二区三区香蕉| 亚洲精品乱码久久久久久黑人| 国产一区二区三区精品欧美日韩一区二区三区| 日本丶国产丶欧美色综合| 久久久久久久久久久久久久久99| 日韩国产一二三区| 欧美系列日韩一区| 最新成人av在线| 成人激情黄色小说| 国产人成亚洲第一网站在线播放| 久久97超碰色| 国产三级精品视频| 国产精品18久久久久久久网站| 日韩女优毛片在线| 麻豆国产一区二区| 日韩免费一区二区三区在线播放| 手机精品视频在线观看| 欧美久久一二区| 亚洲va天堂va国产va久| 欧美日韩一级二级三级| 亚洲高清视频中文字幕| 在线视频国内一区二区| 亚洲一区在线播放| 欧美日韩精品福利| 热久久免费视频| 欧美成人官网二区| 久久爱www久久做| 久久综合色婷婷| 国产在线精品免费av| 久久久影院官网| 国产成人av在线影院| 欧美激情艳妇裸体舞| 国产91在线看| 中文字幕中文字幕一区| 色综合色综合色综合色综合色综合| 亚洲欧美激情视频在线观看一区二区三区| 99亚偷拍自图区亚洲| 亚洲美女视频一区| 欧美日韩电影在线| 免费成人av在线| 久久久久九九视频| 成人av网站免费观看| 亚洲免费观看高清在线观看| 欧美色综合影院| 精品亚洲国产成人av制服丝袜| 久久久久青草大香线综合精品| 岛国精品在线播放| 亚洲欧美日韩精品久久久久| 欧美天天综合网| 久久国产精品色婷婷| 国产精品国产三级国产普通话蜜臀 | 精久久久久久久久久久| 中文字幕乱码久久午夜不卡 | 日韩美女主播在线视频一区二区三区| 国产在线播精品第三| 亚洲欧美激情一区二区|