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

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

?? vop_code.c

?? 用VC++實現的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一区二区三区免费野_久草精品视频
国产精品影视在线观看| 91丝袜高跟美女视频| 成人毛片老司机大片| 欧美性猛片xxxx免费看久爱| 精品国产一区二区三区久久影院| 18成人在线视频| 日韩在线观看一区二区| 国内外成人在线| 欧洲国内综合视频| 国产日产欧美精品一区二区三区| 欧美精品在线视频| 国产精品久久久久久久裸模| 蜜臀a∨国产成人精品| 在线观看视频欧美| 国产亚洲一区二区三区| 日韩国产精品久久久| 色乱码一区二区三区88| 久久综合九色综合97婷婷女人 | 美腿丝袜亚洲一区| 91视频免费看| 中文字幕精品—区二区四季| 精品在线一区二区| 91精品婷婷国产综合久久| 一区二区三区在线观看视频 | 久久国产精品99久久人人澡| 色综合久久99| 国产午夜精品久久久久久免费视 | 亚洲精品成a人| 国产成a人亚洲精| 亚洲精品一区二区三区在线观看| 精品久久人人做人人爱| 蜜桃av一区二区| 9191成人精品久久| 日产欧产美韩系列久久99| 色综合天天综合网天天狠天天| 欧亚一区二区三区| 亚洲激情自拍视频| 91极品美女在线| 亚洲精品高清在线观看| 在线精品视频小说1| 亚洲综合一区二区三区| 日本高清视频一区二区| 亚洲女人小视频在线观看| jvid福利写真一区二区三区| 中文字幕日韩欧美一区二区三区| 五月激情综合网| 欧美日韩国产高清一区| 免费在线观看一区| 日韩你懂的电影在线观看| 青草国产精品久久久久久| 欧美mv日韩mv亚洲| 国产成人午夜视频| 国产精品理论在线观看| 在线亚洲高清视频| 日本三级亚洲精品| 精品国产乱码91久久久久久网站| 中文字幕日韩av资源站| 欧美羞羞免费网站| 天堂va蜜桃一区二区三区漫画版 | 日韩天堂在线观看| 精品系列免费在线观看| 2020国产精品久久精品美国| 国产乱码精品一区二区三区av| 在线视频亚洲一区| 日韩成人dvd| 欧美精品一区男女天堂| 国产成人免费网站| 亚洲夂夂婷婷色拍ww47| 欧美一区二区三区不卡| 粉嫩av亚洲一区二区图片| 亚洲男人的天堂在线观看| 91精品国产综合久久精品性色| 日韩毛片一二三区| 欧美一区二区视频在线观看2022| 亚洲欧洲日产国产综合网| 国产日韩精品视频一区| 欧美在线色视频| 国产精品一区专区| 亚洲最色的网站| 久久久精品综合| 欧美午夜一区二区三区免费大片| 国产精品污网站| 欧美日韩大陆一区二区| 成人午夜视频在线| 日韩av中文在线观看| 国产精品成人免费精品自在线观看| 久久av资源站| 一区二区三区四区精品在线视频| 麻豆久久久久久| 国产精品久久久久久久久免费樱桃 | 亚洲香肠在线观看| 欧美一区二区三区在线观看| 波多野结衣在线aⅴ中文字幕不卡| 欧美一区二区三区人| av在线免费不卡| 久久综合综合久久综合| 亚洲综合色区另类av| 国产三级三级三级精品8ⅰ区| 亚洲一区日韩精品中文字幕| 久久久精品2019中文字幕之3| 美国十次了思思久久精品导航| 欧美一激情一区二区三区| 99久久99久久综合| 国产一区二区精品久久99| 天天影视涩香欲综合网| 亚洲影视资源网| 国产精品剧情在线亚洲| 久久综合九色综合97_久久久| 国产盗摄精品一区二区三区在线| 国产日本一区二区| 26uuu精品一区二区三区四区在线| 麻豆精品精品国产自在97香蕉| 日韩亚洲欧美综合| 欧美日韩成人一区| 欧美日韩三级一区二区| 色婷婷国产精品久久包臀| 成人精品免费视频| 成人动漫av在线| 国产不卡免费视频| 国产一区二区三区香蕉| 久色婷婷小香蕉久久| 韩国一区二区三区| 国产一区二区三区不卡在线观看 | 欧美一级淫片007| 欧美日本高清视频在线观看| 欧美日韩专区在线| 欧美人与z0zoxxxx视频| 欧美色精品在线视频| 欧美日韩精品一区二区三区| 在线观看日韩一区| 欧美日韩在线不卡| 在线播放中文一区| 日韩亚洲欧美中文三级| 欧美mv日韩mv国产网站| 国产视频在线观看一区二区三区| 99久久久免费精品国产一区二区| 亚洲一区二区精品3399| 一区二区成人在线| 一区二区久久久| 天堂影院一区二区| 久久精品国产网站| 日韩欧美国产麻豆| 国产视频一区在线观看| 亚洲色图欧美在线| 手机精品视频在线观看| 久久国内精品视频| 成人国产视频在线观看| 91福利视频久久久久| 91精品国产综合久久小美女| 久久视频一区二区| 一区二区三区四区国产精品| 奇米影视一区二区三区| 国产99久久久国产精品免费看| 日韩电影免费一区| 精品无码三级在线观看视频| eeuss鲁片一区二区三区在线看| 美女网站一区二区| 懂色中文一区二区在线播放| 9人人澡人人爽人人精品| 欧美日韩激情一区二区| 久久久国产综合精品女国产盗摄| 日韩三级中文字幕| 1区2区3区国产精品| 亚洲v中文字幕| 粉嫩aⅴ一区二区三区四区五区 | 亚洲视频一区二区免费在线观看| 亚洲精品一区二区精华| 一区二区三区欧美日韩| 蜜臀av亚洲一区中文字幕| 99精品欧美一区二区三区小说| 国产一区二区三区不卡在线观看 | 日本韩国一区二区| 久久精品一区二区三区av| 亚洲人成小说网站色在线| 久久国产精品色婷婷| 欧美色视频在线| 亚洲婷婷国产精品电影人久久| 国产精品不卡一区二区三区| 蜜桃av一区二区在线观看| 在线日韩一区二区| 国产精品免费免费| 日本一区中文字幕| 在线影院国内精品| 欧美国产1区2区| 美女网站色91| 欧美日韩成人综合在线一区二区| 制服.丝袜.亚洲.中文.综合| 亚洲欧美日韩中文字幕一区二区三区 | 国产一区二区91| 91精品国产91久久综合桃花| 亚洲视频在线一区观看| 国产成人欧美日韩在线电影| 久久久久久久久岛国免费| 喷水一区二区三区| 欧美日韩色一区| 午夜一区二区三区视频| 色婷婷av一区二区三区之一色屋| 精品视频在线看| 一区在线观看视频| 成人av资源站|