shapeenhdecode.cpp

来自「完整的RTP RTSP代码库」· C++ 代码 · 共 815 行 · 第 1/3 页

CPP
815
字号
65537, 65537, 65537, 65537, 65537, 65537, 65537, 65537,45333, 28672, 21363, 26870, 41125, 9455, 25752, 12372,65537, 65537, 65537, 65537, 65537, 65537, 65537, 65537,46324, 37071, 4994, 5136, 18879, 28687, 9330, 366,65537, 65537, 65537, 65537, 65537, 65537, 65537, 65537,31745, 26116, 346, 397, 2900, 13830, 361, 8};static UInt prob_even0[256]={65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536,25542, 38525, 48333, 53517, 26541, 23214, 61559, 59853,65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536,7151, 31006, 33480, 29879, 2609, 4142, 16384, 11884,65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536,44817, 65535, 56097, 64984, 40735, 47710, 43386, 52046,65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536,17545, 29626, 37308, 42263, 4196, 13552, 7199, 7230,65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536,1, 1, 1, 39322, 13578, 17416, 29218, 31831,65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536,1311, 65535, 32768, 7282, 1, 3048, 25206, 19935,65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536,1, 32768, 17873, 61861, 3417, 14895, 4541, 5293,65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536,4819, 32768, 39950, 43523, 1148, 4021, 12072, 5436,65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536,1, 1, 134, 1, 1, 55, 5461, 2849,65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536,24, 5243, 590, 1079, 86, 95, 14564, 7159,65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536,328, 1, 2564, 14919, 21845, 1, 9362, 15880,65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536,43, 362, 150, 1179, 752, 529, 683, 331,65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536,1, 1, 700, 862, 25, 24, 1317, 558,65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536,1, 1, 1, 172, 2, 4, 793, 342,65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536,572, 1, 1928, 43080, 3337, 1680, 1401, 2131,65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536,18, 1, 366, 7456, 8, 18, 40, 8};static UInt prob_even1[256]={65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536,0, 0, 0, 0, 0, 0, 0, 0,65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536,0, 0, 0, 0, 0, 0, 0, 0,65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536,0, 0, 0, 0, 0, 0, 0, 0,65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536,0, 0, 0, 0, 0, 0, 0, 0,65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536,0, 0, 0, 0, 0, 0, 0, 0,65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536,0, 0, 0, 0, 0, 0, 0, 0,65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536,0, 0, 0, 0, 0, 0, 0, 0,65536, 65536, 65536, 65536, 65536, 65536, 65536, 65536,0, 0, 0, 0, 0, 0, 0, 0,65537, 65537, 65537, 65537, 65537, 65537, 65537, 65537,54018, 8704, 1, 903, 61648, 31196, 327, 575,65537, 65537, 65537, 65537, 65537, 65537, 65537, 65537,64400, 36956, 1673, 9758, 52289, 4361, 659, 1433,65537, 65537, 65537, 65537, 65537, 65537, 65537, 65537,56482, 65535, 1, 1, 11905, 3034, 1, 1,65537, 65537, 65537, 65537, 65537, 65537, 65537, 65537,61103, 56650, 925, 8814, 11845, 2075, 828, 223,65537, 65537, 65537, 65537, 65537, 65537, 65537, 65537,4161, 1, 494, 5041, 52508, 32195, 11005, 2463,65537, 65537, 65537, 65537, 65537, 65537, 65537, 65537,63286, 32768, 39133, 49486, 53351, 8541, 37603, 15011,65537, 65537, 65537, 65537, 65537, 65537, 65537, 65537,18805, 13107, 1039, 1214, 5060, 21845, 3830, 387,65537, 65537, 65537, 65537, 65537, 65537, 65537, 65537,31654, 32951, 490, 1496, 2535, 11699, 328, 13};#define Error -1/***********************************************************HeaderBegin******* * * File:        sisc_decode.c * * Author:      Samsung AIT (SAIT) * Created:     23-Apr-98 * * Description: Scalable shape coder using scan interleaving (sisc fac version) * * Copyright (C) 1996 Samsung AIT All Rights Reserved.                 * ***********************************************************HeaderEnd*********/Int CVTCDecoder::ShapeEnhDeCoding(UChar *LowShape,		/* in: shape mask in the lower layer */                        UChar *HalfShape,	/* out: shape mask in the current layer */                        UChar *CurShape,	/* out: shape mask in the current layer */                        Int object_width,                        Int object_height,			FILTER *filter){    Int i, j, k, l, p, q, x, y, x2, y2;    Int bab_type, ret;    Int width2		= object_width,	height2		= object_height,	width		= width2 >> 1,	height		= height2 >> 1;    Int NB = (object_width >= 1024 || object_height >=1024)? 6:      (object_width >=512|| object_height >=512)?5:4;    Int mborder		= MBORDER,    	mblks           = NB,	mbsize          = 1<<mblks,		/* bab size in the current layer : 16 */	mbsize_ext      = mbsize+(mborder<<1);  /* bordered bab size in the current layer: 20 */     Int border		= BORDER,    	blks            = mblks-1,	bsize           = 1<<blks,		/* bab size in the lower layer : 8 */	bsize_ext       = bsize+(border<<1);	/* bordered bab size in the lower layer: 8 */     Int blkx            = (object_width+mbsize-1)/mbsize,	blky            = (object_height+mbsize-1)/mbsize;    UInt prob;    UChar *lower_bab;			/* alpha block in the lower layer */    UChar *bordered_lower_bab;		/* bordered alpha block in the lower layer */     UChar *half_bab;			/* alpha mb in the current layer */    UChar *bordered_half_bab;		/* bordered alpha mb in the current layer */     UChar *curr_bab;			/* alpha mb in the current layer */    UChar *bordered_curr_bab;		/* bordered alpha mb in the current layer */    ArDecoder	ar_decoder;    /*-- Memory allocation ---------------------------------------------------------*/    lower_bab = (UChar *) calloc(bsize*bsize, sizeof(UChar));    bordered_lower_bab = (UChar *) calloc(bsize_ext*bsize_ext, sizeof(UChar));    half_bab = (UChar *) calloc(mbsize*bsize, sizeof(UChar));    bordered_half_bab = (UChar *) calloc(mbsize_ext*bsize_ext, sizeof(UChar));    curr_bab = (UChar *) calloc(mbsize*mbsize, sizeof(UChar));    bordered_curr_bab = (UChar *) calloc(mbsize_ext*mbsize_ext, sizeof(UChar));    /*-- Decode the Enhancement Layer ------------------------------------------------*/    StartArDecoder_Still(&ar_decoder);    for ( j=y=y2=0; j<blky; j++, y+=bsize, y2+=mbsize )     {      for ( i=x=x2=0; i<blkx; i++, x+=bsize, x2+=mbsize )       {        /*-- Initialize BABs --*/	q = y*width;	for ( l=p=0; l<bsize; l++, q+=width ) 	{          for ( k=0; k<bsize; k++, p++ ) 	  {	      if(  y+l < height && x+k < width )		lower_bab[p] = (LowShape[ q+x+k ] != 0);	      else		lower_bab[p] = 0;          }	}		q = y2*width;	for ( l=p=0; l<mbsize; l++, q+=width )           for ( k=0; k<bsize; k++, p++ ) 		    half_bab[p]=0;	q = y2*width2;	for ( l=p=0; l<mbsize; l++, q+=width2 )           for ( k=0; k<mbsize; k++, p++ ) 			curr_bab[p]=0;	/*-- Get BAB coding mode -- */	if(filter->DWT_Class==DWT_ODD_SYMMETRIC){	  prob=scalable_bab_type_prob[0];	} else if(filter->DWT_Class==DWT_EVEN_SYMMETRIC) {	  prob=scalable_bab_type_prob[1];	} else {	  fprintf(stderr,"Error: filter type in ShapeEnhHeaderDecode()!\n");	  exit(0);	}	bab_type = ArDecodeSymbol_Still(&ar_decoder, prob);        /* Add surrounding pixels for Modified SISC. */	AddBorderToBABs(LowShape, HalfShape, CurShape,			lower_bab, half_bab, curr_bab,			bordered_lower_bab, bordered_half_bab,			bordered_curr_bab,			object_width, object_height,			i, j, mbsize, blkx);	/* Decode mask pixel values in the current layer */	ret = ShapeEnhContentDecode(bordered_lower_bab, 				bordered_half_bab, 				bordered_curr_bab, 				bab_type, 				mbsize, 					filter,				&ar_decoder);	if (ret == Error)        {          fprintf(stderr,"\n SI arithmetic coding Error !\n");          return  Error;        }	q = mborder*mbsize_ext;	for ( l=p=0; l<mbsize; l++, q+=mbsize_ext )           for ( k=0; k<mbsize; k++, p++ ) 	      	curr_bab[p]=bordered_curr_bab[q+k+mborder];	q = mborder*bsize_ext;	for ( l=p=0; l<mbsize; l++, q+=bsize_ext )           for ( k=0; k<bsize; k++, p++ ) 	      	half_bab[p]=bordered_half_bab[q+k+border];        /*-- Put BABs to HalfShape--*/	q = y2*width;	for ( l=p=0; l<mbsize; l++, q+=width )           for ( k=0; k<bsize; k++, p++ ) 	    if(  y2+l < height2 && x+k < width )	      HalfShape[ q+x+k ] = half_bab[p];      	/*-- Put BABs to CurShape--*/	q = y2*width2;	for ( l=p=0; l<mbsize; l++, q+=width2 ) 	  for ( k=0; k<mbsize; k++, p++ ) 	    if(  y2+l < height2 && x2+k < width2 )	      CurShape[ q+x2+k ] = curr_bab[p];            }    }    StopArDecoder_Still (&ar_decoder);    /*-- Memory free ---------------------------------------------------------*/    free(lower_bab);    free(bordered_lower_bab);    free(half_bab);    free(bordered_half_bab);    free(curr_bab);    free(bordered_curr_bab);    return ( 0 );}/* Modified by shson */Int CVTCDecoder::ShapeEnhContentDecode(UChar *bordered_lower_bab, 			UChar *bordered_half_bab, 			UChar *bordered_curr_bab, 			Int bab_type, 			Int mbsize,		      FILTER *filter,			ArDecoder *ar_decoder){	if (bab_type==0) /* Interleaved Scan-Line (ISL) coding */	{		Int scan_order = DecideScanOrder(bordered_lower_bab,mbsize); // SAIT_PDAM: ADDED by D.-S.Cho (Samsung AIT)		ExclusiveORdecoding (bordered_lower_bab,				     bordered_half_bab,				     bordered_curr_bab,				     mbsize,					 scan_order, // SAIT_PDAM: ADDED by D.-S.Cho (Samsung AIT)

⌨️ 快捷键说明

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