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

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

?? macroblock.c

?? Mobile IP VCEG的信道模擬程序
?? C
?? 第 1 頁 / 共 4 頁
字號:
	  /* Set loop filter strength depending on mode decision */
	  SetLoopfilterStrength_P(); 
	  
	  /* Set reference frame information for motion vector prediction of future MBs */
	  SetRefFrameInfo_P();	
		
	  /*  Check if a MB is skipped (no coeffs. only 0-vectors and prediction from the most recent frame) */
	  if (img->mb_mode==M16x16_MB && currMB->intraOrInter == INTER_MB && (currMB->cbp == 0) 
	      && tmp_mv[0][img->block_y][img->block_x+4]==0 && tmp_mv[1][img->block_y][img->block_x+4]==0 
	      && (currMB->ref_frame == 0))
	    img->mb_mode=COPY_MB;	
	}

 	/* Set 16x16 intra mode and make "intra CBP" */
	if (img->imod==INTRA_MB_NEW)
    {
		img->mb_mode += intra_pred_mode_2 + 4*cr_cbp + 12*img->kac;
        currMB->cbp += 15*img->kac; /*GB*/
    }


    if (((img->type == INTER_IMG) && ((img->imod==INTRA_MB_NEW) || (img->imod==INTRA_MB_OLD)))
		|| (img->type == B_IMG && (img->imod==B_Backward || img->imod==B_Direct || img->imod==INTRA_MB_NEW || img->imod==INTRA_MB_OLD)))// gb b-frames too 
        currMB->ref_frame = 0;

#ifdef _RD_OPT_
    }
#endif
}

/************************************************************************
*
*  Name :       write_one_macroblock()
*
*  Description: Passes the chosen syntax elements to the NAL
*
************************************************************************/
void write_one_macroblock()
{
	int i;
	int mb_nr = img->current_mb_nr;
	SyntaxElement *currSE = img->MB_SyntaxElements;
	Macroblock *currMB = &img->mb_data[mb_nr];
	int *bitCount = currMB->bitcounter;
	Slice *currSlice = img->currentSlice;
	DataPartition *dataPart;
	int *partMap = assignSE2partition[input->partition_mode];

	/* Store imod for further use */
	currMB->mb_imode = img->imod;

	/* Store mb_mode for further use */
	currMB->mb_type = (currSE->value1 = img->mb_mode);

	/*  Bits for mode */
	if (input->symbol_mode == UVLC)
		currSE->mapping = n_linfo2;
	else
		currSE->writing = writeMB_typeInfo2Buffer_CABAC;
	currSE->type = SE_MBTYPE;

											
	/* choose the appropriate data partition */
	if (img->type != B_IMG)
	{
#if TRACE
		sprintf(currSE->tracestring, "MB mode(%2d,%2d) = %3d",img->mb_x, img->mb_y,img->mb_mode);
#endif
		dataPart = &(currSlice->partArr[partMap[SE_MBTYPE]]);

	}
	else
	{
#if TRACE
		sprintf(currSE->tracestring, "B_MB mode(%2d,%2d) = %3d",img->mb_x, img->mb_y, img->mb_mode);
#endif
		dataPart = &(currSlice->partArr[partMap[SE_BFRAME]]);
	}
	dataPart->writeSyntaxElement(	currSE, dataPart);
	bitCount[BITS_HEADER_MB]+=currSE->len;

	/* proceed to next SE */
	currSE++;
	currMB->currSEnr++;
	
	/*  Do nothing more if copy and inter mode  */
	if (img->mb_mode != COPY_MB || currMB->intraOrInter != INTER_MB || img->type == B_IMG)
	{
		
		/*  Bits for intra prediction modes*/		
		if (img->imod == INTRA_MB_OLD)
		{
			for (i=0; i < MB_BLOCK_SIZE/2; i++)
			{
				currSE->value1 = currMB->intra_pred_modes[2*i];
				currSE->value2 = currMB->intra_pred_modes[2*i+1];
				if (input->symbol_mode == UVLC)
					currSE->mapping = intrapred_linfo;
				else
					currSE->writing = writeIntraPredMode2Buffer_CABAC;
				currSE->type = SE_INTRAPREDMODE;
											
				/* choose the appropriate data partition */
				if (img->type != B_IMG)
				{
#if TRACE
					sprintf(currSE->tracestring, "Intra mode     = %3d",IPRED_ORDER[currSE->value1][currSE->value2]);
#endif
					dataPart = &(currSlice->partArr[partMap[SE_INTRAPREDMODE]]);

				}
				else
				{
#if TRACE
					sprintf(currSE->tracestring, "B_Intra mode = %3d\t",IPRED_ORDER[currSE->value1][currSE->value2]);
#endif
					dataPart = &(currSlice->partArr[partMap[SE_BFRAME]]);

				}
				dataPart->writeSyntaxElement(	currSE, dataPart);
				bitCount[BITS_COEFF_Y_MB]+=currSE->len;

				/* proceed to next SE */
				currSE++;
				currMB->currSEnr++;
			}
		}	
		/*  Bits for vector data*/
		if (img->type != B_IMG)
		{
			if (currMB->intraOrInter == INTER_MB) /* inter */
				writeMotionInfo2NAL_Pframe();
		}
		else
		{
			if(img->imod != B_Direct)
				writeMotionInfo2NAL_Bframe();
		}

		/* Bits for CBP and Coefficients */
		writeCBPandCoeffs2NAL();
	}
	bitCount[BITS_TOTAL_MB] =	bitCount[BITS_HEADER_MB] + bitCount[BITS_COEFF_Y_MB]	+ bitCount[BITS_INTER_MB] 
													+ bitCount[BITS_CBP_MB] + bitCount[BITS_COEFF_UV_MB];
	stat->bit_slice += bitCount[BITS_TOTAL_MB];
}

/************************************************************************
*
*  Name :       writeMotionInfo2NAL_Pframe()
*
*  Description: Passes for a given MB of a P picture the reference frame 
*								parameter and the motion vectors to the NAL 
*
************************************************************************/
#ifdef _RD_OPT_
int
#else
void
#endif
writeMotionInfo2NAL_Pframe()
{
	int i,j,k,l,m;
	int step_h,step_v;
	int curr_mvd;
	int mb_nr = img->current_mb_nr;
	Macroblock *currMB = &img->mb_data[mb_nr];
	SyntaxElement *currSE = &img->MB_SyntaxElements[currMB->currSEnr];
	int *bitCount = currMB->bitcounter;
	Slice *currSlice = img->currentSlice;
	DataPartition *dataPart;
	int *partMap = assignSE2partition[input->partition_mode];
#ifdef _RD_OPT_
	int no_bits = 0;
#endif
	
	/*	If multiple ref. frames, write reference frame for the MB */
#ifdef _ADDITIONAL_REFERENCE_FRAME_
	if (input->no_multpred > 1 || input->add_ref_frame > 0)
#else
	if (input->no_multpred > 1)
#endif
	{			

		currSE->value1 = currMB->ref_frame ;
		currSE->type = SE_REFFRAME;
		if (input->symbol_mode == UVLC)
			currSE->mapping = n_linfo2;
		else
			currSE->writing = writeRefFrame2Buffer_CABAC;
		dataPart = &(currSlice->partArr[partMap[currSE->type]]);
		dataPart->writeSyntaxElement(	currSE, dataPart);
		bitCount[BITS_INTER_MB]+=currSE->len;
#ifdef _RD_OPT_
		no_bits += currSE->len;
#endif
#if TRACE
		sprintf(currSE->tracestring, "Reference frame no %d", currMB->ref_frame);
#endif
				
		/* proceed to next SE */
		currSE++;
		currMB->currSEnr++;				
	}

	/* Write motion vectors */
	step_h=img->blc_size_h/BLOCK_SIZE;			/* horizontal stepsize */
	step_v=img->blc_size_v/BLOCK_SIZE;			/* vertical stepsize */
	
	for (j=0; j < BLOCK_SIZE; j += step_v)
	{
		for (i=0;i < BLOCK_SIZE; i += step_h)
		{
			for (k=0; k < 2; k++)
			{
				curr_mvd = tmp_mv[k][img->block_y+j][img->block_x+i+4]-img->mv[i][j][currMB->ref_frame][img->mb_mode][k];						

				img->subblock_x = i; // position used for context determination
				img->subblock_y = j; // position used for context determination
				currSE->value1 = curr_mvd;
				/* store (oversampled) mvd */
				for (l=0; l < step_v; l++) 
					for (m=0; m < step_h; m++)	
						currMB->mvd[0][j+l][i+m][k] =  curr_mvd;
				currSE->value2 = k; // identifies the component; only used for context determination
				currSE->type = SE_MVD;
				if (input->symbol_mode == UVLC)
					currSE->mapping = mvd_linfo2;
				else
					currSE->writing = writeMVD2Buffer_CABAC;
				dataPart = &(currSlice->partArr[partMap[currSE->type]]);
				dataPart->writeSyntaxElement(	currSE, dataPart);
				bitCount[BITS_INTER_MB]+=currSE->len;
#ifdef _RD_OPT_
				no_bits += currSE->len;
#endif
#if TRACE
				sprintf(currSE->tracestring, " MVD(%d) = %3d",k, curr_mvd);
#endif					
	
				/* proceed to next SE */
				currSE++;					
				currMB->currSEnr++;
						
			}
		}
	}		
#ifdef _RD_OPT_
	return no_bits;
#endif
}

/************************************************************************
*
*  Name :       writeCBPandCoeffs2NAL()
*
*  Description: Passes coded block pattern and coefficients (run/level)
*				to the NAL
*
************************************************************************/
void
writeCBPandCoeffs2NAL ()
{
  if (img->imod != INTRA_MB_NEW)
    {
      /* Bits for CBP */	  
      writeMB_bits_for_CBP  ();
      /* Bits for luma coefficients */
      writeMB_bits_for_luma (1);
    }
  else /* 16x16 based intra modes */
    {
      writeMB_bits_for_16x16_luma ();
    }
  /* Bits for chroma 2x2 DC transform coefficients */
  writeMB_bits_for_DC_chroma (1);
  /* Bits for chroma AC-coeffs. */		
  writeMB_bits_for_AC_chroma (1);
}	





int
writeMB_bits_for_CBP ()
{
  int           no_bits    = 0;
  Macroblock    *currMB    = &img->mb_data[img->current_mb_nr];
  SyntaxElement *currSE    = &img->MB_SyntaxElements[currMB->currSEnr];
  int           *bitCount  = currMB->bitcounter;
  DataPartition *dataPart;
  int           *partMap   = assignSE2partition[input->partition_mode];

  currSE->value1 = currMB->cbp;

#if TRACE
  sprintf(currSE->tracestring, "CBP (%2d,%2d) = %3d",img->mb_x, img->mb_y, currMB->cbp);
#endif

  if (img->imod == INTRA_MB_OLD) 
    {
      if (input->symbol_mode == UVLC)
	currSE->mapping = cbp_linfo_intra;
      currSE->type = SE_CBP_INTRA;
    }
  else
    {
      if (input->symbol_mode == UVLC)
	currSE->mapping = cbp_linfo_inter;
      currSE->type = SE_CBP_INTER;
    }

  if (input->symbol_mode == CABAC)
    currSE->writing = writeCBP2Buffer_CABAC;
											
  /* choose the appropriate data partition */
  if (img->type != B_IMG)
    dataPart = &(img->currentSlice->partArr[partMap[currSE->type]]);
  else
    dataPart = &(img->currentSlice->partArr[partMap[SE_BFRAME]]);

  dataPart->writeSyntaxElement(currSE, dataPart);
  bitCount[BITS_CBP_MB]+=currSE->len;
  no_bits              +=currSE->len;

  /* proceed to next SE */
  currSE++;	
  currMB->currSEnr++;
		
  return no_bits;
}





int
writeMB_bits_for_luma (int  filtering)
{
  int no_bits = 0;
  int cbp     = img->mb_data [img->current_mb_nr].cbp;
  int mb_y, mb_x, i, j, ii, jj, bits;

  for (mb_y=0; mb_y < 4; mb_y += 2)
    {
      for (mb_x=0; mb_x < 4; mb_x += 2)
	{
	  for (j=mb_y; j < mb_y+2; j++)
	    {
	      jj=j/2;
	      for (i=mb_x; i < mb_x+2; i++)
		{
		  ii=i/2;
		  if ((cbp & (1<<(ii+jj*2))) != 0) 	      /* check for any coefficients */
		    {
		      no_bits += (bits = writeMB_bits_for_4x4_luma (i, j, filtering));
		    }
		  else bits = 0;
#ifdef _RD_DEBUG_I4MODE_
		  rcdebug_set_luma_rate_4x4 (i, j, bits);
#endif
		}
	    }
	}
    }
  return no_bits;
}





int
writeMB_bits_for_4x4_luma (int i, int j, int  filtering)
{
  int           no_bits    = 0;
  Macroblock    *currMB    = &img->mb_data[img->current_mb_nr];
  SyntaxElement *currSE    = &img->MB_SyntaxElements[currMB->currSEnr];
  int           *bitCount  = currMB->bitcounter;
  Slice         *currSlice = img->currentSlice;
  DataPartition *dataPart;
  int           *partMap   = assignSE2partition[input->partition_mode];

  int kk,kbeg,kend;
  int level, run;
  int k;


  if (img->imod == INTRA_MB_OLD && img->qp < 24)	/* double scan */
    {
			      
      for(kk=0;kk<2;kk++)
	{
	  kbeg=kk*9;
	  kend=kbeg+8;
	  level=1; /* get inside loop */
				  
	  for(k=kbeg;k <= kend && level !=0; k++)
	    {
	      level = currSE->value1 = img->cof[i][j][k][0][DOUBLE_SCAN]; // level
	      run   = currSE->value2 = img->cof[i][j][k][1][DOUBLE_SCAN]; // run
				      
	      if (input->symbol_mode == UVLC)
		currSE->mapping = levrun_linfo_intra;	
	      else
		{
		  currSE->context = 0; // for choosing context model
		  currSE->writing = writeRunLevel2Buffer_CABAC;
		}
				      
	      if (k == kbeg)
		{ 
		  currSE->type  = SE_LUM_DC_INTRA; /* element is of type DC */
					  
		  /* choose the appropriate data partition */
		  if (img->type != B_IMG)
		    dataPart = &(currSlice->partArr[partMap[SE_LUM_DC_INTRA]]);
		  else
		    dataPart = &(currSlice->partArr[partMap[SE_BFRAME]]);
		}
	      else
		{
		  currSE->type  = SE_LUM_AC_INTRA;   /* element is of type AC */
					  
		  /* choose the appropriate data partition */
		  if (img->type != B_IMG)
		    dataPart = &(currSlice->partArr[partMap[SE_LUM_AC_INTRA]]);
		  else
		    dataPart = &(currSlice->partArr[partMap[SE_BFRAME]]);
		}
	      dataPart->writeSyntaxElement (currSE, dataPart);
	      bitCount[BITS_COEFF_Y_MB]+=currSE->len;
	      no_bits                  +=currSE->len;
#if TRACE
	      sprintf(currSE->tracestring, "Luma dbl(%2d,%2d)  level=%3d Run=%2d",kk,k,level,run);
#endif							
	      /* proceed to next SE */
	      currSE++;	
	      currMB->currSEnr++;
				      
	      if (level!=0 && filtering)
		{
		  loopb[img->block_x+i+1][img->block_y+j+1]=max(loopb[img->block_x+i+1][img->block_y+j+1],2);
		  loopb[img->block_x+i	][img->block_y+j+1]=max(loopb[img->block_x+i  ][img->block_y+j+1],1);
		  loopb[img->block_x+i+1][img->block_y+j  ]=max(loopb[img->block_x+i+1][img->block_y+j	],1);
		  loopb[img->block_x+i+2][img->block_y+j+1]=max(loopb[img->block_x+i+2][img->block_y+j+1],1);
		  loopb[img->block_x+i+1][img->block_y+j+2]=max(loopb[img->block_x+i+1][img->block_y+j+2],1);
		}
	    }
	}
    }
  else     /* single scan */
    {
      level=1; /* get inside loop */
      for(k=0;k<=16 && level !=0; k++)
	{
	  level = currSE->value1 = img->cof[i][j][k][0][SINGLE_SCAN]; // level
	  run   = currSE->value2 = img->cof[i][j][k][1][SINGLE_SCAN]; // run
				  
	  if (input->symbol_mode == UVLC)
	    currSE->mapping = levrun_linfo_inter;		
	  else							
	    currSE->writing = writeRunLevel2Buffer_CABAC;
				  
	  if (k == 0)
	    { 
	      if (img->imod == INTRA_MB_OLD || img->imod == INTRA_MB_NEW)
		{
		  currSE->context = 2; // for choosing context model
		  currSE->type  = SE_LUM_DC_INTRA;
		}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产一区二区精华| 亚洲精品一区二区在线观看| 久国产精品韩国三级视频| 中文字幕 久热精品 视频在线| 欧美群妇大交群中文字幕| 国产精华液一区二区三区| 天堂午夜影视日韩欧美一区二区| 欧美激情一区二区三区在线| 欧美一区二区三区播放老司机| 成人网在线播放| 美女一区二区三区在线观看| 亚洲精品乱码久久久久久| 久久久久久毛片| 日韩一级免费观看| 欧美日本一区二区在线观看| 91伊人久久大香线蕉| 国产精品夜夜嗨| 久久国产剧场电影| 热久久久久久久| 亚洲午夜激情av| 一区二区三区欧美在线观看| 欧美激情在线一区二区三区| 精品国产3级a| 精品国产乱码久久久久久1区2区| 欧美日韩日本视频| 欧美视频第二页| 在线影院国内精品| 一道本成人在线| 色综合视频在线观看| a级精品国产片在线观看| 99精品视频在线观看| 久久99国内精品| 麻豆国产精品777777在线| 日韩成人午夜电影| 日韩av一级片| 日本成人中文字幕在线视频| 亚洲va在线va天堂| 亚洲超碰97人人做人人爱| 亚洲一区在线看| 亚洲线精品一区二区三区八戒| 夜夜揉揉日日人人青青一国产精品| 日韩毛片一二三区| 国产精品久久久久久久岛一牛影视 | 欧美精品一卡二卡| 欧美在线观看你懂的| 欧美婷婷六月丁香综合色| 在线日韩av片| 欧美精品黑人性xxxx| 欧美性一级生活| 成人美女在线视频| 国产综合色在线| 老司机午夜精品99久久| 天天做天天摸天天爽国产一区 | 亚洲狠狠丁香婷婷综合久久久| 欧美日韩专区在线| 成人av资源站| 成人黄色777网| 国产精品羞羞答答xxdd| 无吗不卡中文字幕| 婷婷亚洲久悠悠色悠在线播放 | 成人免费观看av| 日本vs亚洲vs韩国一区三区二区| 亚洲蜜臀av乱码久久精品| 久久日韩粉嫩一区二区三区| 91精品国产91综合久久蜜臀| 99re在线视频这里只有精品| 成人免费福利片| 色94色欧美sute亚洲线路一ni| 99久久精品国产麻豆演员表| 色综合久久99| 成人h动漫精品| 不卡的电影网站| 成人自拍视频在线| 一本到三区不卡视频| 欧美日韩国产在线播放网站| 韩国视频一区二区| 久久精品国产99国产| 性做久久久久久免费观看 | 高清在线不卡av| 久久精品视频一区二区三区| 成人免费看片app下载| 日韩激情在线观看| 国产成人综合视频| 欧美中文字幕久久| 精品国产伦一区二区三区观看方式 | 午夜精品福利视频网站| 国产一区二区视频在线| 中文字幕一区二区三区蜜月 | 精品视频在线视频| 日韩免费观看2025年上映的电影| 久久久一区二区三区| 久久久精品影视| 亚洲图片你懂的| 国产精品123区| 欧美亚洲高清一区| 中文字幕的久久| 午夜精品久久一牛影视| 成人午夜av影视| 6080国产精品一区二区| 亚洲免费观看高清完整版在线观看 | 亚洲第一会所有码转帖| 久久不见久久见免费视频7| 91蝌蚪国产九色| 国产色综合一区| 国产一区二区导航在线播放| 日本大香伊一区二区三区| 久久品道一品道久久精品| 精品一区二区精品| 日本一区二区三区在线观看| 国精产品一区一区三区mba桃花| 国产精品99久| 欧美一区二区精品在线| 天天综合网 天天综合色| 制服丝袜av成人在线看| 欧美系列在线观看| 欧美日韩在线播| 国产一区二区免费视频| 欧美疯狂做受xxxx富婆| 夜色激情一区二区| 99国产精品久久久| 国产精品久久久久一区二区三区| 精品一区在线看| 欧美一级在线视频| 日韩精品久久理论片| 欧美三级视频在线| 一区二区三区中文字幕| 成人黄色在线看| 国产精品视频一区二区三区不卡| 日本道精品一区二区三区| 一区二区三区四区国产精品| 欧美日韩高清一区二区不卡| 日本午夜精品一区二区三区电影| 7777精品伊人久久久大香线蕉完整版 | 国产精品免费视频观看| 久久er99精品| 国产精品久久免费看| 欧洲av在线精品| 狠狠色狠狠色合久久伊人| 国产精品国产三级国产普通话蜜臀 | 亚洲一区二区三区四区在线观看| av成人动漫在线观看| 日本成人在线不卡视频| 婷婷久久综合九色国产成人| 亚洲成人一区二区在线观看| 欧美一级日韩一级| 91精品久久久久久久99蜜桃| 91丨porny丨国产| 欧美日韩一区二区在线观看视频| 在线视频你懂得一区| 色一情一伦一子一伦一区| 99精品1区2区| 成人三级伦理片| 亚洲另类中文字| 欧美日韩高清一区二区不卡 | 91精品国产综合久久久久久久| 国产精品一卡二卡| 久久久久久久精| 极品瑜伽女神91| 久久蜜桃香蕉精品一区二区三区| 蜜臂av日日欢夜夜爽一区| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 亚洲国产综合在线| 欧美一区二区在线免费观看| 美女一区二区三区| 国产三区在线成人av| 色网综合在线观看| 欧美高清dvd| 色综合咪咪久久| 91高清视频在线| 欧美日韩国产综合久久 | 欧美va日韩va| 91成人国产精品| 在线区一区二视频| 欧美一区在线视频| 国产精品网友自拍| 波波电影院一区二区三区| 日本一区二区高清| 99视频在线观看一区三区| 国产精品久久久久久久裸模| 在线免费不卡电影| 日韩一区二区三区电影在线观看 | 亚洲美女偷拍久久| 久久国产尿小便嘘嘘| 福利视频网站一区二区三区| 在线视频亚洲一区| 久久麻豆一区二区| 捆绑紧缚一区二区三区视频| 成人综合激情网| 亚洲在线视频免费观看| 91网站最新网址| 夜夜精品视频一区二区| 欧美精品久久天天躁| 日韩电影网1区2区| a在线欧美一区| 视频一区视频二区在线观看| 日韩亚洲欧美一区| 不卡一区二区在线| 亚洲午夜成aⅴ人片| 日韩一级大片在线| 国产精品亚洲成人|