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

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

?? vop_code.c

?? MPEG4編解碼系統代碼
?? C
字號:
//視頻對象平面編碼函數代碼


#include "vop_code.h"
#include "mot_est_comp.h"
//#include "rc_q2.h"
#include "bitstream.h"

#include "rate_ctl.h"

#define SCENE_CHANGE_THREADHOLD 50
#define MB_RATIO_THREADHOLD 0.40

extern FILE *ftrace;

UInt  	BitstreamPutVopHeader (	Vop *vop,
			Float time,
			VolConfig *vol_config
	);
Void ImageRepetitivePadding(Image *image, Int edge);
Double compute_MAD(Vop *vop);


/***********************************************************CommentBegin******
函數功能:
實現視頻對象平面中對象形狀、紋理和運動的編碼。并且,前提假設輸入的視頻對象平面是帶邊界的。
函數輸入:
1)Vop* curr:指向當前待編碼的視頻對象平面的指針;
2)Vop* prev:指向本視頻對象平面之前最后出現的視頻對象平面的指針;
3)Vop* rec_prev:指向本視頻對象平面之前最后已出現并編碼的視頻對象平面的指針;
4)Int enable_8x8_mv:8×8運動向量的標志;
5)Int intra_dcpred_disable:不允許內部DC頻段預測的控制變量;
6)Float time:當前編碼時間;
7)VolConfig* vol_config:視頻對象層的設置信息。
函數輸入/輸出:
1)Vop* rec_curr:以編碼視頻對象平面;
2)Bitcount num_bits:比特統計結構。

 ***********************************************************CommentEnd********/

Void VopCode(Vop *curr, Vop *reference, Vop *reconstruct, Vop *error, Int enable_8x8_mv,
			Float time, VolConfig *vol_config)
{
	ImageF *mot_x=NULL, *mot_y=NULL;
	Image *MB_decisions=NULL;
	Int edge,f_code_for=1;
	Vop *error_vop=NULL;
	Int vop_quantizer;

	Float mad_P = 0., mad_I = 0.;
	Float IntraMBRatio = 1.;
	Int numberMB, i, IntraMB;

	edge = 0;
	f_code_for = curr->fcode_for;

	if (curr->prediction_type == P_VOP) 
	{
		/*進行運動估計和補償*/
		MotionEstimationCompensation(curr, reference,
			enable_8x8_mv, edge ,f_code_for,
			reconstruct, &mad_P, &mot_x,&mot_y,&MB_decisions);

		/*計算處于幀內的宏塊所占的百分比*/
		IntraMB = 0;
		numberMB = MB_decisions->x * MB_decisions->y;
		for (i = 0; i < numberMB; i ++)
			if (MB_decisions->f[i] == MBM_INTRA) IntraMB ++;
		IntraMBRatio = (float)IntraMB / (float)numberMB;

		#ifdef _RC_
		fprintf(ftrace, "ME with MAD : %f\n", mad_P);
		fprintf(ftrace, "%4.2f of the MBs are I-MBs.\n", IntraMBRatio);
		#endif
	}
	else
		mad_P = SCENE_CHANGE_THREADHOLD * 2;

	if ((mad_P < SCENE_CHANGE_THREADHOLD / 3) || 
		((mad_P < SCENE_CHANGE_THREADHOLD) && (IntraMBRatio < MB_RATIO_THREADHOLD)))
	{
		//容忍值未超過,繼續進行P-VOP的編碼
		curr->prediction_type = P_VOP;
		error->prediction_type = P_VOP;

		#ifdef _RC_
		fprintf(ftrace, "Coding mode : INTER\n");
		#endif

		vop_quantizer = RateCtlGetQ(mad_P);

		curr->quantizer = vop_quantizer;
		error->quantizer = vop_quantizer;

		#ifdef _RC_DEBUG_
		fprintf(stdout, "RC: >>>>> New quantizer= %d\n", vop_quantizer);
		#endif

		SubImage(curr->y_chan, reconstruct->y_chan, error->y_chan);
		SubImage(curr->u_chan, reconstruct->u_chan, error->u_chan);
		SubImage(curr->v_chan, reconstruct->v_chan, error->v_chan); 

		BitstreamPutVopHeader(curr,time,vol_config);

		VopShapeMotText(error, reconstruct, MB_decisions,
			mot_x, mot_y, f_code_for, 
			GetVopIntraACDCPredDisable(curr), reference,
			NULL/*運動紋理比特流數據*/);
	} else {
		//容忍值過大 
		//此時的編碼模式應轉為I-VOP模式
		curr->prediction_type = I_VOP;
		curr->rounding_type = 1;

		#ifdef _RC_
		fprintf(ftrace, "Coding mode : INTRA\n");
		#endif

		//上一次的容忍值是假設計算的,現在有必要重新計算容忍值
		//內部編碼,可能實際的差分值不是編碼的大系數
		if (mad_I == 0.) mad_I = (Float) compute_MAD(curr);

		vop_quantizer = RateCtlGetQ(mad_I);

		curr->intra_quantizer = vop_quantizer;
		curr->rounding_type = 1;

		BitstreamPutVopHeader(curr,time,vol_config);

		/*以內部模式進行紋理編碼*/
		VopCodeShapeTextIntraCom(curr,
			reference,
			NULL/*紋理編碼數據*/
		);
	} 


	if (MB_decisions) FreeImage(MB_decisions);
	if (mot_x) FreeImage(mot_x);
	if (mot_y) FreeImage(mot_y);

	ImageRepetitivePadding(reference->y_chan, 16);
	ImageRepetitivePadding(reference->u_chan, 8);
	ImageRepetitivePadding(reference->v_chan, 8);

	Bitstream_NextStartCode();	  

	return;
}
												  /* CodeVop() */


/***********************************************************CommentBegin******
函數功能:
本函數將完成視頻對象平面頭部句法的寫入,它將頭部句法的所有信息寫到數據流磁盤文件中。
函數輸入:
Vop* vop:指向包含有頭部信息的視頻對象平面的指針。
函數返回值:
UInt num_bits:被寫入的比特位的個數。
函數描述:
視頻對象平面的頭部信息(起始編碼,視頻對象平面的ID等等)首先被寫入,寫入的格式是整形的比特流數據結構,然后再輸出到磁盤文件中。

 ***********************************************************CommentEnd********/

Uint BitstreamPutVopHeader(Vop *vop, Float time, VolConfig *vol_config)
{
	Image *buffer = NULL;
	Int bits;
	Int time_modulo;
	Float time_inc;
	Int   index;

	UInt  num_bits_header=0;

	/*將視頻對象平面頭信息中的所有句法寫入在數據結構中*/
	BitstreamPutBits(buffer,VOP_START_CODE,VOP_START_CODE_LENGTH);
	BitstreamPutBits(buffer,GetVopPredictionType(vop),2);

	index = GetVolConfigModTimeBase(vol_config, 1);

	time_modulo = (int)time - index*1000;
	while(time_modulo >= 1000)
	{
		BitstreamPutBits(buffer,1,1);
		time_modulo = time_modulo - 1000;
		index++;
		printf("time modulo : 1\n");
	}
	BitstreamPutBits(buffer,0,1);

	/*保存這種模時間基*/
	PutVolConfigModTimeBase(index,vol_config);

	time_inc = (time - index*1000);

	bits = (int)ceil(log((double)GetVopTimeIncrementResolution(vop))/log(2.0));
	if (bits<1) bits=1;
	time_inc=time_inc*GetVopTimeIncrementResolution(vop)/1000.0f;

	/*標志比特位*/
	BitstreamPutBits(buffer,1,1);

	BitstreamPutBits(buffer,(Int)(time_inc+0.001),bits);

	/*標志比特位*/
	BitstreamPutBits(buffer,1,1);

	if (GetVopWidth(vop)==0)
	{
		printf("Empty VOP at %.2f\n",time);		  
		BitstreamPutBits(buffer,0L,1L);
		num_bits_header += Bitstream_NextStartCode();
		return(num_bits_header);
	}
	else
		BitstreamPutBits(buffer,1L,1L);

	if( GetVopPredictionType(vop) == P_VOP )
		BitstreamPutBits(buffer,GetVopRoundingType(vop),1);

	BitstreamPutBits(buffer,GetVopIntraDCVlcThr(vop),3);

	if (GetVopPredictionType(vop) == I_VOP)	  /* I_VOP */
		BitstreamPutBits(buffer,GetVopIntraQuantizer(vop),GetVopQuantPrecision(vop));
	else   /* P_VOP */
		BitstreamPutBits(buffer,GetVopQuantizer(vop),GetVopQuantPrecision(vop));

	if (GetVopPredictionType(vop)!=I_VOP)
	{
		BitstreamPutBits(buffer,GetVopFCodeFor(vop),3);
	}

	return(num_bits_header);
}


// 完成圖像的重復填充,在填充過程中,保證在邊界設置上Y、U、V分別是16、4、4模式。
Void ImageRepetitivePadding(Image *image, Int edge)
{
	SInt *p, left, right;
	Int width, height, x, y;

	p = image->f;
	width = image->x;
	height = image->y;

	/* Horizontal Padding */
	for( y=edge; y<height-edge; y++)
    {
		left = p[y*width+edge];
		right = p[y*width+width-edge-1];
		for(x=0; x<edge; x++)
		{
			p[y*width+x] = left;
			p[y*width+width-edge+x] = right;
		}
    }

	/* Vertical Padding */
    for(y=0; y<edge; y++)
        for(x=0; x<width; x++)
            p[y*width+x] = p[edge*width+x];
		
	for(y=height-edge; y<height; y++)
		for(x=0; x<width; x++)
			p[y*width+x] = p[(height-1-edge)*width+x];
	
	return;
}


/***********************************************************CommentBegin******
 函數功能:
本函數用于計算視頻對象平面的誤差容忍值。
函數輸入:
Vop* error_vop:存在殘留誤差的視頻對象平面。
函數描述:
本函數僅僅在編碼模式為I-VOP時才進行調用。

 ***********************************************************CommentEnd********/

Double compute_MAD(Vop  *error_vop)
{
	SInt  *curr_in,
		*curr_end;
	Float *curr_fin,
		*curr_fend;
	UInt   sxy_in;
	Double mad=0.0, dc = 0.0;
	Int    cnt=0;

	/*計算容忍值*/
	switch (GetImageType(error_vop->y_chan))
	{
		case SHORT_TYPE:
			/*計算AC頻段的容忍值*/
			/* 首先要計算平均值*/
			curr_in = (SInt*)GetImageData(error_vop->y_chan);
			sxy_in = GetImageSize(error_vop->y_chan);
			curr_end = curr_in + sxy_in;
			cnt = 0;
			while (curr_in != curr_end)
			{
				dc += *curr_in; //abs(*curr_in);
				cnt++;
				curr_in++;
			}
			dc /= cnt;

			curr_in = (SInt*)GetImageData(error_vop->y_chan);
			sxy_in = GetImageSize(error_vop->y_chan);
			curr_end = curr_in + sxy_in;
			cnt = 0;
			while (curr_in != curr_end)
			{
				mad += fabs(*curr_in - dc);
				cnt++;
				curr_in++;
			}
			mad /= cnt;
			break;
		case FLOAT_TYPE:
			curr_fin = (Float*)GetImageData(error_vop->y_chan);
			sxy_in = GetImageSize(error_vop->y_chan);
			curr_fend = curr_fin + sxy_in;
			cnt = 0;
			while (curr_fin != curr_fend)
			{
				mad += fabs(*curr_fin);
				cnt++;
				curr_fin++;
			}
			mad /= cnt;
			break;
		default: break;
	}

#ifdef _RC_
	fprintf(ftrace, "The MAD of the VOP to be coded is %f.\n", mad);
#endif

	return mad;
}



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
ww久久中文字幕| 亚洲国产精品一区二区www| 国产精品美女一区二区| 亚洲狠狠爱一区二区三区| 激情欧美一区二区| 在线精品视频一区二区三四| 欧美成人激情免费网| 亚洲综合久久久| 粉嫩绯色av一区二区在线观看 | 久久久99免费| 午夜精品福利一区二区三区蜜桃| 国产精品996| 欧美一区二区三区成人| 一区二区在线观看视频| 粉嫩嫩av羞羞动漫久久久| 精品国产sm最大网站| 无吗不卡中文字幕| 欧美色图激情小说| 亚洲最新视频在线播放| 99精品久久只有精品| 欧美激情一区二区三区全黄| 韩国女主播成人在线观看| 91麻豆精品久久久久蜜臀| 亚洲一级二级三级在线免费观看| 成人激情校园春色| 国产精品毛片高清在线完整版| 久久国产精品免费| 欧美www视频| 久久成人麻豆午夜电影| 日韩色视频在线观看| 免费一级片91| 日韩一区二区三区高清免费看看| 首页亚洲欧美制服丝腿| 欧美日韩另类国产亚洲欧美一级| 亚洲影院免费观看| 精品视频在线免费观看| 亚洲gay无套男同| 欧美日韩激情一区| 亚洲丰满少妇videoshd| 欧美日韩亚洲综合一区二区三区| 洋洋成人永久网站入口| 欧美日韩国产高清一区二区三区 | 国产成人精品aa毛片| 国产性天天综合网| 成人网页在线观看| 亚洲欧美一区二区久久| 91久久精品国产91性色tv| 亚洲成人资源在线| 日韩精品一区二区三区视频在线观看| 久久99九九99精品| 亚洲国产精华液网站w| 成人网页在线观看| 一区二区三区在线播放| 91精品国产色综合久久不卡电影| 精品在线观看视频| 国产精品国产三级国产专播品爱网 | 欧美巨大另类极品videosbest| 午夜精品一区二区三区免费视频| 欧美一二三在线| 国产精品伊人色| 亚洲激情图片小说视频| 欧美一区二区三区在线电影| 国产美女视频91| 亚洲精品国产成人久久av盗摄| 在线观看91精品国产麻豆| 国产精品77777| 一区二区激情小说| 久久蜜桃香蕉精品一区二区三区| eeuss鲁片一区二区三区在线看| 一区二区三区四区中文字幕| 日韩精品资源二区在线| 99久久伊人久久99| 日韩精品午夜视频| 亚洲日本乱码在线观看| 日韩欧美一级在线播放| av福利精品导航| 蜜桃在线一区二区三区| 亚洲天堂精品在线观看| 日韩欧美久久久| 91丝袜美女网| 国产一区二区三区电影在线观看| 一区二区在线观看免费| 久久日韩粉嫩一区二区三区| 91传媒视频在线播放| 国产精品1024| 免费精品视频在线| 亚洲午夜激情av| 中文在线一区二区 | 亚洲一区二区三区中文字幕| 久久久久久久久久美女| 欧美午夜一区二区三区免费大片| 国产乱人伦偷精品视频不卡| 日韩精品一二区| 一区二区激情小说| 亚洲欧洲在线观看av| 久久久久久久电影| 日韩一区二区在线观看视频 | 亚洲欧洲一区二区在线播放| 精品福利二区三区| 日韩女优av电影| 91精品麻豆日日躁夜夜躁| 日本丰满少妇一区二区三区| 成人黄色软件下载| 成人小视频免费在线观看| 久久99精品久久久久久久久久久久| 午夜一区二区三区视频| 一区二区三区色| 亚洲欧美日韩人成在线播放| 国产精品午夜久久| 欧美激情一区二区| 国产欧美精品一区| 久久久国产精华| 国产日本一区二区| 国产精品久久毛片a| 国产欧美精品一区二区色综合 | 91精品国产综合久久精品麻豆| 在线精品国精品国产尤物884a| 色哟哟日韩精品| 在线免费观看视频一区| 欧美色图一区二区三区| 欧美日韩在线三级| 欧美精选午夜久久久乱码6080| 欧美美女一区二区在线观看| 欧美三级电影一区| 欧美精选午夜久久久乱码6080| 在线不卡免费欧美| 日韩色在线观看| 久久久久久夜精品精品免费| 久久综合资源网| 国产精品水嫩水嫩| 一区二区在线观看免费| 午夜欧美视频在线观看| 免费xxxx性欧美18vr| 国产精品66部| 91网上在线视频| 56国语精品自产拍在线观看| 欧美大度的电影原声| 久久精品视频免费观看| 国产精品亲子伦对白| 一区二区三区成人在线视频| 性久久久久久久久久久久| 久久99精品久久久久久国产越南 | 国产三级精品视频| 亚洲三级电影网站| 五月综合激情网| 激情综合一区二区三区| 99r精品视频| 日韩欧美在线一区二区三区| 国产日产欧美一区| 午夜精品久久久久久久| 国产精品综合二区| 欧美自拍丝袜亚洲| 亚洲精品一区二区三区四区高清| 国产精品久久久久久亚洲毛片| 亚洲一区在线看| 美女诱惑一区二区| 色呦呦国产精品| 久久综合五月天婷婷伊人| 亚洲精品成人天堂一二三| 激情综合网av| 色乱码一区二区三区88| 精品电影一区二区| 亚洲va欧美va人人爽午夜| 粉嫩欧美一区二区三区高清影视| 欧美日韩精品一区视频| 国产精品久久久久影院亚瑟| 秋霞国产午夜精品免费视频| 色综合天天综合网天天狠天天| 欧美一级欧美三级| 一级日本不卡的影视| 丁香亚洲综合激情啪啪综合| 538prom精品视频线放| 亚洲欧美乱综合| 成人小视频在线| 久久综合久久99| 麻豆国产一区二区| 在线亚洲人成电影网站色www| 久久久久久久电影| 久久99国产精品久久| 欧美人与z0zoxxxx视频| 亚洲女同ⅹxx女同tv| 国产成人av电影在线| 精品国产乱码久久久久久影片| 天堂成人国产精品一区| 色屁屁一区二区| 综合网在线视频| 高清国产午夜精品久久久久久| 精品国产乱码久久久久久闺蜜| 亚洲国产成人tv| 在线观看中文字幕不卡| 国产精品乱人伦中文| 成人精品视频.| 欧美激情资源网| 国产91高潮流白浆在线麻豆| 欧美zozozo| 国产精品一二三区在线| 精品精品欲导航| 韩国精品主播一区二区在线观看| 日韩视频免费观看高清在线视频| 奇米综合一区二区三区精品视频|