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

📄 shapeenhdecode.cpp

📁 《Visual C++小波变换技术与工程实践》靳济芳编著的光盘程序。
💻 CPP
📖 第 1 页 / 共 2 页
字号:

		ExclusiveORdecoding (bordered_lower_bab,
				     bordered_half_bab,
				     bordered_curr_bab,
				     mbsize,
					 scan_order, // SAIT_PDAM: ADDED by D.-S.Cho (Samsung AIT)
				     ar_decoder);
        
	} else if (bab_type==1){        /* Raster Scan-Line (RSL) coding */
		FullDecoding (bordered_lower_bab,
			      bordered_half_bab,
			      bordered_curr_bab,
			      mbsize,
			      filter,
			      ar_decoder);
        
	} else {
		fprintf(stderr,"BAB type ERROR !\n");
	}
		

	return ( 0 );
}

/* Interleaved Scan-Line (ISL) Decoding */
Void CVTCDecoder::
ExclusiveORdecoding (UChar *bordered_lower_bab,
			UChar *bordered_half_bab,
			UChar *bordered_curr_bab,
			Int mbsize,
			Int scan_order,	// SAIT_PDAM: ADDED by D.-S.Cho (Samsung AIT)
			ArDecoder *ar_decoder)
{
	Int		i,j,i2,j2,k,l,prev,next;

	Int		mborder = MBORDER;
	Int		mbsize_ext = mbsize+(mborder<<1);
	Int		border = BORDER;
	Int		bsize = mbsize >> 1;
	Int		bsize_ext = bsize+(border<<1);

	Int		context, prob=0;

	UChar		*lower_bab_data,*half_bab_data,
			*curr_bab_data;
	UChar	*bordered_curr_bab_tr;	// SAIT_PDAM: ADDED by D.-S.Cho (Samsung AIT)

	lower_bab_data = bordered_lower_bab + border * bsize_ext + border;
	half_bab_data= bordered_half_bab + mborder * bsize_ext + border;
	curr_bab_data= bordered_curr_bab + mborder * mbsize_ext + mborder;

	/*-- P0 pixels reconstructing --*/
        for(j=j2=0,k=l=0; j<bsize; j++, j2+=2, k+=(mbsize_ext<<1), l+=bsize_ext)
	   for(i=i2=0; i<bsize; i++, i2+=2)
		curr_bab_data[k+i2]=lower_bab_data[l+i];

	/* SAIT_PDAM BEGIN - ADDED by D.-S.Cho (Samsung AIT)  */ 
	// current BAB transposition
	if (scan_order==1) {
		bordered_curr_bab_tr = (UChar *)calloc(mbsize_ext*mbsize_ext, sizeof(UChar));
		for (j=0; j<mbsize_ext; j++)
			for (i=0; i<mbsize_ext; i++)
					bordered_curr_bab_tr[j*mbsize_ext+i] = bordered_curr_bab[i*mbsize_ext+j];
		curr_bab_data=bordered_curr_bab_tr + mborder * mbsize_ext + mborder;
	}
	/* SAIT_PDAM END - ADDED by D.-S.Cho (Samsung AIT)  */ 

	/*-- P1 pixels decoding --*/
	/* SAIT_PDAM BEGIN - MODIFIED by D.-S.Cho (Samsung AIT)  */ 
	//for(j2=k=0; j2<mbsize; j2+=2, k+=(mbsize_ext<<1) )
    //    {
	//   for(i2=1; i2<mbsize; i2+=2)
	//   {
	for(i2=1; i2<mbsize; i2+=2)
	{
		for(j2=k=0; j2<mbsize; j2+=2, k+=(mbsize_ext<<1) )
        {
	/* SAIT_PDAM END - MODIFIED by D.-S.Cho (Samsung AIT) */ 
		prev= curr_bab_data[k+i2-1];
		next= curr_bab_data[k+i2+1];
                       
		if(prev!=next) 
		{
		   context = GetContextEnhBAB_XOR(curr_bab_data,
						i2, 
						j2, 
						mbsize_ext, 
						0); /* pixel type : 0-P1, 1-P2/P3 */

		   prob=scalable_xor_prob_1[context];
		   curr_bab_data[k+i2] = ArDecodeSymbol_Still(ar_decoder, prob);

		} 
		else 
		{
		   curr_bab_data[k+i2] = prev;
		}
	   }
	}

	/*-- P2/P3 pixels decoding --*/
        for(j2=1,k=mbsize_ext; j2<mbsize; j2+=2, k+=(mbsize_ext<<1) )
        {
	for(i2=0; i2<mbsize; i2++) 
	{ 
		prev= curr_bab_data[k-mbsize_ext+i2];
		next= curr_bab_data[k+mbsize_ext+i2];
		   
		if(prev!=next) 
		{
		   context = GetContextEnhBAB_XOR(curr_bab_data,
						i2, 
						j2, 
						mbsize_ext, 
						1);	/* pixel type : 0-P1, 1-P2/P3 */
		   	
		   prob=scalable_xor_prob_23[context];
		   curr_bab_data[k+i2] = ArDecodeSymbol_Still(ar_decoder, prob);

		} 
		else 
		{
		   curr_bab_data[k+i2] = prev;
		}
	   }
	}

	/* SAIT_PDAM BEGIN - ADDED by D.-S.Cho (Samsung AIT)  */ 
	if (scan_order == 1) {
		for (j=0; j<mbsize_ext; j++)
			for (i=0; i<mbsize_ext; i++)
					bordered_curr_bab[j*mbsize_ext+i]=bordered_curr_bab_tr[i*mbsize_ext+j];
		curr_bab_data = bordered_curr_bab + mborder*mbsize_ext + mborder;
		free (bordered_curr_bab_tr);
	}
	/* SAIT_PDAM END - ADDED by D.-S.Cho (Samsung AIT)  */ 

	/* get the half resolution needed */
	for(j2=0,k=0; j2<mbsize; j2++, k+=mbsize_ext )
        {
	  for(i=0; i<bsize; i++) 
	    {
	      i2 = i<<1; /* horizontal subsampling */
	      half_bab_data[j2*bsize_ext+i] = curr_bab_data[k+i2];
	    }
	}

}

/* Raster Scan-Line (RSL) Decoding */
Void CVTCDecoder::
FullDecoding (UChar *bordered_lower_bab,
		   UChar *bordered_half_bab,
		   UChar *bordered_curr_bab,
		   Int mbsize,
		   FILTER *filter,
		   ArDecoder *ar_decoder)
{
	Int		i,j,i2,j2,k,l;

	Int		mborder = MBORDER;
	Int		mbsize_ext = mbsize+(mborder<<1);
	Int		border = BORDER;
	Int		bsize = mbsize >> 1;
	Int		bsize_ext = bsize+(border<<1);
	//Int		low_value, not_coded;
	Int		context, prob=0;
	UChar		*lower_bab_data,*half_bab_data,
			*curr_bab_data;

	lower_bab_data = bordered_lower_bab + border * bsize_ext + border;
	half_bab_data= bordered_half_bab + mborder * bsize_ext + border;
	curr_bab_data= bordered_curr_bab + mborder * mbsize_ext + mborder;
	/* vertical pass */
	/* vertical pass first for half-higher layer encoding*/
/* Should insert the precise bordering process ! */
	for(j2=k=0; j2<mbsize; j2+=2, k+=2*bsize_ext)
	{
	   for(i=0; i<bsize; i++)
	   {
	     j = j2>>1;
	     l = j*bsize_ext;
	     /* T1 */

	     context =  (half_bab_data[k-bsize_ext+i]<<7) /* T9*/
	       | ( half_bab_data[k-bsize_ext+i+1] <<6) /* T8 */
	       | (half_bab_data[k+bsize_ext+i-1] <<5) /* T7 */
	       | (half_bab_data[k+i-1] <<4) /* T6 */
	       | (lower_bab_data[l+i] <<3) /* T5 */
	       | (lower_bab_data[l+i+1] <<2) /* T4 */
	       | (lower_bab_data[l+bsize_ext+i] <<1) /* T3 */
	       | (lower_bab_data[l+bsize_ext+i+1]); /* T2 */

	     if(filter->DWT_Class==DWT_ODD_SYMMETRIC){
	       prob=prob_odd0[context];
	     } else if(filter->DWT_Class==DWT_EVEN_SYMMETRIC) {
	       prob=prob_even0[context];
	     } else {
	       fprintf(stderr,"Error: filter type in FullEncoding() !\n");
	       exit(0);
	     }
	     half_bab_data[k+i] =  ArDecodeSymbol_Still(ar_decoder, prob);

	       /* T0 */
	     context =  (half_bab_data[k+i]<<7) /* T1*/
	       | ( lower_bab_data[l+bsize_ext+i-1] <<6) /* T10 */
	       | (half_bab_data[k+bsize_ext+i-1] <<5) /* T7 */
	       | (half_bab_data[k+i-1] <<4) /* T6 */
	       | (lower_bab_data[l+i] <<3) /* T5 */
	       | (lower_bab_data[l+i+1] <<2) /* T4 */
	       | (lower_bab_data[l+bsize_ext+i] <<1) /* T3 */
	       | (lower_bab_data[l+bsize_ext+i+1]); /* T2 */

	     if(filter->DWT_Class==DWT_ODD_SYMMETRIC){
	       prob=prob_odd1[context];
	     } else if(filter->DWT_Class==DWT_EVEN_SYMMETRIC) {
	       prob=prob_even1[context];
	     } else {
	       fprintf(stderr,"Error: filter type in FullEncoding() !\n");
	       exit(0);
	     }
	     
	     half_bab_data[k+bsize_ext+i]=ArDecodeSymbol_Still(ar_decoder, prob);
	   }
	}

	/* horizontal */
	for(i2=0; i2<mbsize; i2+=2)
	  {
	    for(j=k=0; j<mbsize; j++, k+=mbsize_ext)
	      {
	   
		i = i2>>1;
		l = j*bsize_ext;
		/* T1 */
		context =  (curr_bab_data[k+i2-1]<<7) /* T9*/
		  | ( curr_bab_data[k+mbsize_ext+i2-1] <<6) /* T8 */
		  | (curr_bab_data[k-mbsize_ext+i2+1] <<5) /* T7 */
		  | (curr_bab_data[k-mbsize_ext+i2] <<4) /* T6 */
		  | (half_bab_data[l+i] <<3) /* T5 */
		  | (half_bab_data[l+bsize_ext+i] <<2) /* T4 */
		  | (half_bab_data[l+i+1] <<1) /* T3 */
		  | (half_bab_data[l+bsize_ext+i+1]); /* T2 */

		if(filter->DWT_Class==DWT_ODD_SYMMETRIC){
		  prob=prob_odd0[context];
		} else if(filter->DWT_Class==DWT_EVEN_SYMMETRIC) {
		  prob=prob_even0[context];
		} else {
		  fprintf(stderr,"Error: filter type in FullEncoding() !\n");
		  exit(0);
		}
		curr_bab_data[k+i2]=ArDecodeSymbol_Still(ar_decoder, prob);

		/* T0 */
		context =  (curr_bab_data[k+i2]<<7) /* T1*/
		  | ( half_bab_data[l-bsize_ext+i+1] <<6) /* T10 */
		  | (curr_bab_data[k-mbsize_ext+i2+1] <<5) /* T7 */
		  | (curr_bab_data[k-mbsize_ext+i2] <<4) /* T6 */
		  | (half_bab_data[l+i] <<3) /* T5 */
		  | (half_bab_data[l+bsize_ext+i] <<2) /* T4 */
		  | (half_bab_data[l+i+1] <<1) /* T3 */
		  | (half_bab_data[l+bsize_ext+i+1]); /* T2 */

		if(filter->DWT_Class==DWT_ODD_SYMMETRIC){
		  prob=prob_odd1[context];
		} else if(filter->DWT_Class==DWT_EVEN_SYMMETRIC) {
		  prob=prob_even1[context];
		} else {
		  fprintf(stderr,"Error: filter type in FullEncoding() !\n");
		  exit(0);
		}
		curr_bab_data[k+i2+1]=ArDecodeSymbol_Still(ar_decoder, prob);
	      }
	  }
}

⌨️ 快捷键说明

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