⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vopses.cpp

📁 完整的RTP RTSP代码库
💻 CPP
📖 第 1 页 / 共 3 页
字号:
						tmp.right = (pvopcUpSampled->whereY ()).right;					if(!(tmp.bottom <= (pvopcUpSampled->whereY ()).bottom))						tmp.bottom = (pvopcUpSampled->whereY ()).bottom;				}//~OBSS_SAIT_FIX000524			}		}//~OBSSFIX_MODE3_02		else if(m_volmd.fAUsage == ONE_BIT) {			tmp = m_rctBase;			tmp.left = (int)((tmp.left) * (m_volmd.ihor_sampling_factor_n_shape)/(m_volmd.ihor_sampling_factor_m_shape));			tmp.right = (int)((tmp.right) * (m_volmd.ihor_sampling_factor_n_shape)/(m_volmd.ihor_sampling_factor_m_shape));			tmp.top = (int)((tmp.top) * (m_volmd.iver_sampling_factor_n_shape)/(m_volmd.iver_sampling_factor_m_shape));			tmp.bottom = (int)((tmp.bottom) * (m_volmd.iver_sampling_factor_n_shape)/(m_volmd.iver_sampling_factor_m_shape));			tmp.width = tmp.right - tmp.left ;			tmp.left -= 32; tmp.right += 32;			tmp.top -= 32; tmp.bottom += 32;			tmp.width += 64;//OBSS_SAIT_FIX000524			if(!( tmp <= pvopcUpSampled->whereY () )) {				if(!(tmp.left >= (pvopcUpSampled->whereY ()).left))					tmp.left = (pvopcUpSampled->whereY ()).left;				if(!(tmp.top >= (pvopcUpSampled->whereY ()).top))					tmp.top = (pvopcUpSampled->whereY ()).top;				if(!(tmp.right <= (pvopcUpSampled->whereY ()).right))					tmp.right = (pvopcUpSampled->whereY ()).right;				if(!(tmp.bottom <= (pvopcUpSampled->whereY ()).bottom))					tmp.bottom = (pvopcUpSampled->whereY ()).bottom;			}//~OBSS_SAIT_FIX000524		}//~OBSS_SAIT_991015		m_rctRefVOPY0 = m_rctRefVOPY1;		m_rctRefVOPY1 = tmp;		swapVOPU8Pointers (m_pvopcRefQ0,m_pvopcRefQ1);		swapVOPU8Pointers (m_pvopcRefQ1,pvopcUpSampled);		m_pvopcRefQ0->setBoundRct(m_rctRefVOPY0);		m_pvopcRefQ1->setBoundRct(m_rctRefVOPY1);		delete pvopcUpSampled;	}}Void CVideoObject::swapVOPU8Pointers (CVOPU8YUVBA*& pvopc0, CVOPU8YUVBA*& pvopc1){	CVOPU8YUVBA* pvopcTmp = pvopc0;	pvopc0 = pvopc1;	pvopc1 = pvopcTmp;}Void CVideoObject::swapVOPIntPointers (CVOPIntYUVBA*& pvopi0, CVOPIntYUVBA*& pvopi1){	CVOPIntYUVBA* pvopiTmp = pvopi0;	pvopi0 = pvopi1;	pvopi1 = pvopiTmp;}Void CVideoObject::setRefStartingPointers (){	m_iStartInRefToCurrRctY = m_rctRefFrameY.offset (m_rctCurrVOPY.left, m_rctCurrVOPY.top);	m_iStartInRefToCurrRctUV = m_rctRefFrameUV.offset (m_rctCurrVOPUV.left, m_rctCurrVOPUV.top);}const CVOPU8YUVBA* CVideoObject::pvopcReconCurr () const{	if ((m_uiSprite == 1 && m_vopmd.vopPredType == SPRITE) && m_iNumOfPnts > 0) // GMC		return m_pvopcCurrQ;	else if ((m_uiSprite == 1 && m_vopmd.vopPredType == SPRITE) && m_iNumOfPnts == 0) { // GMC		if (m_sptMode != BASIC_SPRITE) 			return m_pvopcSptQ;		else 			return m_pvopcRefQ1;	}	else if ((m_vopmd.vopPredType == BVOP && m_volmd.volType == BASE_LAYER) 			 ||(m_vopmd.vopPredType == BVOP && m_vopmd.iRefSelectCode != 0))		return m_pvopcCurrQ;	else		return m_pvopcRefQ1;}////////// 97/12/22 startVoid CVideoObject::compute_bfShapeMembers (){	m_iVOPWidthY = m_rctCurrVOPY.width;	m_iVOPWidthUV = m_rctCurrVOPUV.width;	m_iNumMBX = m_iVOPWidthY / MB_SIZE; 	m_iNumMBY = m_rctCurrVOPY.height () / MB_SIZE;	m_iNumMB = m_iNumMBX * m_iNumMBY;//	m_iNumOfTotalMVPerRow = 5 * m_iNumMBX;//  wchen: changed to const as discussed with Bob.	m_iNumOfTotalMVPerRow = PVOP_MV_PER_REF_PER_MB * m_iNumMBX;}Void CVideoObject::copyVOPU8YUVBA(CVOPU8YUVBA*& pvopc0, CVOPU8YUVBA*& pvopc1){	delete pvopc0;  pvopc0 = NULL;	pvopc0 = new CVOPU8YUVBA (*pvopc1);	/* i.e. pvopc0 = pvopc1; */}Void CVideoObject::copyVOPU8YUVBA(CVOPU8YUVBA*& pvopc0, CVOPU8YUVBA*& pvopc1, CVOPU8YUVBA*& pvopc2){	delete pvopc0;  pvopc0 = NULL;	pvopc0 = (pvopc1 != NULL) ?		new CVOPU8YUVBA (*pvopc1) : new CVOPU8YUVBA (*pvopc2);}///// 97/12/22 end// QuarterSampleVoid CVideoObject::blkInterpolateY (	                 const PixelC* ppxlcRefLeftTop,                      // point to left-top of the frame					 Int blkSize, // Blocksize (0=16x8, 8=8x8, 16=16x16)					 Int xRef, Int yRef, // x + mvX in quarter pel unit					 U8* ppxlcblk, // Pointer to quarter sample interpolated block                     Int iRoundingControl					 ) {  Int maxVal = (1<<m_volmd.nBits)-1; // mwi  Int c[]={160, -48, 24, -8}; // Filter Coefficients  U8 refblk[MB_SIZE+7][MB_SIZE+7];  U8 tmpblk0[MB_SIZE+7][MB_SIZE+7];    U8 tmpblk1[MB_SIZE+1][MB_SIZE+1];  Int x_int, y_int, x_frac, y_frac;  Int blkSizeX, blkSizeY, iWidthY;    Int ix, iy, k;  Long u;  Int yTmp = yRef>>1;  // Field MV!  if (blkSize == 0) {    blkSizeX = 16;    blkSizeY = 8;    iWidthY  = 2*m_iFrameWidthY;        y_int  = yTmp/4;    if (yTmp < 0)      if (yTmp%4) y_int--;    y_frac = yTmp - (4*y_int);  }  else {    blkSizeX = blkSize;    blkSizeY = blkSize;    iWidthY  = m_iFrameWidthY;    y_int  = yRef/4;    if (yRef < 0)      if (yRef%4) y_int--;    y_frac = yRef - (4*y_int);  }  x_int  = xRef/4;  if (xRef < 0)    if (xRef%4) x_int--;  x_frac = xRef - (4*x_int);      // Initialization  const PixelC* ppxlcRef = ppxlcRefLeftTop + y_int * iWidthY + EXPANDY_REF_FRAME    * m_iFrameWidthY + x_int + EXPANDY_REF_FRAME;  for (iy=0; iy <= blkSizeY; iy++) {    for (ix=0; ix <= blkSizeX; ix++) {      refblk[iy+3][ix+3] = ppxlcRef[ix+iy*iWidthY];    }  }     // Horizontal Mirroring   for (iy=0; iy <= blkSizeY; iy++) {	 for (ix=0; ix <= 2; ix++) {	   refblk[iy+3][ix] = refblk[iy+3][5-ix];	   refblk[iy+3][blkSizeX+ix+4] = refblk[iy+3][blkSizeX-ix+3];	 }   }      switch (x_frac) {	      case 0 : // Full Pel Position       for (iy=0; iy <= blkSizeY; iy++) {	     for (ix=0; ix <= blkSizeX-1; ix++) {		   tmpblk0[iy+3][ix] = refblk[iy+3][ix+3];	     }	   }	 break;	      case 1 : // Quarter Pel Position       for (iy=0; iy <= blkSizeY; iy++) {	     for (ix=0; ix <= blkSizeX-1; ix++) {           u = 0;		   for (k=0; k<=3; k++) {			 u += c[k] * ( refblk[iy+3][ix+3-k] + refblk[iy+3][ix+4+k] );		   }		   u = (u+128-iRoundingControl)/256;		   u = max(0,min(maxVal,u));		   tmpblk1[iy][ix] = (U8)u; 	     }	   }       for (iy=0; iy <= blkSizeY; iy++) {		 for (ix=0; ix <= blkSizeX-1; ix++) {		   tmpblk0[iy+3][ix] = ( refblk[iy+3][ix+3] + tmpblk1[iy][ix] + 1 - iRoundingControl)/2;		 }	   }     break;	        case 2 : // Half Pel Position       for (iy=0; iy <= blkSizeY; iy++) {	     for (ix=0; ix <= blkSizeX-1; ix++) {           u = 0;		   for (k=0; k<=3; k++) {			 u += c[k] * ( refblk[iy+3][ix+3-k] + refblk[iy+3][ix+4+k] );		   }		   u = (u+128-iRoundingControl)/256;		   u = max(0,min(maxVal,u));// GMC_V3		   tmpblk0[iy+3][ix] = (U8)u; //		   tmpblk1[iy][ix] = (U8)u; // ~GMC_V3	     }	   }	 break;	        case 3 : // Quarter Pel Position       for (iy=0; iy <= blkSizeY; iy++) {	     for (ix=0; ix <= blkSizeX-1; ix++) {           u = 0;		   for (k=0; k<=3; k++) {			 u += c[k] * ( refblk[iy+3][ix+3-k] + refblk[iy+3][ix+4+k] );		   }		   u = (u+128-iRoundingControl)/256;		   u = max(0,min(maxVal,u));		   tmpblk1[iy][ix] = (U8)u; 	     }	   }       for (iy=0; iy <= blkSizeY; iy++) {		 for (ix=0; ix <= blkSizeX-1; ix++) {		   tmpblk0[iy+3][ix] = ( refblk[iy+3][ix+4] + tmpblk1[iy][ix] + 1 - iRoundingControl)/2;		 }	   }     break;	    }   // Copy tmpblk0 -> refblk   for (iy=0; iy <= blkSizeY; iy++) {	 for (ix=0; ix <= blkSizeX-1; ix++) {	   refblk[iy+3][ix] = tmpblk0[iy+3][ix];	 }   }      // Vertical Mirroring   for (iy=0; iy <= 2; iy++) {	 for (ix=0; ix <= blkSizeX-1; ix++) {	   refblk[iy][ix] = refblk[5-iy][ix];	   refblk[blkSizeY+iy+4][ix] = refblk[blkSizeY-iy+3][ix];	 }   }      switch (y_frac) {	      case 0 : // Full Pel Position       for (iy=0; iy <= blkSizeY-1; iy++) {	     for (ix=0; ix <= blkSizeX-1; ix++) {		   tmpblk0[iy][ix] = refblk[iy+3][ix];	     }	   }	 break;	      case 1 : // Quarter Pel Position       for (iy=0; iy <= blkSizeY-1; iy++) {	     for (ix=0; ix <= blkSizeX-1; ix++) {		              u = 0;		   for (k=0; k<=3; k++) {			 u += c[k] * ( refblk[iy+3-k][ix] + refblk[iy+4+k][ix] );		   }		   u = (u+128-iRoundingControl)/256;		   u = max(0,min(maxVal,u));		   tmpblk1[iy][ix] = (U8)u; 	     }	   }       for (iy=0; iy <= blkSizeY-1; iy++) {		 for (ix=0; ix <= blkSizeX-1; ix++) {		   tmpblk0[iy][ix] = ( refblk[iy+3][ix] + tmpblk1[iy][ix] + 1 - iRoundingControl)/2;		 }	   }     break;	        case 2 : // Half Pel Position       for (iy=0; iy <= blkSizeY-1; iy++) {	     for (ix=0; ix <= blkSizeX-1; ix++) {           u = 0;		   for (k=0; k<=3; k++) {			 u += c[k] * ( refblk[iy+3-k][ix] + refblk[iy+4+k][ix] );		   }		   u = (u+128-iRoundingControl)/256;		   u = max(0,min(maxVal,u));// GMC_V3		   tmpblk0[iy][ix] = (U8)u; //		   tmpblk1[iy][ix] = (U8)u; // ~GMC_V3	     }	   }	 break;	        case 3 : // Quarter Pel Position       for (iy=0; iy <= blkSizeY-1; iy++) {	     for (ix=0; ix <= blkSizeX-1; ix++) {           u = 0;		   for (k=0; k<=3; k++) {			 u += c[k] * ( refblk[iy+3-k][ix] + refblk[iy+4+k][ix] );		   }		   u = (u+128-iRoundingControl)/256;		   u = max(0,min(maxVal,u));		   tmpblk1[iy][ix] = (U8)u; 	     }	   }       for (iy=0; iy <= blkSizeY-1; iy++) {		 for (ix=0; ix <= blkSizeX-1; ix++) {		   tmpblk0[iy][ix] = ( refblk[iy+4][ix] + tmpblk1[iy][ix] + 1 - iRoundingControl)/2;		 }	   }     break;	    }   // Copy tmpblk0 -> ppxlcblk   if (blkSize == 0) {     for (iy=0; iy <= blkSizeY-1; iy++) {       for (ix=0; ix <= blkSizeX-1; ix++) {	     *(ppxlcblk+ix+iy*2*blkSizeX) = tmpblk0[iy][ix];	   }     }   }   else {     for (iy=0; iy <= blkSizeY-1; iy++) {       for (ix=0; ix <= blkSizeX-1; ix++) {	     *(ppxlcblk+ix+iy*blkSizeX) = tmpblk0[iy][ix];	   }     }   }}// ~QuarterSampleVoid dumpNonCodedFrame(FILE* pfYUV, FILE* pfSeg, FILE **ppfAux, Int iAuxCompCount, CRct& rct, UInt nBits){	// black frame	Int iW = rct.width;	Int iH = rct.height();	Int i;	PixelC *ppxlcPix = new PixelC [iW];	pxlcmemset(ppxlcPix, 0, iW);	for(i=0; i<iH; i++) // Y		fwrite(ppxlcPix, sizeof(PixelC), iW, pfYUV);	if(pfSeg!=NULL)	{		for(i=0; i<iH; i++) // A			fwrite(ppxlcPix, sizeof(PixelC), iW, pfSeg);	}	if(ppfAux!=NULL)	{		Int iAux;		for(iAux=0; iAux<iAuxCompCount; iAux++)			if(ppfAux[iAux]!=NULL)			{				for(i=0; i<iH; i++)					fwrite(ppxlcPix, sizeof(PixelC), iW, ppfAux[iAux]);			}	}	PixelC pxlcValUV = 1<<(nBits-1);	pxlcmemset(ppxlcPix, pxlcValUV, iW>>1);	for(i=0; i<iH; i++) // UV		fwrite(ppxlcPix, sizeof(PixelC), iW>>1, pfYUV);	delete ppxlcPix;}Int CVideoObject::getAuxCompCount(Int vol_shape_extension){  switch (vol_shape_extension) {  /* see N2687, pg. 178, tab. V2-1 */    case -1:	return 1;    case 0:  return 1;    case 1:  return 1;    case 2:  return 2;    case 3:  return 2;          case 4:  return 3;    case 5:  return 1;    case 6:  return 2;    case 7:  return 1;    case 8:  return 1;    case 9:  return 2;    case 10: return 3;    case 11: return 2;    case 12: return 3;    default: return 1;  }  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -