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

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

?? vop_code.c

?? < VC++視頻音頻開發>> 這本書的源碼
?? C
字號:
#include "vop_code.h"
#include "mot_est_comp.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);
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)))
	{
		
		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 {
		
		
		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;
}												  
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)	  
		BitstreamPutBits(buffer,GetVopIntraQuantizer(vop),GetVopQuantPrecision(vop));
	else   
		BitstreamPutBits(buffer,GetVopQuantizer(vop),GetVopQuantPrecision(vop));
	if (GetVopPredictionType(vop)!=I_VOP)
	{
		BitstreamPutBits(buffer,GetVopFCodeFor(vop),3);
	}
	return(num_bits_header);
}
Void ImageRepetitivePadding(Image *image, Int edge)
{
	SInt *p, left, right;
	Int width, height, x, y;
	p = image->f;
	width = image->x;
	height = image->y;
	
	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;
		}
    }
	
    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;
}
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:
			
			
			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; 
				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一区二区三区免费野_久草精品视频
欧美午夜理伦三级在线观看| 久久综合网色—综合色88| 日韩欧美一区二区视频| 国产精品第四页| 捆绑变态av一区二区三区| 成人精品一区二区三区四区| 91麻豆精品久久久久蜜臀| 综合av第一页| 国产99久久久国产精品免费看| 欧美日韩一二三区| 夜夜嗨av一区二区三区中文字幕| 国产精品一区免费在线观看| 欧美一区二区三区公司| 亚洲第一二三四区| 91免费观看视频| 日本一二三四高清不卡| 精品一区二区三区av| 日韩视频一区在线观看| 亚洲不卡av一区二区三区| jlzzjlzz国产精品久久| 日本一区二区三区高清不卡| 久久精品国产精品亚洲综合| 欧美一级爆毛片| 久久精品国产精品亚洲精品| 91精品国产综合久久国产大片| 一区二区三区中文字幕电影| 在线一区二区三区四区| 亚洲一区二区三区自拍| 色婷婷综合久久久中文一区二区| 国产精品福利一区| 99视频一区二区| 亚洲欧美电影院| 在线观看网站黄不卡| 亚洲午夜久久久久久久久电影院| 欧美图区在线视频| 婷婷久久综合九色国产成人| 666欧美在线视频| 久久99精品国产91久久来源| 久久久久久久久伊人| 成人污污视频在线观看| 国产精品高潮久久久久无| 99久久国产综合精品色伊| 一区二区三区毛片| 欧美美女黄视频| 精品一区在线看| 中文字幕巨乱亚洲| 色久综合一二码| 一区二区三区四区视频精品免费| 欧美在线免费观看亚洲| 亚洲国产aⅴ天堂久久| 日韩精品一区二区三区四区| 国产91在线观看丝袜| 中文字幕一区二区三区在线不卡| 在线看国产一区| 久久国产夜色精品鲁鲁99| 久久久九九九九| 欧美亚洲国产一卡| 精品写真视频在线观看| 中文字幕佐山爱一区二区免费| 欧美中文字幕一二三区视频| 久久91精品国产91久久小草| 亚洲婷婷综合久久一本伊一区| 欧美日韩精品专区| 国产精品538一区二区在线| 亚洲中国最大av网站| 欧美成人猛片aaaaaaa| 97久久人人超碰| 精一区二区三区| 一区二区在线看| 精品日韩欧美在线| 在线免费观看日本一区| 国精产品一区一区三区mba桃花| 亚洲视频一二三区| 精品国免费一区二区三区| 91在线视频观看| 激情文学综合插| 午夜久久久久久电影| 国产欧美一二三区| 在线不卡中文字幕| 99精品视频一区| 国产麻豆精品在线| 五月婷婷色综合| 日韩伦理电影网| 国产亚洲精品久| 日韩欧美中文字幕精品| 欧美午夜影院一区| 成人亚洲精品久久久久软件| 美女视频黄久久| 亚洲大片在线观看| 亚洲乱码日产精品bd| 亚洲国产高清在线观看视频| 日韩欧美中文字幕精品| 欧美另类一区二区三区| 欧美在线不卡视频| 成人av动漫在线| 国产精品一区二区无线| 精品亚洲aⅴ乱码一区二区三区| 亚洲v中文字幕| 亚洲国产美女搞黄色| 亚洲免费大片在线观看| 国产精品久久久久aaaa| 国产网红主播福利一区二区| 亚洲精品一区二区三区精华液| 欧美日韩日日摸| 欧美日韩一区视频| 在线精品视频一区二区三四| 色偷偷88欧美精品久久久| 日本高清免费不卡视频| 91视视频在线观看入口直接观看www | 久久久www成人免费毛片麻豆| 91精品国产综合久久福利软件| 欧美日韩一区三区四区| 欧美日韩中文字幕一区| 欧美三区免费完整视频在线观看| 91猫先生在线| 欧美日韩中文另类| 欧美日韩一区二区三区不卡| 欧美在线观看视频在线| 欧美亚洲国产bt| 91精品欧美一区二区三区综合在| 69久久夜色精品国产69蝌蚪网| 欧美高清视频在线高清观看mv色露露十八 | 亚洲久草在线视频| 艳妇臀荡乳欲伦亚洲一区| 玉米视频成人免费看| 午夜精彩视频在线观看不卡| 亚洲成人www| 韩国女主播一区| 成人午夜av在线| 欧美综合天天夜夜久久| 538在线一区二区精品国产| 日韩午夜av电影| 国产精品免费视频一区| 一区二区视频免费在线观看| 日本视频中文字幕一区二区三区| 美女国产一区二区三区| 国产aⅴ综合色| 欧美中文字幕亚洲一区二区va在线| 欧美放荡的少妇| 久久久蜜桃精品| 一区二区三区产品免费精品久久75| 亚洲成人你懂的| 国产91精品在线观看| 91亚洲国产成人精品一区二区三 | 欧美韩国日本不卡| 亚洲永久精品大片| 麻豆精品久久久| 色哦色哦哦色天天综合| 日韩一区二区三区四区五区六区 | av在线一区二区| 6080yy午夜一二三区久久| 中文字幕欧美激情一区| 日日夜夜精品视频免费| 99久久er热在这里只有精品66| 欧美高清你懂得| 亚洲三级在线观看| 国产一区久久久| 欧美日韩三级一区| 中文字幕亚洲一区二区va在线| 午夜精品福利一区二区三区av| 国产福利不卡视频| 日韩一区二区免费高清| 亚洲精品视频免费观看| 国产真实乱偷精品视频免| 色婷婷av久久久久久久| 国产女主播一区| 六月婷婷色综合| 欧美色爱综合网| 中文字幕中文字幕在线一区| 精品亚洲成a人| 4438x亚洲最大成人网| 一区二区激情视频| 成人免费va视频| 久久亚洲二区三区| 日本大胆欧美人术艺术动态| 欧美专区亚洲专区| 亚洲色图视频网| 成人免费高清在线| 国产人久久人人人人爽| 男人的j进女人的j一区| 欧美午夜理伦三级在线观看| 1区2区3区国产精品| 成人国产免费视频| 国产婷婷精品av在线| 免费精品视频在线| 91精品国产综合久久香蕉麻豆| 亚洲老妇xxxxxx| 日本精品一级二级| 亚洲精品免费视频| 91麻豆免费看片| 亚洲欧美日韩国产综合在线| 99精品欧美一区二区蜜桃免费| 欧美激情在线看| 国产98色在线|日韩| 国产欧美综合在线| 国产91在线看| 国产精品萝li| 91在线国产福利| 亚洲女同ⅹxx女同tv| 在线观看一区不卡|