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

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

?? encore.c

?? < VC++視頻音頻開發>> 這本書的源碼
?? C
字號:
#include "encore.h"
#include "vop_code.h"
#include "text_dct.h"
#include "bitstream.h"
#include "vm_common_defs.h"
#include "rate_ctl.h"
typedef struct _REFERENCE
{
	unsigned long handle;
	float framerate;
	long bitrate;
	long rc_period;
	long rc_reaction_period;
	long rc_reaction_ratio;
	long max_key_interval;
	int x_dim, y_dim;
	int prev_rounding;
	int search_range;
	int max_quantizer;
	int min_quantizer;
	long seq;
	long curr_run;       
	Vop *current;        
	Vop *reference;      
	Vop *reconstruct;    
	Vop *error;          
	struct _REFERENCE *pnext;
} REFERENCE;
FILE *ftrace = NULL;
int max_quantizer, min_quantizer;
void init_vol_config(VolConfig *vol_config);
void init_vop(Vop *vop);
Int get_fcode (Int sr);
int PutVoVolHeader(int vol_width, int vol_height, int time_increment_resolution, float frame_rate);
int YUV2YUV (int x_dim, int y_dim, void *yuv, void *y_out, void *u_out, void *v_out);
int encore(unsigned long handle, unsigned long enc_opt, void *param1, void *param2)
{
	static REFERENCE *ref = NULL;
	static VolConfig *vol_config;
	
	REFERENCE *ref_curr, *ref_last = NULL;
	int x_dim, y_dim, size, length;
	int headerbits = 0;
	Vop *curr;
	ref_curr = ref_last = ref;
	while (ref_curr != NULL)
	{
		if (ref_curr->handle == handle) break;
		ref_last = ref_curr;
		ref_curr = ref_last->pnext;
	}
	
	if (ref_curr == NULL)
	{
		if (enc_opt & ENC_OPT_RELEASE) return ENC_OK;
		ref_curr = (REFERENCE *)malloc(sizeof(REFERENCE));
		ref_curr->handle = handle;
		ref_curr->seq = 0;
		ref_curr->curr_run = 0;
		ref_curr->pnext = NULL;
		if (ref) ref_last->pnext = ref_curr;
		else ref = ref_curr;
	}
	
	if (enc_opt & ENC_OPT_INIT)
	{
#ifdef _RC_
		ftrace = fopen("trace.txt", "w");
		fflush(ftrace);
#endif
		init_fdct_enc();
		init_idct_enc();
		
		ref_curr->framerate = ((ENC_PARAM *)param1)->framerate;
		ref_curr->bitrate = ((ENC_PARAM *)param1)->bitrate;
		ref_curr->rc_period = ((ENC_PARAM *)param1)->rc_period;
		ref_curr->rc_reaction_period = ((ENC_PARAM *)param1)->rc_reaction_period;
		ref_curr->rc_reaction_ratio = ((ENC_PARAM *)param1)->rc_reaction_ratio;
		ref_curr->x_dim = ((ENC_PARAM *)param1)->x_dim;
		ref_curr->y_dim = ((ENC_PARAM *)param1)->y_dim;
		ref_curr->max_key_interval = ((ENC_PARAM *)param1)->max_key_interval;
		ref_curr->search_range = ((ENC_PARAM *)param1)->search_range;
		ref_curr->max_quantizer = ((ENC_PARAM *)param1)->max_quantizer;
		ref_curr->min_quantizer = ((ENC_PARAM *)param1)->min_quantizer;
		ref_curr->current = AllocVop(ref_curr->x_dim, ref_curr->y_dim);
		ref_curr->reference = AllocVop(ref_curr->x_dim + 2 * 16, 
			ref_curr->y_dim + 2 * 16);
		ref_curr->reconstruct = AllocVop(ref_curr->x_dim, ref_curr->y_dim);
		ref_curr->error = AllocVop(ref_curr->x_dim, ref_curr->y_dim);
		init_vop(ref_curr->current);
		init_vop(ref_curr->reference);
		init_vop(ref_curr->reconstruct);
		init_vop(ref_curr->error);
		ref_curr->reference->hor_spat_ref = -16;
		ref_curr->reference->ver_spat_ref = -16;
		SetConstantImage(ref_curr->reference->y_chan, 0);
		vol_config = (VolConfig *)malloc(sizeof(VolConfig));
		init_vol_config(vol_config);
		vol_config->frame_rate = ref_curr->framerate;
		vol_config->bit_rate = ref_curr->bitrate;
		RateCtlInit(8 , vol_config->bit_rate / vol_config->frame_rate,
			ref_curr->rc_period, ref_curr->rc_reaction_period, ref_curr->rc_reaction_ratio);
		return ENC_OK;
	}
	
	if (enc_opt & ENC_OPT_RELEASE)
	{
		if (ref_curr == ref) ref = NULL;
		else ref_last->pnext = ref_curr->pnext;
		if (ref_curr->current) FreeVop(ref_curr->current);
		if (ref_curr->reference) FreeVop(ref_curr->reference);
		if (ref_curr->reconstruct) FreeVop(ref_curr->reconstruct);
		if (ref_curr->error) FreeVop(ref_curr->error);
		free(ref_curr);
		free(vol_config);
		if (ftrace) {
			fclose(ftrace);
			ftrace = NULL;
		};
		return ENC_OK;
	}
	
	max_quantizer = ref_curr->max_quantizer;
	min_quantizer = ref_curr->min_quantizer;
	x_dim = ref_curr->x_dim;
	y_dim = ref_curr->y_dim;
	size = x_dim * y_dim;
	curr = ref_curr->current;
	curr->width = x_dim;
	curr->height = y_dim;
	curr->sr_for = ref_curr->search_range;
	curr->fcode_for = get_fcode(curr->sr_for);
	
	
	YUV2YUV(x_dim, y_dim, ((ENC_FRAME *)param1)->image,
		curr->y_chan->f, curr->u_chan->f, curr->v_chan->f);
	
	curr->rounding_type = 1 - ref_curr->prev_rounding;
	Bitstream_Init((void *)(((ENC_FRAME *)param1)->bitstream));
	if (ref_curr->seq == 0) {
		headerbits = PutVoVolHeader(x_dim, y_dim, curr->time_increment_resolution, ref_curr->framerate);
	}
	
#ifdef _RC_
	fflush(ftrace);
	fprintf(ftrace, "\nCoding frame #%d\n", ref_curr->seq);
#endif
	if (ref_curr->curr_run % ref_curr->max_key_interval == 0) {
		curr->prediction_type = I_VOP;
#ifdef _RC_
	fprintf(ftrace, "This frame is forced to be coded in INTRA.\n");
	fprintf(ftrace, "It has been %d frame since the last INTRA.\n", ref_curr->curr_run);
#endif
	}
	else curr->prediction_type = P_VOP;
	
	VopCode(curr,
		ref_curr->reference,
		ref_curr->reconstruct,
		ref_curr->error,
		1, 
		(float)ref_curr->seq/ref_curr->framerate,  
		vol_config);
	length = Bitstream_Close();
	((ENC_FRAME *)param1)->length = length;
	
	RateCtlUpdate(length * 8);
	ref_curr->prev_rounding = curr->rounding_type;
	ref_curr->seq ++;
	ref_curr->curr_run ++;
	if (curr->prediction_type == I_VOP) {
		((ENC_RESULT *)param2)->isKeyFrame = 1;
		ref_curr->curr_run = 1;
	} else 
		((ENC_RESULT *)param2)->isKeyFrame = 0;
	return ENC_OK;
}
void init_vol_config(VolConfig *vol_config)
{
	
	vol_config->M = 1;
	vol_config->frame_skip = 1;
	vol_config->quantizer = 8;
	vol_config->intra_quantizer = 8;
	vol_config->modulo_time_base[0] =0;
	vol_config->modulo_time_base[1] =0;
	vol_config->frame_rate = 30;
	vol_config->bit_rate = 800000;
}
void init_vop(Vop *vop)
{
	
	vop->quant_precision = 5;
	vop->bits_per_pixel = 8;
	vop->time_increment_resolution = 30000;
	vop->intra_acdc_pred_disable = 0;
	vop->intra_dc_vlc_thr = 0;
	vop->sr_for = 512;
	vop->fcode_for = get_fcode(512);
	vop->y_chan->type = SHORT_TYPE;
	vop->u_chan->type = SHORT_TYPE;
	vop->v_chan->type = SHORT_TYPE;
	vop->hor_spat_ref = 0;
	vop->ver_spat_ref = 0;
}
Int get_fcode (Int sr)
{
	if (sr<=16) return 1;
	else if (sr<=32) return 2;
	else if (sr<=64) return 3;
	else if (sr<=128) return 4;
	else if (sr<=256) return 5;
	else if (sr<=512) return 6;
	else if (sr<=1024) return 7;
	else return (-1);
}
int PutVoVolHeader(int vol_width, int vol_height, int time_increment_resolution, float frame_rate)
{
	int written = 0;
	int bits, fixed_vop_time_increment;
	Bitstream_PutBits(VO_START_CODE_LENGTH, VO_START_CODE);
	Bitstream_PutBits(5, 0);				
	written += VO_START_CODE_LENGTH + 5;
	Bitstream_PutBits(VOL_START_CODE_LENGTH, VOL_START_CODE);
	Bitstream_PutBits(4, 0);				
	written += VOL_START_CODE_LENGTH + 4;
	Bitstream_PutBits(1, 0);				
	Bitstream_PutBits(8, 1);				
	Bitstream_PutBits(1, 1);				
	Bitstream_PutBits(4, 2);				
	Bitstream_PutBits(3, 1);				
	written += 1 + 8 + 1 + 4 + 3;
	Bitstream_PutBits(4, 1);				
	Bitstream_PutBits(1, 0);				
	Bitstream_PutBits(2, 0);				
	Bitstream_PutBits(1, 1);				
	written += 4 + 1 + 2 + 1;
	Bitstream_PutBits(16, time_increment_resolution);
	Bitstream_PutBits(1, 1);				
	Bitstream_PutBits(1, 1);				
	bits = (int)ceil(log((double)time_increment_resolution)/log(2.0));
    if (bits<1) bits=1;
	fixed_vop_time_increment = (int)(time_increment_resolution / frame_rate + 0.1);
	Bitstream_PutBits(bits, fixed_vop_time_increment);
	Bitstream_PutBits(1, 1);				
	written += 16 + 1 + 1 + bits + 1;
	Bitstream_PutBits(13, vol_width);
	Bitstream_PutBits(1, 1);				
	Bitstream_PutBits(13, vol_height);
	Bitstream_PutBits(1, 1);				
	written += 13 + 1 + 13 + 1;
	Bitstream_PutBits(1, 0);				
	Bitstream_PutBits(1, 1);				
	Bitstream_PutBits(2, 0);				
	Bitstream_PutBits(1, 0);				
	written += 1 + 1 + 2 + 1;
	Bitstream_PutBits(1, 0);				
	Bitstream_PutBits(1, 0);				
	Bitstream_PutBits(1, 1);				
	Bitstream_PutBits(1, 1);				
	Bitstream_PutBits(1, 0);				
	Bitstream_PutBits(1, 0);				
	written += 1 + 1 + 1 + 1 + 1 + 1;
	written += Bitstream_NextStartCode();
	return(written);
}
int YUV2YUV (int x_dim, int y_dim, void *yuv, void *y_out, void *u_out, void *v_out)
{
	
	
	unsigned char *in;
	short int *out;
	long size;
	in = yuv;
	
	out = y_out;
	size = x_dim * y_dim;
	while (size --) *(out ++) = *(in ++);
	out = u_out;
	size = x_dim * y_dim / 4;
	while (size --) *(out ++) = *(in ++);
	out = v_out;
	size = x_dim * y_dim / 4;
	while (size --) *(out ++) = *(in ++);
	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一卡二卡三卡四卡无卡久久| 丝袜国产日韩另类美女| 亚洲欧美日韩国产成人精品影院| 亚洲一区二区三区在线| 国产老妇另类xxxxx| 欧美优质美女网站| 中国色在线观看另类| 日日骚欧美日韩| 99久久国产免费看| 精品久久久三级丝袜| 亚洲一区二区中文在线| 成人黄色a**站在线观看| 欧美一区二区播放| 一区二区三区免费观看| 成人av电影免费在线播放| 日韩无一区二区| 香蕉成人伊视频在线观看| 不卡视频一二三四| 欧美精品一区二区三区四区| 亚洲一区二区三区不卡国产欧美| 成人精品小蝌蚪| 26uuu国产在线精品一区二区| 婷婷亚洲久悠悠色悠在线播放| 91丝袜国产在线播放| 国产日韩精品视频一区| 美女网站视频久久| 欧美精品乱码久久久久久| 亚洲午夜免费电影| 欧美综合天天夜夜久久| 亚洲美女淫视频| 一本色道久久综合亚洲91| 1000部国产精品成人观看| 成人精品一区二区三区四区 | 99国产精品久久| 国产精品免费观看视频| 国产精品白丝jk黑袜喷水| 国产情人综合久久777777| 粉嫩欧美一区二区三区高清影视| 久久午夜国产精品| 国产成人啪免费观看软件| 久久精品一区二区三区不卡| 国产精品一色哟哟哟| 久久精品在线观看| 成人一区在线看| 国产精品久久久久影院| 99re6这里只有精品视频在线观看| 国产精品国产三级国产专播品爱网| 丁香五精品蜜臀久久久久99网站 | 亚洲欧美精品午睡沙发| 色女孩综合影院| 亚洲国产视频直播| 欧美精品视频www在线观看| 欧美a级理论片| 久久欧美一区二区| 波波电影院一区二区三区| 一区二区三区中文字幕精品精品| 欧美天天综合网| 免费一级欧美片在线观看| www欧美成人18+| 成人一二三区视频| 亚洲综合区在线| 日韩女优毛片在线| 成人av综合在线| 亚洲一区二区三区四区在线免费观看 | 麻豆91小视频| 国产无遮挡一区二区三区毛片日本| 99久久久国产精品| 五月婷婷激情综合网| 久久久久久久久久久电影| av电影在线观看一区| 青椒成人免费视频| 国产精品护士白丝一区av| 欧美日本乱大交xxxxx| 精品无码三级在线观看视频| 17c精品麻豆一区二区免费| 91精品综合久久久久久| 成人午夜又粗又硬又大| 天天操天天色综合| 国产清纯白嫩初高生在线观看91 | 亚洲制服丝袜一区| 精品福利二区三区| 色综合色综合色综合色综合色综合| 日日骚欧美日韩| 亚洲同性gay激情无套| 欧美电影免费观看高清完整版在| 成人网男人的天堂| 麻豆视频观看网址久久| 亚洲欧美日韩在线不卡| 久久久亚洲综合| 欧美在线不卡一区| av中文字幕在线不卡| 美女视频网站黄色亚洲| 亚洲精品乱码久久久久久日本蜜臀| 精品国产一区二区三区久久久蜜月| 91在线精品一区二区| 国产在线一区二区| 秋霞电影一区二区| 亚洲va欧美va天堂v国产综合| 欧美国产日韩在线观看| 精品国免费一区二区三区| 欧美日韩精品免费观看视频| 91蜜桃免费观看视频| 粉嫩在线一区二区三区视频| 久草这里只有精品视频| 亚洲v中文字幕| 亚洲在线免费播放| 亚洲女性喷水在线观看一区| 亚洲欧洲在线观看av| 国产精品欧美一区二区三区| 久久久久久久电影| 欧美成人三级电影在线| 91精品国产综合久久久久久久久久| 色欧美88888久久久久久影院| 99久久久无码国产精品| 盗摄精品av一区二区三区| 国产在线精品一区二区不卡了 | 亚洲欧美视频在线观看视频| 国产精品电影一区二区| 国产精品理论片在线观看| 国产亚洲欧美日韩在线一区| 精品国产sm最大网站| 欧美精品一区二区不卡| 久久久久久久一区| 国产亚洲综合av| 国产精品情趣视频| 中文字幕在线不卡一区二区三区| 中文字幕 久热精品 视频在线| 中文一区二区完整视频在线观看| 国产视频一区在线播放| 国产精品理伦片| 亚洲激情av在线| 亚洲成va人在线观看| 麻豆成人在线观看| 国产一区免费电影| 99久久99久久免费精品蜜臀| 99久久99久久精品免费看蜜桃| 色婷婷综合中文久久一本| 欧美三级韩国三级日本一级| 欧美一级高清片| 国产午夜精品理论片a级大结局| 国产精品传媒在线| 亚洲一区二区美女| 麻豆91在线观看| a亚洲天堂av| 欧美一区二区三区电影| xfplay精品久久| 亚洲日韩欧美一区二区在线| 视频在线观看国产精品| 国产一区在线不卡| 色婷婷综合中文久久一本| 欧美一区二区精品| 国产欧美va欧美不卡在线| 亚洲美女偷拍久久| 精品一区中文字幕| 一本色道久久综合狠狠躁的推荐 | 日韩制服丝袜av| 国产精品一区二区免费不卡 | 一级中文字幕一区二区| 日本午夜精品视频在线观看| 成人一区二区三区视频| 在线不卡免费欧美| 国产精品成人午夜| 蜜桃在线一区二区三区| 91蜜桃在线观看| 精品伦理精品一区| 樱花草国产18久久久久| 精品一区二区三区免费视频| 色婷婷综合在线| 国产日韩欧美不卡| 天天影视色香欲综合网老头| 99精品国产视频| 久久精品人人做人人综合 | 国产精品毛片久久久久久| 欧美a级一区二区| 在线视频一区二区三| 国产人久久人人人人爽| 久久99久久精品欧美| 欧美亚洲一区二区三区四区| 国产精品免费视频网站| 国产一区不卡视频| 91精品国产一区二区三区蜜臀| 国产精品家庭影院| 国产剧情一区在线| 日韩视频免费观看高清完整版| 亚洲日本中文字幕区| 成人精品视频一区| 久久人人爽爽爽人久久久| 热久久久久久久| 欧美老年两性高潮| 亚洲综合在线免费观看| 99久久国产综合精品色伊| 国产亚洲精品aa午夜观看| 久久国内精品视频| 日韩一级黄色大片| 亚洲成人激情av| 精品1区2区3区| 亚洲小说欧美激情另类| 在线观看免费视频综合| 日韩美女视频一区二区| 成人h动漫精品一区二区|