www.pudn.com > avs-m3.rar > trace.c


/*! 
 ************************************************************************************* 
 * \file  
 *    trace.c 
 * \brief 
 *    write file out 
 * \notes: 
 *    upadated @ June 14th 2005 according to the FCD  
 ************************************************************************************* 
 */ 
#include  
#include "global.h" 
#include "defines.h" 
#include "memalloc.h" 
 
#if TRACE 
static int bitcounter = 0; 
 /*!  
 ************************************************************************************* 
 * \brief :  
 *    Tracing bitpatterns for symbols 
 *    A code word has the following format: 0 Xn...0 X2 0 X1 0 X0 1 
 ************************************************************************************* 
 */ 
void tracebits(const char *trace_str,  //!< tracing information, char array describing the symbol 
                      int len,                //!< length of syntax element in bits 
                      int info,               //!< infoword of syntax element 
                      int value1) 
{ 
 
  int i, chars; 
 
  if(len>=34) 
  { 
    snprintf(errortext, ET_SIZE, "Length argument to put too long for trace to work"); 
    error (errortext, 600); 
  } 
 
  putc('@', p_trace); 
  chars = fprintf(p_trace, "%i", bitcounter); 
  while(chars++ < 6) 
    putc(' ',p_trace); 
 
  chars += fprintf(p_trace, "%s", trace_str); 
  while(chars++ < 55) 
    putc(' ',p_trace); 
 
  // Align bitpattern 
  if(len<15) 
  { 
    for(i=0 ; i<15-len ; i++) 
      fputc(' ', p_trace); 
  } 
 
  // Print bitpattern 
  for(i=0 ; i> ((len/2-i)-1))) 
        fputc('1', p_trace); 
      else 
        fputc('0', p_trace); 
  } 
 
  fprintf(p_trace, "  (%3d)\n", value1); 
  bitcounter += len; 
 
  fflush (p_trace); 
 
} 
 
 /*!  
 ************************************************************************************* 
 * \brief :  
 *    trace high level parseting symbol 
 ************************************************************************************* 
 */ 
 
void tracebits2( 
    const char *trace_str,  //!< tracing information, char array describing the symbol 
    int len,                //!< length of syntax element in bits 
    int info) 
{ 
 
  int i, chars; 
 
  if(len>=45) 
  { 
    snprintf(errortext, ET_SIZE, "Length argument to put too long for trace to work"); 
    error (errortext, 600); 
  } 
 
  putc('@', p_trace); 
  chars = fprintf(p_trace, "%i", bitcounter); 
  while(chars++ < 6) 
    putc(' ',p_trace); 
  chars += fprintf(p_trace, "%s", trace_str); 
  while(chars++ < 55) 
    putc(' ',p_trace); 
 
  // Align bitpattern 
  if(len<15) 
    for(i=0 ; i<15-len ; i++) 
      fputc(' ', p_trace); 
 
  bitcounter += len; 
  while (len >= 32) 
  { 
    for(i=0 ; i<8 ; i++) 
    { 
      fputc('0', p_trace); 
    } 
    len -= 8; 
 
  } 
  // Print bitpattern 
  for(i=0 ; i> (len-i-1)))   //!< SHIFT from Left to Right bit by bit. 
      fputc('1', p_trace); 
    else 
      fputc('0', p_trace); 
  } 
 
  fprintf(p_trace, "  (%3d)\n", info); 
 
  fflush (p_trace); 
 
} 
 
 
 /*!  
 ************************************************************************************* 
 * \brief :  
 *    Tracing bitpatterns for symbols 
 ************************************************************************************* 
 */ 
void tracebits3( 
    const char *trace_str,  //!< tracing information, char array describing the symbol 
    int len,                //!< length of syntax element in bits 
    int info,               //!< infoword of syntax element 
    int value1) 
{ 
  int i, chars; 
 
  if(len>=34) 
  { 
    snprintf(errortext, ET_SIZE, "Length argument to put too long for trace to work"); 
    error (errortext, 600); 
  } 
 
  putc('@', p_trace); 
  chars = fprintf(p_trace, "%i", bitcounter); 
  while(chars++ < 6) 
    putc(' ',p_trace); 
 
  chars += fprintf(p_trace, "%s", trace_str); 
  while(chars++ < 55) 
    putc(' ',p_trace); 
 
  // Align bitpattern 
  if(len<15) 
  { 
    for(i=0 ; i<15-len ; i++) 
      fputc(' ', p_trace); 
  } 
 
  // Print bitpattern 
  for(i=0 ; i> (len-i-1))) 
      fputc('1', p_trace); 
    else 
      fputc('0', p_trace); 
  } 
   
  fprintf(p_trace, "  (%3d)\n", value1); 
  bitcounter += len; 
 
  fflush (p_trace); 
 
} 
 
 /*!  
 ************************************************************************************* 
 * \brief :  
 *    Tracing out decoded macroblock 
 ************************************************************************************* 
 */ 
 
void trace_mboverhead(Macroblock *curMb) 
{ 
 
  int b8,b4; 
  int mb_y,mb_x; 
   if (IS_INTRA(curMb)) 
		{ 
    fprintf(p_trace,"@MB Luma Mode\n"); 
    for (b8=0;b8<4;b8++) 
      for (b4=0;b4<4;b4++) 
      { 
        fprintf(p_trace,"%3d",MB_ipredmode_Y[b8][b4]); 
        if(!((b4+1)%4)) 
          fprintf(p_trace,"\n"); 
      } 
  } 
 
  fprintf(p_trace,"@VLD output: \n"); 
		for(mb_y=0;mb_y<16;mb_y++) 
    { 
      for(mb_x=0;mb_x<16;mb_x++) 
      { 
        fprintf(p_trace,"%4d",pgImage->m7[mb_y][mb_x]); 
        if(mb_x%4==3) 
          fprintf(p_trace,"  "); 
        if(mb_x==15) 
          fprintf(p_trace,"\n"); 
      } 
      if(mb_y%4==3) 
        fprintf(p_trace,"\n"); 
    } 
     
     
    for(mb_y = 0; mb_y < 8;mb_y++) 
    { 
      for(mb_x=0;mb_x < 8;mb_x++) 
      { 
        fprintf(p_trace,"%4d",pgImage->m8[0][mb_y][mb_x]); 
        if(mb_x%4==3) 
          fprintf(p_trace,"  "); 
      } 
       
      for(mb_x=0;mb_x<8;mb_x++) 
      { 
        fprintf(p_trace,"%4d",pgImage->m8[1][mb_y][mb_x]); 
        if(mb_x%4==3) 
          fprintf(p_trace,"  "); 
        if(mb_x==7) 
          fprintf(p_trace,"\n"); 
      } 
      if(mb_y%4==3) 
        fprintf(p_trace,"\n"); 
    } 
 
} 
 
 /*!  
 ************************************************************************************* 
 * \brief :  
 *    Tracing out decoded macroblock 
 ************************************************************************************* 
 */ 
void trace_mb_data(Macroblock *curMb) 
{ 
  int b8, b4; 
  int i, j; 
  int mb_x,mb_y; 
  	//Inter Pred Processing: 
    for (b8=0; b8<6; b8++) 
	  for (b4 = 0; b4 < 4; b4 ++)  //zhangnan 
		for(j=0;j<4;j++) 
			 for(i=0;i<4;i++) 
			 { 
				if(b8<4) 
					MB_interpred_Y[((b8>>1)<<3)+((b4>>1)<<2)+j][((b8 &1)<<3)+((b4 &1)<<2)+i] = pgcurrMB->pred_sample[b8][b4][i][j]; 
        else 
				{ 
	  				MB_interpred_UV[0][((b4>>1)<<2)+j][((b4 &1)<<2)+i] = pgcurrMB->pred_sample[4][b4][i][j]; 
					MB_interpred_UV[1][((b4>>1)<<2)+j][((b4 &1)<<2)+i] = pgcurrMB->pred_sample[5][b4][i][j]; 
				} 
			 } 
    
  //MB IQ printout 
  fprintf(p_trace,"@IQ output: \n"); 
  for(mb_y=0;mb_y<16;mb_y++) 
  { 
	  for(mb_x=0;mb_x<16;mb_x++) 
	  { 
		  fprintf(p_trace,"%4d",MB_IQ_Y[mb_y][mb_x]); 
		  if(mb_x%4==3) 
			  fprintf(p_trace,"  "); 
		  if(mb_x==15) 
			  fprintf(p_trace,"\n"); 
	  } 
	  if(mb_y%4==3) 
		  fprintf(p_trace,"\n"); 
  } 
	 
 
		for(mb_y = 0; mb_y < 8;mb_y++) 
		{ 
			for(mb_x=0;mb_x < 8;mb_x++) 
			{ 
				fprintf(p_trace,"%4d",MB_IQ_UV[0][mb_y][mb_x]); 
				if(mb_x%4==3) 
					fprintf(p_trace,"  "); 
			} 
			 
			for(mb_x=0;mb_x < 8;mb_x++) 
			{ 
				fprintf(p_trace,"%4d",MB_IQ_UV[1][mb_y][mb_x]); 
				if(mb_x%4==3) 
					fprintf(p_trace,"  "); 
				if(mb_x==7) 
					fprintf(p_trace,"\n"); 
			} 
 
			if(mb_y%4==3) 
				fprintf(p_trace,"\n"); 
		} 
 
  //MB H coefficient Matrix printout 
  fprintf(p_trace,"@H coefficient output: \n"); 
  for(mb_y=0;mb_y<16;mb_y++) 
  { 
	  for(mb_x=0;mb_x<16;mb_x++) 
	  { 
		  fprintf(p_trace,"%5d",MB_H_coeff_Y[mb_y][mb_x]); 
		  if(mb_x%4==3) 
			  fprintf(p_trace,"  "); 
		  if(mb_x==15) 
			  fprintf(p_trace,"\n"); 
	  } 
	  if(mb_y%4==3) 
		  fprintf(p_trace,"\n"); 
  } 
	 
		for(mb_y = 0; mb_y < 8;mb_y++) 
    { 
      for(mb_x=0;mb_x < 8;mb_x++) 
      { 
        fprintf(p_trace,"%5d",MB_H_coeff_UV[0][mb_y][mb_x]); 
        if(mb_x%4==3) 
          fprintf(p_trace,"  "); 
      } 
       
      for(mb_x=0;mb_x < 8;mb_x++) 
      { 
        fprintf(p_trace,"%5d",MB_H_coeff_UV[1][mb_y][mb_x]); 
        if(mb_x%4==3) 
          fprintf(p_trace,"  "); 
        if(mb_x==7) 
          fprintf(p_trace,"\n"); 
      } 
       
      if(mb_y%4==3) 
        fprintf(p_trace,"\n"); 
    } 
 
 
  //MB IDCT printout 
  fprintf(p_trace,"@IDCT output: \n"); 
  for(mb_y=0;mb_y<16;mb_y++) 
  { 
	  for(mb_x=0;mb_x<16;mb_x++) 
	  { 
		  fprintf(p_trace,"%4d",MB_IDCT_Y[mb_y][mb_x]); 
		  if(mb_x%4==3) 
			  fprintf(p_trace,"  "); 
		  if(mb_x==15) 
			  fprintf(p_trace,"\n"); 
	  } 
	  if(mb_y%4==3) 
		  fprintf(p_trace,"\n"); 
  } 
	 
		for(mb_y = 0; mb_y < 8;mb_y++) 
    { 
      for(mb_x=0;mb_x < 8;mb_x++) 
      { 
        fprintf(p_trace,"%4d",MB_IDCT_UV[0][mb_y][mb_x]); 
        if(mb_x%4==3) 
          fprintf(p_trace,"  "); 
      } 
       
      for(mb_x=0;mb_x < 8;mb_x++) 
      { 
        fprintf(p_trace,"%4d",MB_IDCT_UV[1][mb_y][mb_x]); 
        if(mb_x%4==3) 
          fprintf(p_trace,"  "); 
        if(mb_x==7) 
          fprintf(p_trace,"\n"); 
      } 
       
      if(mb_y%4==3) 
        fprintf(p_trace,"\n"); 
    } 
 
 
 
    
  //IntraPred or InterPred output  
	if(IS_INTRA(curMb)) 
	{ 
		fprintf(p_trace,"@INTRA Pred output: \n"); 
		for(mb_y=0;mb_y<16;mb_y++) 
		{ 
			for(mb_x=0;mb_x<16;mb_x++) 
			{ 
				fprintf(p_trace,"%4d",MB_intrapred_Y[mb_y][mb_x]); 
				if(mb_x%4==3) 
					fprintf(p_trace,"  "); 
				if(mb_x==15) 
					fprintf(p_trace,"\n"); 
			} 
			if(mb_y%4==3) 
				fprintf(p_trace,"\n"); 
		} 
		 
 
			for(mb_y = 0; mb_y < 8;mb_y++) 
			{ 
				for(mb_x=0;mb_x < 8;mb_x++) 
				{ 
					fprintf(p_trace,"%4d",MB_intrapred_UV[0][mb_y][mb_x]); 
					if(mb_x%4==3) 
						fprintf(p_trace,"  "); 
				} 
				 
				for(mb_x=0;mb_x<8;mb_x++) 
				{ 
					fprintf(p_trace,"%4d",MB_intrapred_UV[1][mb_y][mb_x]); 
					if(mb_x%4==3) 
						fprintf(p_trace,"  "); 
					if(mb_x==7) 
						fprintf(p_trace,"\n"); 
				} 
				if(mb_y%4==3) 
					fprintf(p_trace,"\n"); 
			} 
	 
	} 
	else if(IS_INTER(curMb)) 
	{ 
	 
		fprintf(p_trace,"@Inter Pred output: \n"); 
		for(mb_y=0;mb_y<16;mb_y++) 
		{ 
			for(mb_x=0;mb_x<16;mb_x++) 
			{ 
				fprintf(p_trace,"%4d",MB_interpred_Y[mb_y][mb_x]); 
				if(mb_x%4==3) 
					fprintf(p_trace,"  "); 
				if(mb_x==15) 
					fprintf(p_trace,"\n"); 
			} 
			if(mb_y%4==3) 
				fprintf(p_trace,"\n"); 
		} 
		 
	 
			for(mb_y = 0; mb_y < 8;mb_y++) 
			{ 
				for(mb_x=0;mb_x < 8;mb_x++) 
				{ 
					fprintf(p_trace,"%4d",MB_interpred_UV[0][mb_y][mb_x]); 
					if(mb_x%4==3) 
						fprintf(p_trace,"  "); 
				} 
				 
				for(mb_x=0;mb_x<8;mb_x++) 
				{ 
					fprintf(p_trace,"%4d",MB_interpred_UV[1][mb_y][mb_x]); 
					if(mb_x%4==3) 
						fprintf(p_trace,"  "); 
					if(mb_x==7) 
						fprintf(p_trace,"\n"); 
				} 
				if(mb_y%4==3) 
					fprintf(p_trace,"\n"); 
			} 
		 
	 
	} 
 
  //Rec MB Luma Printout  
  fprintf(p_trace,"@Rec MB : \n"); 
  for(mb_y=0;mb_y<16;mb_y++) 
  { 
	  for(mb_x=0;mb_x<16;mb_x++) 
	  { 
		  fprintf(p_trace,"%4d",MB_Y[mb_y][mb_x]); 
		  if(mb_x%4==3) 
			  fprintf(p_trace,"  "); 
		  if(mb_x==15) 
			  fprintf(p_trace,"\n"); 
	  } 
	  if(mb_y%4==3) 
		  fprintf(p_trace,"\n"); 
  } 
 
   
  
 
  //Rec MB  chroma Printout  
		for(mb_y = 0; mb_y < 8;mb_y++) 
		{ 
			for(mb_x=0;mb_x < 8;mb_x++) 
			{ 
				fprintf(p_trace,"%4d",MB_UV[0][mb_y][mb_x]); 
				if(mb_x%4==3) 
					fprintf(p_trace,"  "); 
			} 
			 
			for(mb_x=0;mb_x<8;mb_x++) 
			{ 
				fprintf(p_trace,"%4d",MB_UV[1][mb_y][mb_x]); 
				if(mb_x%4==3) 
					fprintf(p_trace,"  "); 
				if(mb_x==7) 
					fprintf(p_trace,"\n"); 
			} 
			if(mb_y%4==3) 
				fprintf(p_trace,"\n"); 
		} 
 
} 
 
 
 /*!  
 ************************************************************************************* 
 * \brief :  
 *    Tracing out deblocked frames 
 ************************************************************************************* 
 */ 
void trace_frame(FILE* p_trace,int img_width,int img_height,byte **img_luma, byte ***img_chorma) 
{ 
  int img_y,img_x; 
  int mb_x; 
 
  fprintf(p_trace,"@Deblocked Frame : \n"); 
		for(img_y=0;img_ywidth/MB_BLOCK_SIZE)); 
        fprintf(p_trace,"\n"); 
      } 
      for(img_x=0;img_xheight_cr;img_y++) 
    { 
      //U 
      if(!(img_y%B8_SIZE)) 
      { 
        for(mb_x=0;mb_x<(pgImage->width_cr/B8_SIZE);mb_x++) 
          fprintf(p_trace," ---------------%2d-------------- ",mb_x+(img_y/B8_SIZE)*(pgImage->width_cr/B8_SIZE)); 
      } 
      //V 
      if(!(img_y%B8_SIZE)) 
      { 
        for(mb_x=0;mb_x<(pgImage->width_cr/B8_SIZE);mb_x++) 
          fprintf(p_trace," ---------------%2d-------------- ",mb_x+(img_y/B8_SIZE)*(pgImage->width_cr/B8_SIZE)); 
        fprintf(p_trace,"\n"); 
      } 
      for(img_x=0;img_xwidth_cr;img_x++) 
      { 
        fprintf(p_trace,"%4d",imgUV[0][img_y][img_x]); 
        if((img_x+1)%B8_SIZE == 0) fprintf(p_trace," "); 
      } 
       
      for(img_x=0;img_xwidth_cr;img_x++) 
      {    
        fprintf(p_trace,"%4d",imgUV[1][img_y][img_x]); 
        if((img_x+1)%B8_SIZE == 0)    fprintf(p_trace," "); 
      } 
      fprintf(p_trace,"\n"); 
      if ((img_y+1)%B8_SIZE == 0)   fprintf(p_trace,"\n"); // carriage 
    } 
} 
 
#endif