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

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

?? ratecontrol.c

?? 用MPEG-4對YUV視頻文件編碼壓縮成divx視頻文件
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include <math.h>
#include "../user_macro.h"
#include "rc_data.h"
#include "ratecontrol.h"  


/*!
 *****************************************************************************
 ========== old quantize=====================================================
 ****************************************************************************
 */

/*!
 ****************************************************************************
 * \brief
 *
 * init ratecontrol param
 *
 ***************************************************************************
*/

void
RateControlInit(RateControl * rate_control,			/*<--> 指向RateControl結構*/
				uint32_t target_rate,				/*<--  目標位率*/
				uint32_t reaction_delay_factor,		/*<--  位率控制反應因子*/
				uint32_t averaging_period,			/*<--  平均反應因子*/
				uint32_t buffer,					/*<--  緩沖區*/
				int framerate,						/*<--  幀率*/
				int max_quant,						/*<--  最大量化值*/
				int min_quant						/*<--  最小量化值*/
				)
{
	int i=0;
	rate_control->frames = 0;
	rate_control->total_size = 0;
	rate_control->framerate = framerate / 1000.0;
	rate_control->target_rate = target_rate;
	rate_control->rtn_quant = get_initial_quant(0);
	rate_control->max_quant = max_quant;
	rate_control->min_quant = min_quant;
	for (i = 0; i < 32; ++i) {
		rate_control->quant_error[i] = 0.0;
	}
	rate_control->target_framesize =
		(double) target_rate / 8.0 / rate_control->framerate;
	rate_control->sequence_quality = 2.0 / (double) rate_control->rtn_quant;
	rate_control->avg_framesize = rate_control->target_framesize;
	rate_control->reaction_delay_factor = reaction_delay_factor;
	rate_control->averaging_period = averaging_period;
	rate_control->buffer = buffer;
}

/*!
 ****************************************************************************
 * \brief
 *
 * Returned value : - the current 'rate_control' quantizer value
 *
 ***************************************************************************
*/

int												/*==> 返回量化值*/
RateControlGetQ(RateControl * rate_control,		/*<--指向RateControl結構 */
				int keyframe					/*<--是否關鍵幀,no use now */
				)
{
	return rate_control->rtn_quant;
}

/*!
 **************************************************************************
 * \brief
 *
 * This function is called once a coded frame to update all internal
 * parameters of 'rate_control'.
 *
 * Returned value : None
 *
 ***************************************************************************
*/

void
RateControlUpdate(RateControl * rate_control,	/*<--> 指向RateControl結構*/
				  uint32_t quant,				/*<--  量化值*/
				  int frame_size,				/*<--  幀大小*/
				  int keyframe					/*<--  是否關鍵幀*/
				  )
{
	int64_t deviation;
	double overflow, averaging_period, reaction_delay_factor;
	double quality_scale, base_quality, target_quality;
	int32_t rtn_quant;

	rate_control->frames++;
	rate_control->total_size += frame_size;

	deviation =
		( int64_t ) ( (double) rate_control->total_size -
				   ((double)
					((double) rate_control->target_rate / 8.0 /
					 (double) rate_control->framerate) *
					(double) rate_control->frames));
/*分配位數與實際位數的差別*/
	DEBUGCBR((int32_t) (rate_control->frames - 1), rate_control->rtn_quant,
			 (int32_t) deviation);

	if (rate_control->rtn_quant >= 2) 
	{
		averaging_period = (double) rate_control->averaging_period;

		rate_control->sequence_quality -=
			rate_control->sequence_quality / averaging_period;

		rate_control->sequence_quality +=
			2.0 / (double) rate_control->rtn_quant / averaging_period;

		if (rate_control->sequence_quality < 0.1)
			rate_control->sequence_quality = 0.1;

		if ( !keyframe ) 
		{
			reaction_delay_factor =
				(double) rate_control->reaction_delay_factor;

			rate_control->avg_framesize -=
				rate_control->avg_framesize / reaction_delay_factor;

			rate_control->avg_framesize += frame_size / reaction_delay_factor;
		}
/*調整I,P幀,avg_framesize增大,則quality_scale減小,
		base_quality減小,最后的量化值增大*/
	}

	quality_scale =
		rate_control->target_framesize / rate_control->avg_framesize *
		rate_control->target_framesize / rate_control->avg_framesize;
/*衡量質量*/
	base_quality = rate_control->sequence_quality;
	if (quality_scale >= 1.0) {
		base_quality = 1.0 - (1.0 - base_quality) / quality_scale;
	} else {
		base_quality = 0.06452 + (base_quality - 0.06452) * quality_scale;
	}

	overflow = -((double) deviation / (double) rate_control->buffer);
/*偏差大小*/
	target_quality =
		base_quality + (base_quality -
						0.06452) * overflow / rate_control->target_framesize;
/*偏差大,質量差*/

	if (target_quality > 2.0)
		target_quality = 2.0;
	else if (target_quality < 0.06452)
		target_quality = 0.06452;

	rtn_quant = (int32_t) (2.0 / target_quality);

	if (rtn_quant < 31) {
		rate_control->quant_error[rtn_quant] +=
			2.0 / target_quality - rtn_quant;
		if (rate_control->quant_error[rtn_quant] >= 1.0) {
			rate_control->quant_error[rtn_quant] -= 1.0;
			rtn_quant++;
		}
	}

	if (rtn_quant > rate_control->rtn_quant + 1)
		rtn_quant = rate_control->rtn_quant + 1;
	else if (rtn_quant < rate_control->rtn_quant - 1)
		rtn_quant = rate_control->rtn_quant - 1;

	if (rtn_quant > rate_control->max_quant)
		rtn_quant = rate_control->max_quant;
	else if (rtn_quant < rate_control->min_quant)
		rtn_quant = rate_control->min_quant;

	rate_control->rtn_quant = rtn_quant;
}

/*!
 ****************************************************************************
 * \brief
 * return the first frame quant
 ***************************************************************************
 */

__inline static int						/*==> return init quant */
get_initial_quant(int bpp				/*<-- the param no use now */
				  )
{
	return 8;
}


/*!
 ****************************************************************************
 ======= new quantize,quadratic distortion model,only for I,P=============================
 ======= add by lxq 2002.5.22===============
 ***************************************************************************
 */

/*!
 ****************************************************************************
 *  \brief
 *  init rate control model  param needed   
 *  step 1: Initialization stage
 ***************************************************************************
 */
void RCInitialization(					
					  RCQ2* rc,				/*<--> rc struct */	
					  int bitrate,			/*<--  bits per second*/
					  int framerate,		/*<--  frame number per second*/
					  int sequence_time		/*<--  sequence duration time */
					 
					  )
	{	
		int i=0;
		rch_init(rc->rc_queue);
		rc->Rs=bitrate;
		rc->Ts=sequence_time;
		rc->max_key_interval=framerate*sequence_time;
		rc->Nr=framerate*sequence_time;
		rc->Ns=25/framerate;
		rc->Rf=0;	
		rc->Rr =rc->Ts*rc->Rs;
		rc->Rp = rc->Rs/framerate;
		rc->Bs=rc->Rs*rc->Ts/2;
		rc->B=rc->Bs/2;
		rc->N_Total=0;
		for(i=0;i<2;i++){
			rc->data[i].IsFirst=TRUE;
			rc->data[i].X1=rc->data[i].X2=rc->data[i].X11=0;
			rc->data[i].Rc=0;
			rc->data[i].Ql=rc->data[i].Qc=Get_Initial_Quant(rc,i);
		}
		
	}
/*!
 ****************************************************************************
 * \brief
 *
 * Returned value : - first I or P quantizer value
 *
 ***************************************************************************
 */
	
__inline int Get_Initial_Quant(					/*-->  current frame quant */		
							   RCQ2* rc,		/*<--> rc struct */
							   int frametype	/*<--  I or P frame type */
							   )/*the first param is of no use */ 
{	
	int Q=15;
	switch(frametype)
	{
		case 0:
			Q=15;
			break;
		case 1:
			Q=15;
			break;
	}
	return Q;/*第一個I幀使用的量值*/
}

/*!
 ****************************************************************************
 * \brief
 *
 * get quant before coding each frame
 *
 ***************************************************************************
 */

int RC_GetQ(						/*-->  current frame quant */
			FILE *pfile,			/*<--  file pointer,output stat*/
			RCQ2* rc,				/*<--> rc struct */
			int frametype,			/*<--  I or P frame type */
			int mad					/*<--  frame mad */
			)
/* the third param is of no use */
{

/*	rc->data[frametype].Ec=mad;        */
	if(frametype==0&&rc->Nr<=0)
	{

		rc->Nr=rc->max_key_interval;
		if(rc->Rr>0 )         /*下溢*/
			rc->Rr = rc->Ts*rc->Rs;			/* total number of bits available for this segment */
		else
			rc->Rr+= rc->Ts*rc->Rs;/*只對上溢進行處理*/
  
	}
	if(rc->data[frametype].IsFirst){
		rc->data[frametype].IsFirst=FALSE;
		
		return Get_Initial_Quant(rc,frametype);

	}
	else
	{	
	
		Target_Bit_Calculation(rc,frametype);
		Quantisation_Calculation(pfile,rc,frametype);
	/*	printf("rc->Ec=%d ,rc->T=%d ,rc->Qc=%d ,rc->Nr=%d\n",rc->data[frametype].Ec,rc->T,rc->data[frametype].Qc,rc->Nr);*/
#ifdef stat_output
		fprintf(pfile,"frametype=%d,rc->Ec=%d ,rc->T=%d ,rc->Qc=%d ,rc->Nr=%d\n",frametype,rc->data[frametype].Ec,rc->T,rc->data[frametype].Qc,rc->Nr);
#endif
		return rc->data[frametype].Qc;
	}


}

/*!
 ****************************************************************************

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91福利小视频| 亚洲精品videosex极品| 久久综合色鬼综合色| 欧美主播一区二区三区| 3atv在线一区二区三区| 精品日本一线二线三线不卡| 国产日韩欧美a| 亚洲综合自拍偷拍| 国产精品一色哟哟哟| 色欧美片视频在线观看| 色综合天天综合网天天狠天天| 欧美无乱码久久久免费午夜一区 | 亚洲www啪成人一区二区麻豆| 婷婷成人综合网| 国产精品99久久久久久久女警| 在线中文字幕一区二区| 久久综合狠狠综合| 亚洲成av人片在线| 北条麻妃一区二区三区| 欧美日本视频在线| 亚洲摸摸操操av| 成人中文字幕合集| 日韩欧美中文字幕公布| 夜夜嗨av一区二区三区网页| 国产伦精品一区二区三区免费迷 | 丁香六月综合激情| 欧美一级二级在线观看| 亚洲国产精品激情在线观看| 亚洲最新视频在线播放| 大陆成人av片| 日韩欧美一级二级三级久久久| 一区二区三区蜜桃| www.亚洲激情.com| 精品久久久久久久久久久久久久久 | 精品伊人久久久久7777人| 欧美在线一二三四区| 亚洲国产成人一区二区三区| 久久99国产精品尤物| 在线中文字幕一区| 亚洲欧美一区二区三区国产精品| 国产精品小仙女| 精品国产乱码久久久久久免费| 五月天欧美精品| 欧美一级理论片| 奇米精品一区二区三区四区 | 99久久精品费精品国产一区二区| 精品久久久久久亚洲综合网| 午夜精品久久久久影视| 99riav久久精品riav| 国产精品久久久久影院亚瑟| 国产精品亚洲第一区在线暖暖韩国| 欧美一区二区三区婷婷月色| 日本不卡1234视频| 国产精品欧美精品| 国产成人av自拍| 亚洲免费成人av| 日韩一区二区精品葵司在线| 国产高清无密码一区二区三区| 国产精品久久久久久久裸模| 欧美在线免费视屏| 国内精品国产三级国产a久久| 国产精品久久久久久久久果冻传媒 | 波多野结衣在线一区| 樱桃国产成人精品视频| 欧美一区二区啪啪| 国产**成人网毛片九色 | 岛国av在线一区| 一区二区三区日韩欧美精品| 日韩天堂在线观看| 丁香一区二区三区| 亚洲一区在线观看网站| 欧美精品一区二区久久婷婷| 北条麻妃国产九九精品视频| 香蕉成人伊视频在线观看| 久久综合一区二区| 在线亚洲高清视频| 国产91精品在线观看| 天天色综合成人网| 中文字幕精品三区| 日韩欧美亚洲国产另类| 一本大道久久a久久综合 | 亚洲图片欧美一区| 国产目拍亚洲精品99久久精品| 欧美性大战久久久久久久| 久久av资源站| 亚洲精品国产第一综合99久久| 精品国产人成亚洲区| 欧美亚洲国产一区二区三区| 国产91精品在线观看| 美女一区二区视频| 亚洲一区二区三区视频在线播放| 久久久噜噜噜久噜久久综合| 欧美日产国产精品| 91亚洲精华国产精华精华液| 国产最新精品免费| 日韩av在线发布| 亚洲一线二线三线视频| 国产精品久久久久7777按摩| 日韩精品一区二区三区在线 | 成人免费视频视频在线观看免费| 日本午夜一区二区| 天堂在线一区二区| 亚洲综合色噜噜狠狠| 国产精品对白交换视频| www亚洲一区| 欧美tickling网站挠脚心| 欧美三级电影在线看| 色菇凉天天综合网| 99久精品国产| 91麻豆国产福利在线观看| 不卡av在线免费观看| 成人app在线| 国产成人欧美日韩在线电影| 国产成人在线网站| 国产盗摄女厕一区二区三区| 日本精品免费观看高清观看| 不卡在线视频中文字幕| 粉嫩aⅴ一区二区三区四区五区 | 99精品视频一区二区三区| 高清av一区二区| 成人国产精品免费网站| 成人国产一区二区三区精品| 99久久99久久精品免费观看| av在线不卡免费看| 色激情天天射综合网| 欧美午夜精品一区二区三区| 欧美日韩另类一区| 日韩片之四级片| 精品国产一区二区三区忘忧草| 欧美精品一区二区在线观看| 久久久夜色精品亚洲| 国产欧美日产一区| 中文字幕中文乱码欧美一区二区| 国产精品久久久久9999吃药| 亚洲乱码一区二区三区在线观看| 一区二区三区四区在线| 日韩高清电影一区| 国内精品伊人久久久久影院对白| 国产成人福利片| 色综合久久久久久久久久久| 欧美日韩国产一级二级| 欧美精品一区男女天堂| 国产精品人成在线观看免费| 一区二区三区中文在线| 蜜桃免费网站一区二区三区| 国产精品一区在线观看乱码| 91丝袜国产在线播放| 欧美日韩中字一区| 精品国产一区久久| 亚洲精品欧美专区| 麻豆国产精品视频| 懂色中文一区二区在线播放| 欧美日韩一区二区三区免费看 | 欧美日韩视频一区二区| 精品久久一二三区| 一区二区三区在线视频观看| 麻豆精品一区二区av白丝在线| 国产91丝袜在线播放| 欧美日韩精品系列| 国产欧美日韩激情| 日韩精彩视频在线观看| 91在线云播放| 精品国精品自拍自在线| 亚洲综合图片区| 国产成人aaa| 日韩欧美久久久| 亚洲一区二区三区四区在线观看 | 亚洲狠狠丁香婷婷综合久久久| 麻豆精品一区二区av白丝在线| 色婷婷综合五月| 久久精品欧美日韩精品| 亚洲成av人片观看| 99精品久久只有精品| 欧美一级二级三级蜜桃| 亚洲综合色噜噜狠狠| 成人99免费视频| 久久久国际精品| 久草这里只有精品视频| 欧美日韩1区2区| 亚洲免费视频中文字幕| 成人深夜在线观看| 日韩欧美一区二区久久婷婷| 婷婷综合另类小说色区| 日本韩国欧美三级| 成人免费小视频| www.欧美色图| 国产精品国产自产拍高清av王其| 精品亚洲免费视频| 日韩欧美激情四射| 青青国产91久久久久久 | 色综合天天综合网天天狠天天| 国产丝袜欧美中文另类| 久久成人久久爱| 精品蜜桃在线看| 黄色日韩网站视频| 久久亚洲免费视频| 黄一区二区三区| 久久精品夜色噜噜亚洲aⅴ| 国产一区二区在线影院| 久久婷婷国产综合精品青草|