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

📄 sys_tps_bfshape.cpp

📁 完整的RTP RTSP代码库
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		f_curr[i] = out_image[i];		mask_curr[i] = out_mask[i];	}   delete out_image;  delete out_mask;}//~OBSSFIX_MODE3//~OBSS_SAIT_991015Void inv_convertYuv(const CVOPU8YUVBA* pvopcSrc, PixelC* destY, PixelC* destU, PixelC* destV, Int width, Int height){    CoordI x, y;    Int Fwidth   = pvopcSrc->whereY ().width;    Int FwidthUV = pvopcSrc->whereUV ().width;    Int nSkipYPixel = Fwidth  * EXPANDY_REF_FRAME  + EXPANDY_REF_FRAME;    Int nSkipUVPixel = FwidthUV * EXPANDUV_REF_FRAME + EXPANDUV_REF_FRAME;    PixelC* ppxlcY = (PixelC*)((pvopcSrc->pixelsY ()) + nSkipYPixel );    PixelC* ppxlcU = (PixelC*)((pvopcSrc->pixelsU ()) + nSkipUVPixel );    PixelC* ppxlcV = (PixelC*)((pvopcSrc->pixelsV ()) + nSkipUVPixel );    PixelC* pdY = destY;    PixelC* pdU = destU;    PixelC* pdV = destV;    PixelC* psY;    PixelC* psU;    PixelC* psV;	  // convert    for (y = 0; y < height; y++) {      psY = ppxlcY;      for (x = 0; x < width; x++) {	*psY = *pdY;	pdY++;	psY++;      }      ppxlcY += Fwidth;    }    for (y = 0; y < height/2; y++) {      psU = ppxlcU;      for (x = 0; x < width/2; x++) {	*psU = *pdU;	pdU++;	psU++;      }      ppxlcU += FwidthUV;    }    for (y = 0; y < height/2; y++) {      psV = ppxlcV;      for (x = 0; x < width/2; x++) {	*psV = *pdV;	pdV++;	psV++;      }      ppxlcV += FwidthUV;    }/*  printf("======== width = %d, height = %d\n", width, height);  FILE *fp;  fp = fopen("bbb", "w");  fwrite(destY, sizeof (PixelC), width*height, fp);  fwrite(destU, sizeof (PixelC), width*height/4, fp);  fwrite(destV, sizeof (PixelC), width*height/4, fp);  fclose(fp);  exit(1);*/}Void convertYuv(const CVOPU8YUVBA* pvopcSrc, PixelC* destY, PixelC* destU, PixelC* destV, Int width, Int height){    CoordI x, y;    Int Fwidth   = pvopcSrc->whereY ().width;    Int FwidthUV = pvopcSrc->whereUV ().width;    Int nSkipYPixel = Fwidth  * EXPANDY_REF_FRAME  + EXPANDY_REF_FRAME;    Int nSkipUVPixel = FwidthUV * EXPANDUV_REF_FRAME + EXPANDUV_REF_FRAME;    PixelC* ppxlcY = (PixelC*)((pvopcSrc->pixelsY ()) + nSkipYPixel );    PixelC* ppxlcU = (PixelC*)((pvopcSrc->pixelsU ()) + nSkipUVPixel );    PixelC* ppxlcV = (PixelC*)((pvopcSrc->pixelsV ()) + nSkipUVPixel );    PixelC* pdY = destY;    PixelC* pdU = destU;    PixelC* pdV = destV;    PixelC* psY;    PixelC* psU;    PixelC* psV;	  // convert    for (y = 0; y < height; y++) {      psY = ppxlcY;      for (x = 0; x < width; x++) {	*pdY = *psY;	pdY++;	psY++;      }      ppxlcY += Fwidth;    }    for (y = 0; y < height/2; y++) {      psU = ppxlcU;      for (x = 0; x < width/2; x++) {	*pdU = *psU;	pdU++;	psU++;      }      ppxlcU += FwidthUV;    }    for (y = 0; y < height/2; y++) {      psV = ppxlcV;      for (x = 0; x < width/2; x++) {	*pdV = *psV;	pdV++;	psV++;      }      ppxlcV += FwidthUV;    }}Void convertSeg(const CVOPU8YUVBA* pvopcSrc, PixelC* destBY, PixelC* destBUV, Int width, Int height,		Int left, Int right, Int top, Int bottom){    CoordI x, y;    Int Fwidth  = pvopcSrc->whereY ().width;    Int sum, color = 0;    Int nSkipYPixel  = Fwidth  * EXPANDY_REF_FRAME  + EXPANDY_REF_FRAME;    PixelC* ppxlcBY  = (PixelC*)((pvopcSrc->pixelsBY ()) + nSkipYPixel );    PixelC* pdBY = destBY;    PixelC* pdBUV = destBUV;    PixelC* psBY;  // convert    for (y = 0; y < height; y++) {      psBY = ppxlcBY;      for (x = 0; x < width; x++) {	if(left <= x && x < right && top <= y && y < bottom)	  *pdBY = *psBY;	else{	  *pdBY = *psBY = 0; // set zero for out side of VOP rectangle	}	if(*pdBY>0) color = *pdBY;	pdBY++;	psBY++;      }      ppxlcBY += Fwidth;    }//    if(color == 0){//      printf("!!! No object !!!\n");//      exit(1);//    }    for (y = 0; y < height/2; y++) {      for (x = 0; x < width/2; x++) {	sum = *(destBY + 2*y*width + 2*x) + *(destBY + (2*y+1)*width + 2*x) +	      *(destBY + 2*y*width + 2*x+1) + *(destBY + (2*y+1)*width + 2*x+1);	if(sum>0)	  *pdBUV = color;	else	  *pdBUV = 0;	pdBUV++;      }    }}// modified Oct. 1 '97 (by Watanabe and Katata)/* NBIT: change unsigned char to PixelCVoid pre_pad(unsigned char *mask, unsigned char *curr, int width, int height)*/Void pre_pad(PixelC *mask, PixelC *curr, int width, int height){  int		i, j;  int		flag_cnt = 0;  int *flag_blk, *mask_blk;  double *curr_blk;  double	pad_val = 0.0;  int		ic, jc;  double *hori_blk, *vert_blk;	int *hori_flag_blk, *vert_flag_blk;    flag_blk = (int *)malloc(sizeof(int)*width*height);  mask_blk = (int *)malloc(sizeof(int)*width*height);  curr_blk = (double *)malloc(sizeof(double)*width*height); // Oct. 1 '97  hori_blk = (double *)malloc(sizeof(double)*width*height);  vert_blk = (double *)malloc(sizeof(double)*width*height);  hori_flag_blk = (int *)malloc(sizeof(int)*width*height);  vert_flag_blk = (int *)malloc(sizeof(int)*width*height);      for(j = 0; j < height; j++)		for(i = 0; i < width; i++) {		  mask_blk[j * width + i] = (mask[j * width + i] != 0);		  if(mask_blk[j * width + i])				hori_blk[j * width + i] = vert_blk[j * width + i] = curr_blk[j * width + i] = (double) curr[j * width + i];			else				hori_blk[j * width + i] = vert_blk[j * width + i] = curr_blk[j * width + i] = 0;	}    for(j = 0; j < height; j++)	for(i = 0; i < width; i++)	  flag_cnt+= (flag_blk[j * width + i] = mask_blk[j * width + i]);    if(flag_cnt == 0)  return;  	while(flag_cnt != 0) {	for(j = 0; j < height; j++)		for(i = 0; i < width; i++)			hori_flag_blk[j * width + i] = vert_flag_blk[j * width + i] = flag_blk[j * width + i];	for(j = 0; j < height; j++)		for(i = 0; i < width; i++){		  mask_blk[j * width + i] = flag_blk[j * width + i];			hori_blk[j * width + i] = vert_blk[j * width + i] = curr_blk[j * width + i];	}	for(j = 0; j < height; j++) {/* horizontal scan */		for(ic = 1; ic < width; ic++)			if(mask_blk[j * width + ic-1] - mask_blk[j * width + ic] == 1)  break;		for(i = ic; i < width; i++) {			if(mask_blk[j * width + i-1] - mask_blk[j * width + i] == 1)				pad_val = hori_blk[j * width + i-1];			if(!mask_blk[j * width + i]) {				hori_blk[j * width + i]+= pad_val;				hori_flag_blk[j * width + i]++;			}	  }	  for(ic = width-2; ic >= 0; ic--)			if(mask_blk[j * width + ic+1] - mask_blk[j * width + ic] == 1)  break;	  for(i = ic; i >= 0; i--) {			if(mask_blk[j * width + i+1] - mask_blk[j * width + i] == 1)				pad_val = hori_blk[j * width + i+1];			if(!mask_blk[j * width + i]) {				hori_blk[j * width + i]+= pad_val;				hori_flag_blk[j * width + i]++;			}	  }	}/* end of horizontal scan */	for(j = 0; j < height; j++)	  for(i = 0; i < width; i++)			if(hori_flag_blk[j * width + i] != 0) {			  hori_blk[j * width + i] = (int)(hori_blk[j * width + i]/(double) hori_flag_blk[j * width + i]); // Oct.1 '97			  hori_flag_blk[j * width + i]/= hori_flag_blk[j * width + i];			}	for(i = 0; i < width; i++) {/* vertical scan */	  for(jc = 1; jc < height; jc++)			if(mask_blk[(jc-1) * width + i] - mask_blk[jc * width + i] == 1)  break;	  for(j = jc; j < height; j++) {			if(mask_blk[(j-1) * width + i] - mask_blk[j * width + i] == 1)			  pad_val = vert_blk[(j-1) * width + i];			if(!mask_blk[j * width + i]) {				vert_blk[j * width + i]+= pad_val;				vert_flag_blk[j * width + i]++;			}	  }	  for(jc = height-2; jc >= 0; jc--)			if(mask_blk[(jc+1) * width + i] - mask_blk[jc * width + i] == 1)  break;	  for(j = jc; j >= 0; j--) {			if(mask_blk[(j+1) * width + i] - mask_blk[j * width + i] == 1)			  pad_val = vert_blk[(j+1) * width + i];			if(!mask_blk[j * width + i]) {				vert_blk[j * width + i]+= pad_val;				vert_flag_blk[j * width + i]++;			}	  }	}/* end of vertical scan */		for(j = 0; j < height; j++)	  for(i = 0; i < width; i++)		if(vert_flag_blk[j * width + i] != 0) {		  vert_blk[j * width + i] = (int)(vert_blk[j * width + i]/(double) vert_flag_blk[j * width + i]); // Oct.1 '97		  vert_flag_blk[j * width + i]/= vert_flag_blk[j * width + i];		}	for(j = 0; j < height; j++)	  for(i = 0; i < width; i++)			if(hori_flag_blk[j * width + i] == 1 && vert_flag_blk[j * width + i] == 1)				curr_blk[j * width + i] = (int)((hori_blk[j * width + i] + vert_blk[j * width + i])/2.0);			else if (hori_flag_blk[j * width + i] == 1)				curr_blk[j * width + i] = hori_blk[j * width + i];			else if (vert_flag_blk[j * width + i] == 1)				curr_blk[j * width + i] = vert_blk[j * width + i];	flag_cnt = width * height;	for(j = 0; j < height; j++)	  for(i = 0; i < width; i++)			if(hori_flag_blk[j * width + i] == 1 || vert_flag_blk[j * width + i] == 1){				flag_blk[j * width + i] = 1;			  flag_cnt--;			}  }/* end of while() */    for(j = 0; j < height; j++)	for(i = 0; i < width; i++)	  curr[j * width + i] = (unsigned char) curr_blk[j * width + i];  free(flag_blk);  free(mask_blk);  free(curr_blk);  free(hori_blk);  free(vert_blk);  free(hori_flag_blk);  free(vert_flag_blk);}

⌨️ 快捷键说明

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