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_y width/MB_BLOCK_SIZE)); fprintf(p_trace,"\n"); } for(img_x=0;img_x 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 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 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