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

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

?? coder.c

?? h.263 c編碼源碼。目錄下有input。qcif原始未壓縮文件
?? C
?? 第 1 頁 / 共 3 頁
字號:
    *(int *)(cr_now + 6) = *(int *)(cr_prev + 6);    *(int *)(cr_now + 7) = *(int *)(cr_prev + 7);    cr_now += cpels;    cr_prev += cpels;#endif  }  return;}/********************************************************************** * *	Name:		InterpolateImage *	Description:    Interpolates a complete image for easier half *                      pel prediction *	 *	Input:	        pointer to image structure *	Returns:        pointer to interpolated image *	Side effects:   allocates memory to interpolated image * *	Date: 950207 	Author: Karl.Lillevold@nta.no *            960207    Author: Roalt aalmoes ***********************************************************************///插入半象素整個圖像,新圖像為ipol_image
//得到的新圖像大小為    width*2  height*2void InterpolateImage(unsigned int *image, unsigned int *ipol_image, 			       int width, int height){  /* If anyone has better ideas to optimize this code, be my guest!     note: assembly or some advanced bitshifts routine might do the trick...*/  register unsigned int *ii, *oo,     *ii_new,     *ii_new_line2,     *oo_prev,     *oo_prev_line2;    register int i,j;  register unsigned int pix1,pix2,pix3,pix4;  ii = ipol_image;  oo = image;  oo_prev = image;  oo_prev_line2 = image + width;  ii_new = ipol_image;  ii_new_line2 = ipol_image + (width<<1);  /* main image */  for (j = 0; j < height-1; j++) {				/* get Pix1 and Pix3, because they are				   not known the first time */    pix1 = *oo_prev;    pix3 = *oo_prev_line2;    for (i = 0; i  < width-1; i++) {				/* Pix1 Pix2				   Pix3 Pix4 */     //  pix1            (pix1+pix2)/2               pix2           
		                            //  (pix1+pix3)/2   (pix1+pix2+pix3+pix4)/4     (pix2+pix4)/2
		                            //        /* Pix2 and Pix4 are used here for first time */      pix2 = *(oo_prev + 1);      pix4 = *(oo_prev_line2 + 1);      *(ii_new) = pix1;					/* X.							   ..*/      *(ii_new + 1) = (pix1 + pix2 + 1)>>1; 		/* *X							   .. */      *ii_new_line2 = (pix1 + pix3 + 1)>>1; 		/* *.						           X. */      *(ii_new_line2 + 1) = (pix1 + pix2 + pix3 + pix4 + 2)>>2;            oo_prev++; oo_prev_line2++; ii_new += 2; ii_new_line2 += 2;            pix1 = pix2;      pix3 = pix4;		/* Pix1 Pix2=Pix1' Pix2' */				/* Pix3 Pix4=Pix3' Pix4' */    }        /* 最后一列*/    *(ii_new++) = pix1;	    *(ii_new++) = pix3;        /* Last column -On the Edge - */    *(ii_new_line2++) = (pix1 + pix3 + 1 ) >>1;    *(ii_new_line2++) = (pix1 + pix3 + 1 ) >>1;    ii_new += (width<<1);	/* ii_new now on old position ii_new_line2,so one interpolated screen line must be added*/    ii_new_line2 += (width<<1);	/* In fact, ii_new_line here has same value as ii_new */    oo_prev += 1; /* Remember, loop is done one time less! */    oo_prev_line2 += 1;      }  /* 最后一行 */  pix1 = *oo_prev;  for (i = 0; i < width-1; i++) {    pix2 = *(oo_prev + 1);    *ii_new = *ii_new_line2 = pix1;    *(ii_new + 1) = *(ii_new_line2 + 1) = (pix1 + pix2 + 1)>>1;    ii_new += 2;    ii_new_line2 += 2;    oo_prev += 1;    pix1 = pix2;			/* Pix1 Pix2=Pix1' Pix2' */  }    /* 右下角*/  *(ii_new) = pix1;  *(ii_new + 1) = pix1;  *(ii_new_line2) = pix1;  *(ii_new_line2+1) = pix1;  return;}/********************************************************************** * *	Name:		FullMotionEstimatePicture *	Description:    Finds integer and half pel motion estimation *	 *	Input:	       current image, previous image, interpolated *                     reconstructed previous image, seek_dist, *                     motion vector array *	Returns:        *	Side effects: allocates memory for MV structure * *	Date: 960418	Author: Roatlt * ***********************************************************************/// 找到整象素和半象素的運動估計// curr現在圖像,prev重建后圖像,prev_ipol插入半象素后的,seek_dist 搜索窗,MV 放置mv結果,advanced_method    ,EncodeThisBlock編碼
void FullMotionEstimatePicture(unsigned int *curr, unsigned int *prev, 			       unsigned int *prev_ipol, int seek_dist, 			       MotionVector *MV_ptr,			       int advanced_method,			       int *EncodeThisBlock){  int i,j;  MotionVector *current_MV;  for(j = 0; j < mbr; j++) {   for(i = 0; i < mbc; i++) {       current_MV = MV_ptr + j*mbc + i;       if(advanced_method && !*(EncodeThisBlock + j*mbc + i) )  // encoderthisblock 檢測宏塊hasmove,為0時,表示重建的宏塊和當前宏塊近似,不需編碼,為skip
	   {		   current_MV->x = current_MV->y = current_MV->x_half = current_MV->y_half = 0; // 整象素和半象素全部為0時,為SKIP		   current_MV->Mode = MODE_SKIP;       } 
	   else 
	   {	/* EncodeThisBlock */

		   //估計宏塊運動矢量,到current_mv(x,y值和誤差值)    ???????????????????????	       FullMotionEstimation(curr, prev_ipol, seek_dist, current_MV, i*MB_SIZE, j*MB_SIZE);
           // 選擇編碼模式,宏塊的方差較小時,用intra	       current_MV->Mode = ChooseMode(curr,i*MB_SIZE,j*MB_SIZE,current_MV->min_error);
	       if(current_MV->Mode == MODE_INTRA) 	            ZeroVec(current_MV);      }    }  }}//編碼一幀P幀void CodeInterH263(CParam *params, Bits *bits){  MotionVector *MV;	  MotionVector ZERO = {0,0,0,0,0};  MB_Structure *recon_data_P;   MB_Structure *diff;  int *qcoeff_P;  unsigned int *new_recon=NULL;  unsigned int *prev_recon;  int Mode;    int CBP, CBPB=0;  int newgob;  int i,j;  search_p_frames = params->search_method;  MV = malloc(sizeof(MotionVector)*mbc*mbr);
  // 新重建圖像  new_recon = malloc(sizeof_frame);
  //上幀重建圖像  prev_recon = params->recon;  /* buffer control vars */    ZeroBits(bits);  /* Interpolate luminance from reconstr. picture */  // 插入半象素圖像,得到params->interpolated_lum (寬,長都為原來2倍)  InterpolateImage(prev_recon,params->interpolated_lum,pels,lines);
  //找到運動矢量,放入MV序列,params->advanced_method=1 ,定義宏塊的類型.如果當前和重建的宏塊相同,則為skip. intra誤差小時,定義為intra.  FullMotionEstimatePicture( params->data,prev_recon, params->interpolated_lum, params->half_pixel_searchwindow,MV,params->advanced_method, params->EncodeThisBlock);    /* Calculate MV for each MB */  /* ENCODE TO H.263 STREAM */  //開始編碼  for ( j = 0; j < mbr; j++) {    newgob = 0;    if (j == 0) 
	{      pic->QUANT = params->Q_inter;      pic->picture_coding_type = PCT_INTER;      bits->header += CountBitsPicture(pic);                                    // 估計P幀的文件頭bit數,   50     }    else if (pic->use_gobsync && j%pic->use_gobsync == 0) // 0
	{      bits->header += CountBitsSlice(j,params->Q_inter); /* insert gob sync */    // 估計片的bit數      newgob = 1; //新的片    }    for ( i = 0; i < mbc; i++) {      /* This means: For every macroblock (i,j) do ... */      /* We have 4 different situations:         1) !EncodeThisBlock: this means that the macroblock in not encoded         2) EncodeThisBlock: This means that the MB is  encoded by using the predicted motion vector.         3) EncodeThisBlock: However, the approx of the  motion vector was so bad, that INTRA coding is more appropiate here ...	     4) EncodeThisBlock: The approx is so good that the coefficients are all zero (after quant.) and are not send.      */	/* This means: For every macroblock (i,j) do ... */        pic->DQUANT = 0;	    Mode = MV[j*mbc + i].Mode;	   /* Determine position of MB */	    pic->MB = i + j * mbc;
         //宏塊SKIP,不需編碼	    if(Mode == MODE_SKIP) 
		{	      /* SITUATION 1 */		  Mode = MODE_INTRA;	/* This might be done "better" in the future*/		  MV[j*mbc + i].Mode = Mode;		  ZeroVec(&(MV[j*mbc + i]));		  CBP = CBPB = 0;
		  /* COD值為1,skip */		  CountBitsMB(Mode,1,CBP,CBPB,pic,bits); 		  ReconCopyImage(i,j,new_recon,prev_recon);		} 
		else //需對宏塊編碼
		{ 
			//幀間0	      if (Mode == MODE_INTER)
		  {	      /* SITUATION 2 */	      /* Predict P-MB *///返回根據mv位置得到的插入圖像和現在圖像的差值,放入mb結構的diff	         diff = Predict_P(params->data,prev_recon,params->interpolated_lum,i*MB_SIZE,j*MB_SIZE,MV);		  } 
		  else //幀內
		  {	        /* SITUATION 3 */	         /* Create MB_Structure diff that contains coefficients that must be sent to the other end */				diff = (MB_Structure *)malloc(sizeof(MB_Structure));

			//從原數據params->data中復制宏塊數據到diff[16][16]中			FillLumBlock(i*MB_SIZE, j*MB_SIZE, params->data, diff); 
			/* Copy curr->lum to diff for macroblock (i,j) */			FillChromBlock(i*MB_SIZE, j*MB_SIZE, params->data, diff);			/* Equiv. for curr->Cb and curr->Cr */		  }		  /* P or INTRA Macroblock */		  /*  diff -> DCT -> QUANTIZED -> qcoeff_P */
		  //編碼差值系數,放入量化后的系數qcoeff_P		  qcoeff_P = MB_EncodeAndFindCBP(diff, params->Q_inter, Mode,&CBP);		  /*   CBP = FindCBP(qcoeff_P, Mode, 64); -> Not required anymore */
		  /* 解碼宏塊 */	     if (CBP == 0 && (Mode == MODE_INTER) )
		 {			 /* SITUATION 4 */	         ZeroMBlock(diff);		 } 
		 else 
		 {	         /*  qcoeff_P -> Dequantized -> IDCT -> diff */
			 //宏塊解碼,從量化系數qcoeff_P返回到diff	         MB_Decode(qcoeff_P, diff, params->Q_inter, Mode);		 }         //重建p宏塊,返回重建宏塊結構 ??????????????	     recon_data_P = MB_Recon_P(prev_recon, params->interpolated_lum,diff,  i*MB_SIZE,j*MB_SIZE,MV);		  Clip(recon_data_P);		  free(diff);
		  /* 比特流編碼 */	     if((CBP==0) && (EqualVec(&(MV[j*mbc+i]),&ZERO)) &&(Mode == MODE_INTER) )
		 {	    /* Skipped MB : both CBP and CBPB are zero, 16x16 vector is zero,	       PB delta vector is zero and Mode = MODE_INTER */	    /* SKIP */	      CountBitsMB(Mode,1,CBP,CBPB,pic,bits);		 } 
		 else //非skip
		 {			/* Normal MB */			/* VLC */			CountBitsMB(Mode,0,CBP,CBPB,pic,bits);			if (Mode == MODE_INTER) //inter
			{			  bits->no_inter++;
			  //對mv系數編碼,i,j宏塊			  CountBitsVectors(MV, bits, i, j, Mode, newgob, pic);     //bits->vec 中記錄編碼了的bit位數			} 
			else 
			{			  /* MODE_INTRA */			  bits->no_intra++;			}	        /* Only encode coefficient if they are nonzero or Mode is INTRA*/
	        // 對qcoeff編碼(16*16宏塊),寫入bit流,并將寫入bit數加入到 bits->Y,和 bits->U中	        if (CBP || Mode == MODE_INTRA)  //幀內	             CountBitsCoeff(qcoeff_P, Mode, CBP, bits, 64);	   		 } /* End skip/not skip macroblock encoding */		  ReconImage(i,j,recon_data_P,new_recon);		  free(recon_data_P);		  free(qcoeff_P);		}  /* End advanced */          } /* End for i */  } /* End for j */  pic->QP_mean = params->Q_inter;    free(prev_recon);  params->recon = new_recon;  AddBitsPicture(bits);  free(MV);  return;}				

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲123区在线观看| 日韩午夜激情视频| 国产美女在线观看一区| 日韩福利电影在线观看| 亚洲成人7777| 日本在线观看不卡视频| 日本强好片久久久久久aaa| 免费在线观看精品| 久久成人精品无人区| 免费国产亚洲视频| 久久不见久久见免费视频1| 久久99久久99精品免视看婷婷 | 久久久国产精品不卡| 日韩一二三区不卡| 精品国产3级a| 国产精品青草综合久久久久99| 欧美激情一区二区三区在线| 国产精品网站在线观看| 最新中文字幕一区二区三区| 亚洲免费av高清| 亚洲国产视频网站| 日本不卡不码高清免费观看| 久久精品理论片| 国产91露脸合集magnet| 99在线精品观看| 欧美另类一区二区三区| 精品国产一区二区三区忘忧草| 国产日韩精品一区二区三区 | 天天亚洲美女在线视频| 美女视频第一区二区三区免费观看网站 | 日韩欧美你懂的| 中文av一区二区| 一区二区高清免费观看影视大全 | 久久久久青草大香线综合精品| 国产女主播一区| 亚洲国产你懂的| 国产一区二区三区精品视频| 色哟哟国产精品| 日韩精品一区二区三区在线播放| 国产精品美女久久久久久久久 | 国产精品亚洲午夜一区二区三区 | 精品欧美乱码久久久久久1区2区| 国产精品免费av| 天堂久久一区二区三区| 北岛玲一区二区三区四区| 在线播放亚洲一区| 国产精品久久影院| 秋霞午夜av一区二区三区| www.亚洲免费av| 精品久久久久一区二区国产| 亚洲另类在线制服丝袜| 国产精一区二区三区| 欧美日韩不卡一区| 亚洲三级在线观看| 国产福利一区在线| 日韩欧美国产不卡| 亚洲地区一二三色| 日本久久一区二区| 日本一区免费视频| 激情av综合网| 欧美精品一卡二卡| 亚洲综合丁香婷婷六月香| 从欧美一区二区三区| 精品国产污污免费网站入口| 日日夜夜精品视频天天综合网| 99国产精品99久久久久久| 精品成人私密视频| 另类小说欧美激情| 7777精品伊人久久久大香线蕉的 | 日韩一区二区三区电影| 亚洲午夜免费电影| 91福利国产精品| 一区二区三区免费网站| 99re热这里只有精品免费视频| 久久精品人人爽人人爽| 国产精品18久久久久久vr| 欧美大胆一级视频| 久久国产精品一区二区| 精品伦理精品一区| 老司机精品视频在线| 欧美va亚洲va| 狠狠色丁香久久婷婷综合_中 | 99久久精品免费看| 国产精品美日韩| 97国产一区二区| 亚洲精品日韩一| 欧美色男人天堂| 日韩电影在线一区二区三区| 欧美一区二区三区白人| 国产一区视频在线看| 国产精品理伦片| 91视频在线看| 亚洲第一会所有码转帖| 欧美一区永久视频免费观看| 麻豆精品一区二区| 久久久午夜精品理论片中文字幕| 国产高清久久久久| 中文字幕在线播放不卡一区| 欧美性受xxxx黑人xyx性爽| 婷婷夜色潮精品综合在线| 精品日韩一区二区三区| 成人午夜私人影院| 亚洲综合色噜噜狠狠| 日韩亚洲电影在线| 成人网页在线观看| 亚洲成人综合网站| 久久你懂得1024| 色婷婷久久久久swag精品| 日本欧美在线观看| 亚洲欧美在线aaa| 91麻豆精品国产91久久久使用方法| 国模冰冰炮一区二区| 成人免费在线播放视频| 欧美一区二区三区在线观看| 丁香六月久久综合狠狠色| 亚洲v中文字幕| 亚洲国产精品成人综合| 欧美日韩精品三区| 成人91在线观看| 久久精品国产一区二区三区免费看 | 亚洲精品一区二区三区在线观看| www.在线成人| 久久99国内精品| 亚洲图片一区二区| 国产精品三级在线观看| 日韩精品中午字幕| 欧美性生交片4| bt欧美亚洲午夜电影天堂| 水野朝阳av一区二区三区| 中文字幕一区二| 欧美电影免费观看高清完整版在 | 亚洲精品视频免费观看| 精品sm捆绑视频| 欧美日韩日日摸| 色综合久久久久网| 国产 日韩 欧美大片| 美国十次了思思久久精品导航| 亚洲免费色视频| 国产精品久久久爽爽爽麻豆色哟哟| 91精品国产综合久久久久久久| 色一情一乱一乱一91av| 国产成人三级在线观看| 精品亚洲欧美一区| 免费人成精品欧美精品| 亚洲成人av一区二区三区| 成人免费小视频| 中文字幕亚洲精品在线观看| 国产亚洲欧美在线| 久久女同性恋中文字幕| 久久丝袜美腿综合| 精品国产伦一区二区三区观看体验| 欧美一区二区三区啪啪| 欧美丰满美乳xxx高潮www| 在线看国产一区二区| 在线看国产一区| 538prom精品视频线放| 欧美日韩中文精品| 欧美人动与zoxxxx乱| 在线观看日韩精品| 在线观看国产精品网站| 欧美亚洲图片小说| 欧美日韩一二三区| 欧美一区二区三区免费在线看| 日韩一区二区精品葵司在线 | 国产一区二区三区av电影| 黑人精品欧美一区二区蜜桃| 国产美女娇喘av呻吟久久| 国产成+人+日韩+欧美+亚洲| av资源站一区| 欧美性猛交xxxxxx富婆| 欧美一级精品在线| 亚洲精品一区二区三区影院| 国产精品动漫网站| 亚洲女爱视频在线| 日韩精品91亚洲二区在线观看| 老汉av免费一区二区三区| 国模冰冰炮一区二区| 99久久精品国产精品久久| 色婷婷综合中文久久一本| 欧美精品久久天天躁| 国产偷国产偷亚洲高清人白洁 | 欧美久久久久久蜜桃| 欧美tickle裸体挠脚心vk| 亚洲国产激情av| 一区二区成人在线观看| 激情六月婷婷久久| 欧美做爰猛烈大尺度电影无法无天| 91精品欧美久久久久久动漫| 欧美高清在线一区二区| 亚洲一二三四区| 国产精品1区2区| 欧美日韩成人激情| 中文在线资源观看网站视频免费不卡| 亚洲一区二区在线播放相泽| 国产在线精品不卡| 欧美色综合天天久久综合精品| 国产日韩成人精品| 日韩高清不卡在线| 色综合久久久久综合99| 久久久久久久久久久久电影|