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

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

?? encoder.c

?? 用MPEG-4對YUV視頻文件編碼壓縮成divx視頻文件
?? C
?? 第 1 頁 / 共 2 頁
字號:

#ifdef _DEBUG_PSNR
	float psnr;
#endif

	/* 	decide by Overflow. Add by fyh */
	if(pEnc->rc_type)
		IsOverFlow=IsSkipFrame(&pEnc->rc);/*判斷是否需要跳幀 */
	else
		IsOverFlow=FALSE;
    
	/* skip frame flag is used by outputing reconstructed frame. */
	pFrame->flag_skipframe=IsOverFlow;

	if(!IsOverFlow)/*判斷是否需要跳幀*/
	{
		start_global_timer();

		/* swap current frame structure and reference frame structure */
		SWAP(pEnc->current, pEnc->reference);

		pEnc->current->global_flags = pFrame->general;
		pEnc->current->motion_flags = pFrame->motion;

		/* copy source YUV buffer to YUV buffer of edged extending. Add by fyh */
		start_timer();
		/*
		if (image_input
			(&pEnc->current->image, pEnc->mbParam.width, pEnc->mbParam.height,
			 pEnc->mbParam.edged_width, pFrame->image, pFrame->colorspace) < 0)
			return XVID_ERR_FORMAT;
*/
            image_input(&pEnc->current->image, pEnc->mbParam.width, pEnc->mbParam.height,
			 pEnc->mbParam.edged_width, pFrame->image);
			
		stop_conv_timer();

		/* copy source YUV data from pEnc->current->image to pEnc->sOriginal,
		   in order to calculate psnr value */
	#ifdef _DEBUG_PSNR
		image_copy(&pEnc->sOriginal, &pEnc->current->image,
				   pEnc->mbParam.edged_width, pEnc->mbParam.height);
	#endif

		/* bits streams initialize */
		BitstreamInit(&bs, pFrame->bitstream, 0);

		/* decide frame encoding type(I,P). Add by fyh */ 
		    if ((pEnc->iFrameNum == 0)
				|| ((pEnc->iMaxKeyInterval > 0)
					&& (pEnc->iFrameNum >= pEnc->iMaxKeyInterval))) 
			{
				frametype=0;
			} 
			else 
			{
				frametype=1;
			}

		/* get frame level quantization step */
		if(pEnc->rc_type)
			pEnc->current->quant=RC_GetQ(pEncLogFile,&pEnc->rc,frametype,0);
		else
			pEnc->current->quant = RateControlGetQ(&pEnc->rate_control, 0);

		pEnc->mbParam.m_quant_type = MPEG4_QUANT;
		/*write_vol_header=0;*/
		
		/* coding I/P frame */
		if(frametype==0)
			/*			pFrame->intra = FrameCodeI(pEnc, &bs, &bits,&head_vector,FALSE,&mad);*/
        {
//			pEnc->current->quant = pEnc->current->quant * 2 / 3;
            pFrame->intra = FrameCodeI(pEnc, &bs, &bits,&head_vector,&mad);
		}
		else 
			/*pFrame->intra = FrameCodeP(pEnc, &bs, &bits, 1, write_vol_header,&head_vector,&mad);*/
            pFrame->intra = FrameCodeP(pEnc, &bs, &bits,&head_vector,&mad);
	
		/* fyh comment code */
		/*
		BitstreamPutBits(&bs, 0xFFFF, 16);
		BitstreamPutBits(&bs, 0xFFFF, 16);
		*/
		
		/* Pad bitstream to the next byte boundary. Add by fyh */
		BitstreamPad(&bs);
		
		/* Get frame bitstream length. Add by fyh */
		pFrame->length = BitstreamLength(&bs);

		/* reset frametype for scene changing. Add by fyh (comment code)*/
		/*if(pFrame->intra)   frametype=0;*/

		/* update rate control model after encoding a frame. Add by fyh */ 
		if(pEnc->rc_type)
			After_encoding_current(pEncLogFile, &pEnc->rc,frametype,
					pFrame->length*8,head_vector,mad);
		else
			RateControlUpdate(&pEnc->rate_control, pEnc->current->quant,
							  pFrame->length, pFrame->intra);

        /* claculate psnr value for current encoding iamge */
#ifdef _DEBUG_PSNR
		psnr =
			image_psnr(&pEnc->sOriginal, &pEnc->current->image,
					   pEnc->mbParam.edged_width, pEnc->mbParam.width,
					   pEnc->mbParam.height);
		pFrame->psnr=psnr; 	
#endif

		/* output constructed image */
#ifdef _OUT_CONSTRUCT_IMAGE		
/*		image_output(&pEnc->current->image , pEnc->mbParam.width,pEnc->mbParam.height,
							 pEnc->mbParam.edged_width, pFrame->constructimage,
							 pFrame->stride ,pFrame->colorspace );*/
		image_output(&pEnc->current->image , pEnc->mbParam.width,pEnc->mbParam.height,
							 pEnc->mbParam.edged_width, pFrame->constructimage,
							 pFrame->stride);
#endif         
	  
		pEnc->iFrameNum++;
		stop_global_timer();
		write_timer();
	}
	else
	{	pEnc->iFrameNum++;
	  	pFrame->length=0;
		pFrame->intra=0;
	}

	return XVID_ERR_OK;/* normal exit */
}
/*
   set macoblock coding mode and quantization step size.
   zero motion vector and sad value for motion estimation.
*/

static __inline void
CodeIntraMB(Encoder * pEnc,
			MACROBLOCK * pMB)
{
    /* set macoblock coding mode */
	pMB->mode = MODE_INTRA;

	/* zero mv statistics */
	pMB->mvs[0].x = pMB->mvs[1].x = pMB->mvs[2].x = pMB->mvs[3].x = 0;
	pMB->mvs[0].y = pMB->mvs[1].y = pMB->mvs[2].y = pMB->mvs[3].y = 0;
    pMB->mv16.x=pMB->mv16.y=0;/* fyh add code 2002.12.22*/

	/* zero sad value */
	pMB->sad8[0] = pMB->sad8[1] = pMB->sad8[2] = pMB->sad8[3] = 0;
	pMB->sad16 = 0;

    /* set macoblock quantization step size */
	pMB->quant = pEnc->current->quant;
}

/* store dct transform coefficient */
static int16_t dct_codes_storage[6*64+CACHE_LINE-1];
/* store quantization coefficient */
static int16_t    qcoeff_storage[6*64+CACHE_LINE-1];

/* 
scence_change: no meaning(delete)
*/
/* 
static int
FrameCodeI(Encoder * pEnc,
		   Bitstream * bs,
		   uint32_t * pBits,int* head,BOOL scence_change,int *mad)*/
/*
   Finish I frame encoding.
*/
static int  /* frame type flag */
FrameCodeI(Encoder * pEnc, /* ponit to global Encoder structure */
		   Bitstream * bs, /* ponit to Bitstream structure */
		   uint32_t * pBits,/* bit streams length */
		   int* head,/* header information encoding bits number */
		   int *mad/* use mad value to measure encoding complexity */
		   )
{
  
    uint16_t x, y;/* macroblock coordinate */
	MACROBLOCK *pMB;

	/*  
	   int16_t dct_codes_storage[6*64+16-1];
	   int16_t *dct_codes=(int16_t *)((uint32_t)dct_codes_storage+
	           (16-1))&~((uint32_t)((uint32_t)(16)-1));
       alloc dctcodes[6][64] and qcoeff[6][64] 
	*/
	/* modify */
	/*
	DECLARE_ALIGNED_MATRIX(dct_codes, 6, 64, int16_t, CACHE_LINE);
	DECLARE_ALIGNED_MATRIX(qcoeff, 6, 64, int16_t, CACHE_LINE);
	*/

    /* point to dct transform coefficient buffer */
    int16_t *dct_codes=(int16_t *)(((uint32_t)dct_codes_storage+
	           CACHE_LINE-1)&~(CACHE_LINE-1));
	/* point to quantization coefficient buffer */
    int16_t *qcoeff=(int16_t *)(((uint32_t)qcoeff_storage+
	           CACHE_LINE-1)&~(CACHE_LINE-1));
	
	/* whq,2002.12.18,get dcscaler here */
	/*
	add dcscaler
	*/
	pEnc->current->lum_dcscaler    = get_dc_scaler(pEnc->current->quant, 1);
	pEnc->current->chrom_dcscaler  = get_dc_scaler(pEnc->current->quant, 0);	
	/* whq,2002.12.18,get dcscaler here */


	/*
	if(scence_change==FALSE)
		pEnc->iFrameNum = 0;
    */
    pEnc->iFrameNum = 0;

	/* 
	   半像素插值時使用四舍五入
    */
/*	pEnc->mbParam.m_rounding_type = 1;*/
    pEnc->mbParam.m_rounding_type = 0;

	pEnc->current->rounding_type = pEnc->mbParam.m_rounding_type;

    /* calculate mad value for I frame */
	*mad=compute_MAD(pEnc);

	pEnc->current->coding_type = I_VOP;

	/* write vol and vop headers */
	*head=BitstreamPos(bs);
	BitstreamWriteVolHeader(bs, &pEnc->mbParam, pEnc->current);
	BitstreamWriteVopHeader(bs, &pEnc->mbParam, pEnc->current, 1);
	*pBits = BitstreamPos(bs);
	*head=BitstreamPos(bs)-*head;
		
	/* process all macroblock of frame */
	for (y = 0; y < pEnc->mbParam.mb_height; y++)
	{
		for (x = 0; x < pEnc->mbParam.mb_width; x++)
		{
			/* get current macroblock structure address */
			/*MACROBLOCK *pMB =
				&pEnc->current->mbs[x + y * pEnc->mbParam.mb_width];*/
            pMB = &pEnc->current->mbs[x + y * pEnc->mbParam.mb_width];

			/* modify */
			/* get mb quantization step size. Add by fyh */
			CodeIntraMB(pEnc, pMB);
			/*
		    pMB->mode = MODE_INTRA;
            pMB->quant = pEnc->current->quant;
            */
			/*whq,2002.12.18,add a param or struct member in pEnc->current*/
			/* transform and quantize. */
			MBTransQuantIntra(&pEnc->mbParam, pEnc->current, pMB, x, y,
							  dct_codes, qcoeff);

			/* whq,2002.12.19,add prediction into transquant */
			/*start_timer();
			
			MBPrediction(pEnc->current, x, y, pEnc->mbParam.mb_width, qcoeff);
			stop_prediction_timer();
			*/
			/* whq */

			/* vlc coding */
			start_timer();
			MBCoding(pEnc->current, pMB, qcoeff, bs, &pEnc->sStat);
			stop_coding_timer();
		}
	}

	/* get bit stream length */
	*pBits = BitstreamPos(bs) - *pBits;
    pEnc->mbParam.m_fcode = 1;
       
	/* decide P frame type by use amvfast . Add by fyh */
	first_P_gop=1;

	return 1;				
}


/*#define INTRA_THRESHOLD 0.5*/

/*
static int
FrameCodeP(Encoder * pEnc,
		   Bitstream * bs,
		   uint32_t * pBits,
		   bool force_inter,
		   bool vol_header,int* head_vector,int *mad)
*/
/*
   Finish P frame encoding.
*/


static int                        /* frame type flag */
FrameCodeP(Encoder * pEnc,
		   Bitstream * bs,        /* ponit to global Encoder structure */
		   uint32_t * pBits,      /* bit streams length */
		   int* head_vector,      /* header information and vector encoding bits number */
		   int *mad               /* use mad value to measure encoding complexity */ 
		   )
{
/*	int iLimit;*/
	uint32_t x, y;/* current macroblock coordinate(unit: 16 pixel) */
	int bIntra;   /* intra macroblock flag */
	MACROBLOCK *pMB;/* current macroblock structure address */

	IMAGE *pRef = &pEnc->reference->image;/* reference image address */

    /* midify */
	/*
	DECLARE_ALIGNED_MATRIX(dct_codes, 6, 64, int16_t, CACHE_LINE);
	DECLARE_ALIGNED_MATRIX(qcoeff, 6, 64, int16_t, CACHE_LINE);
	*/
    /* point to dct transform coefficient buffer */
    int16_t *dct_codes=(int16_t *)(((uint32_t)dct_codes_storage+
	           CACHE_LINE-1)&~(CACHE_LINE-1));
	/* point to quantization coefficient buffer */
    int16_t *qcoeff=(int16_t *)(((uint32_t)qcoeff_storage+
	           CACHE_LINE-1)&~(CACHE_LINE-1));


    /* reference image edge padding (include Y/U/V component) */
	start_timer();
/*	image_setedges(pRef, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height,
				   pEnc->mbParam.width, pEnc->mbParam.height,
				   pEnc->current->global_flags & XVID_INTERLACING);*/
   image_setedges(pRef, pEnc->mbParam.edged_width, pEnc->mbParam.edged_height,
				   pEnc->mbParam.width, pEnc->mbParam.height);
	stop_edges_timer();
	
	pEnc->current->rounding_type = pEnc->mbParam.m_rounding_type;
	pEnc->current->fcode = pEnc->mbParam.m_fcode;
/*
	if (!force_inter)
		iLimit =
			(int) (pEnc->mbParam.mb_width * pEnc->mbParam.mb_height *
				   INTRA_THRESHOLD);
	else
		iLimit = pEnc->mbParam.mb_width * pEnc->mbParam.mb_height + 1;
*/
/*    iLimit = pEnc->mbParam.mb_width * pEnc->mbParam.mb_height + 1;*/

	/* reference image half pixel interpolation (only process Y component)*/
	if ((pEnc->current->global_flags & XVID_HALFPEL)) {
		start_timer();
		image_interpolate(pRef, &pEnc->vInterH, &pEnc->vInterV,
						  &pEnc->vInterHV, pEnc->mbParam.edged_width,
						  pEnc->mbParam.edged_height,
						  pEnc->current->rounding_type);
		stop_inter_timer();
	}

	/* motion estimation for current image */
	start_timer();
	/*bIntra =
			MotionEstimation(&pEnc->mbParam, pEnc->current, pEnc->reference,
							 &pEnc->vInterH, &pEnc->vInterV, &pEnc->vInterHV,mad,
							 iLimit);*/
    MotionEstimation(&pEnc->mbParam, pEnc->current, pEnc->reference,
					 &pEnc->vInterH, &pEnc->vInterV, &pEnc->vInterHV,mad);

	stop_motion_timer();
/*
	if (bIntra == 1) 
	{
		return FrameCodeI(pEnc, bs, pBits,head_vector,TRUE,mad);
	}
*/	

	/* write vop header and get header length */
	*head_vector=BitstreamPos(bs);
	pEnc->current->coding_type = P_VOP;
/*
	if (vol_header)
		BitstreamWriteVolHeader(bs, &pEnc->mbParam, pEnc->current);
*/
	BitstreamWriteVopHeader(bs, &pEnc->mbParam, pEnc->current, 1);
	*pBits = BitstreamPos(bs);
	*head_vector=BitstreamPos(bs)-*head_vector;
	*head_vector=0;

	/* whq,2002.12.18,get dcscaler here */
	/*
	add dcscaler
	*/
	pEnc->current->lum_dcscaler    = get_dc_scaler(pEnc->current->quant, 1);
	pEnc->current->chrom_dcscaler  = get_dc_scaler(pEnc->current->quant, 0);	
	/* whq,2002.12.18,get dcscaler here */

	/* macroblock level loop */
	for (y = 0; y < pEnc->mbParam.mb_height; y++) {
		for (x = 0; x < pEnc->mbParam.mb_width; x++) {
			/* get current macroblock structure address */
/*
			MACROBLOCK *pMB =
				&pEnc->current->mbs[x + y * pEnc->mbParam.mb_width];*/
            pMB =&pEnc->current->mbs[x + y * pEnc->mbParam.mb_width];

			bIntra = (pMB->mode == MODE_INTRA) || (pMB->mode == MODE_INTRA_Q);

			if (!bIntra) {/* process inter macroblock */
				
				/* motion compensation for inter macroblock */
				start_timer();
				MBMotionCompensation(pMB, x, y, &pEnc->reference->image,
									 &pEnc->vInterH, &pEnc->vInterV,
									 &pEnc->vInterHV, &pEnc->current->image,
									 dct_codes, pEnc->mbParam.width,
									 pEnc->mbParam.height,
									 pEnc->mbParam.edged_width,
									 pEnc->current->rounding_type);
				stop_comp_timer();

				pMB->quant = pEnc->current->quant;

				/* modify */
			/*	pMB->field_pred = 0; */

                /* transform and quantize for inter macroblock */ 
				pMB->cbp =
					MBTransQuantInter(&pEnc->mbParam, pEnc->current, pMB, x, y,
									  dct_codes, qcoeff);
			} else {
				/* process intra macroblock */

				/* get quantization step size */
				CodeIntraMB(pEnc, pMB);

                /* transform and quantize for intra macroblock */ 
				MBTransQuantIntra(&pEnc->mbParam, pEnc->current, pMB, x, y,
								  dct_codes, qcoeff);

			    /* whq,2002.12.19,add prediction into transquant*/
				/*start_timer();   */
			    /*MBPrediction(pEnc->current, x, y, pEnc->mbParam.mb_width, qcoeff);
			     stop_prediction_timer();*/
				 /*whq */
			}

			/* vlc coding for current macroblock */
			start_timer();
			*head_vector+=MBCoding(pEnc->current, pMB, qcoeff, bs, &pEnc->sStat);
			stop_coding_timer();
		}
	}

    pEnc->mbParam.m_fcode=1;/* motion vector range code */
	*pBits = BitstreamPos(bs) - *pBits;/* get bit streams length */


    /* decide P frame type by use amvfast . Add by fyh */
	first_P_seq=0;
    first_P_gop=0;

	return 0; /* normal exit */					
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品亚洲专区| 97国产精品videossex| 国产精品资源在线| 91在线免费视频观看| 国产一区二区免费视频| 色综合网站在线| 欧美岛国在线观看| 亚洲色图视频网| 精品一区二区在线视频| av亚洲精华国产精华精| 欧美一区二区三区在线观看视频| 欧美亚洲国产一区二区三区va| 精品精品欲导航| 亚洲人成影院在线观看| 狠狠v欧美v日韩v亚洲ⅴ| 91女厕偷拍女厕偷拍高清| 91福利资源站| 国产欧美一区在线| 日本网站在线观看一区二区三区| 日韩在线播放一区二区| 99视频热这里只有精品免费| 日韩精品中文字幕在线一区| 亚洲综合小说图片| 久久激情五月激情| 欧美日韩中文字幕精品| 国产精品美女久久久久av爽李琼| 亚洲免费在线观看视频| 国产精品亚洲视频| 欧美视频精品在线观看| 国产精品国产三级国产普通话99 | 色偷偷久久一区二区三区| 久久久99久久| 国产精品亚洲视频| 国产日韩精品一区| 成人午夜又粗又硬又大| 国产精品情趣视频| youjizz国产精品| 亚洲婷婷在线视频| 色综合久久综合网97色综合| 亚洲免费高清视频在线| 欧美伊人久久久久久久久影院| 亚洲精品成人少妇| 欧美日韩中文字幕一区二区| 日韩中文字幕一区二区三区| 日韩视频中午一区| 国产福利一区二区三区在线视频| 国产拍揄自揄精品视频麻豆| 成人精品鲁一区一区二区| 国产精品不卡在线| 91成人在线免费观看| 亚洲大片一区二区三区| 日韩一级精品视频在线观看| 韩国欧美国产1区| 国产精品五月天| 在线观看免费一区| 蜜臀久久久久久久| 国产欧美视频在线观看| 91网页版在线| 日韩精品欧美成人高清一区二区| 欧美大片在线观看一区| 国产成人亚洲综合a∨婷婷图片| 国产精品日韩成人| 欧美精品久久久久久久久老牛影院| 久久99国产精品麻豆| 国产精品久久久久四虎| 在线成人高清不卡| 国产精品自拍一区| 亚洲高清免费在线| 久久久精品免费网站| 欧美亚洲高清一区二区三区不卡| 久久se这里有精品| 日韩毛片高清在线播放| 日韩视频123| 色一区在线观看| 国产一二精品视频| 舔着乳尖日韩一区| 国产精品国产三级国产普通话蜜臀| 欧美日韩亚洲综合一区| 国产99精品在线观看| 日韩av一区二区在线影视| 亚洲欧洲www| 久久这里只有精品6| 欧美少妇xxx| a美女胸又www黄视频久久| 首页国产欧美日韩丝袜| 日韩久久一区二区| 久久女同性恋中文字幕| 51久久夜色精品国产麻豆| 99久久精品国产导航| 久久电影网电视剧免费观看| 亚洲夂夂婷婷色拍ww47| 中文字幕精品三区| 精品国产污污免费网站入口| 欧美图区在线视频| 91麻豆精品视频| 国产精品77777竹菊影视小说| 日韩高清不卡一区二区| 亚洲一二三级电影| 亚洲精品日日夜夜| 国产精品嫩草久久久久| 久久这里都是精品| 26uuu欧美日本| 欧美大肚乱孕交hd孕妇| 欧美日韩精品综合在线| 在线精品视频免费播放| av亚洲精华国产精华精| 成人国产精品视频| 不卡欧美aaaaa| 成人永久免费视频| 成人国产精品视频| 不卡av在线网| 99国产精品99久久久久久| 成人免费不卡视频| 白白色 亚洲乱淫| 91亚洲永久精品| 97se亚洲国产综合自在线不卡| 高清视频一区二区| 99在线视频精品| 一本一道久久a久久精品综合蜜臀| 成人性色生活片免费看爆迷你毛片| 狠狠色丁香久久婷婷综| 国产精品一区不卡| 99这里都是精品| 色一情一乱一乱一91av| 欧美午夜免费电影| 欧美一级日韩一级| 日韩视频免费直播| 国产免费观看久久| 亚洲日本va午夜在线电影| 亚洲精品免费一二三区| 亚洲综合视频网| 日韩电影免费在线观看网站| 乱中年女人伦av一区二区| 激情五月婷婷综合| 成人免费视频视频在线观看免费| 97aⅴ精品视频一二三区| 欧日韩精品视频| 日韩一级片在线播放| 久久精品夜色噜噜亚洲a∨| 中文字幕一区二区三区精华液 | 久久婷婷综合激情| 国产精品夫妻自拍| 日韩专区欧美专区| 国产成人免费在线| 欧美午夜宅男影院| 精品国产一区二区在线观看| 国产精品理论在线观看| 亚洲第一av色| 国产高清成人在线| 欧美日产在线观看| 欧美韩国日本一区| 性感美女久久精品| 成人高清在线视频| 欧美一区中文字幕| 国产精品妹子av| 日产精品久久久久久久性色| 国产夫妻精品视频| 欧美人xxxx| ...av二区三区久久精品| 免费观看日韩av| 色综合色狠狠天天综合色| 日韩欧美不卡在线观看视频| 1区2区3区欧美| 韩国理伦片一区二区三区在线播放| 色哟哟在线观看一区二区三区| 91精品欧美福利在线观看| 亚洲视频在线观看一区| 国精品**一区二区三区在线蜜桃| 日本道免费精品一区二区三区| 精品播放一区二区| 亚洲bt欧美bt精品777| 成人免费福利片| 精品99一区二区三区| 午夜视频在线观看一区| 99久久精品国产精品久久| 久久久久久久免费视频了| 免费成人你懂的| 欧美日韩情趣电影| 亚洲精品国产精品乱码不99| 国产激情视频一区二区三区欧美 | 美女网站色91| 欧美日韩国产乱码电影| 亚洲精品福利视频网站| 成人性生交大片免费看视频在线 | 国产精品资源站在线| 欧美一级在线视频| 亚洲大尺度视频在线观看| 色狠狠色噜噜噜综合网| 国产精品色一区二区三区| 国产精品1区二区.| 久久久www免费人成精品| 久久精品国产澳门| 欧美成va人片在线观看| 青青草91视频| 欧美一级理论片| 久久国产精品第一页| 日韩视频免费观看高清完整版| 日韩国产欧美三级| 欧美一级在线观看| 韩国欧美国产1区|