📄 trace.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 + -