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

📄 trace.c

📁 davinci avs.......................................................
💻 C
字号:
/*!
 *************************************************************************************
 * \file 
 *    trace.c
 * \brief
 *    write file out
 * \notes:
 *    upadated @ June 14th 2005 according to the FCD 
 *************************************************************************************
 */
#include <stdlib.h>
#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++)
  {
    fputc('0', p_trace);
  }
  // put 1
  fprintf(p_trace, "1");

  // Print bitpattern
  for(i=0 ; i<len/2 ; i++)
  {
      if (0x01 & ( info >> ((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++)
  {
    if (0x01 & ( info >> (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++)
  {
    if (0x01 & ( info >> (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_y<img_height;img_y++)
    {
      
      if(!(img_y%MB_BLOCK_SIZE))
      {
        for(mb_x=0;mb_x<(img_width/MB_BLOCK_SIZE);mb_x++)
          fprintf(p_trace,"  ------------------------------%2d------------------------------ ",mb_x+(img_y/MB_BLOCK_SIZE)*(pgImage->width/MB_BLOCK_SIZE));
        fprintf(p_trace,"\n");
      }
      for(img_x=0;img_x<img_width;img_x++)
      {   
        fprintf(p_trace,"%4d",imgY[img_y][img_x]);
        if((img_x+1)%MB_BLOCK_SIZE == 0)  fprintf(p_trace," ");
      }
      fprintf(p_trace,"\n");
      if ((img_y+1)%MB_BLOCK_SIZE == 0) fprintf(p_trace,"\n");
    }

    fprintf(p_trace,"\n");
    
    for(img_y=0;img_y<pgImage->height_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_x<pgImage->width_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_x<pgImage->width_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


⌨️ 快捷键说明

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