[cvs] / xvidcore / src / decoder.c Repository:
ViewVC logotype

Diff of /xvidcore/src/decoder.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.24, Wed Jul 3 12:32:50 2002 UTC revision 1.28, Fri Jul 12 00:49:59 2002 UTC
# Line 32  Line 32 
32   *   *
33   *  History:   *  History:
34   *   *
35     *  10.07.2002  added BFRAMES_DEC_DEBUG support
36     *              Fix a little bug for low_delay flage
37     *              MinChen <chenm001@163.com>
38   *  28.06.2002  added basic resync support to iframe/pframe_decode()   *  28.06.2002  added basic resync support to iframe/pframe_decode()
39   *      22.06.2002      added primative N_VOP support   *      22.06.2002      added primative N_VOP support
40   *                              #define BFRAMES_DEC now enables Minchenm's bframe decoder   *              #define BFRAMES_DEC now enables Minchen's bframe decoder
41   *  08.05.2002  add low_delay support for B_VOP decode   *  08.05.2002  add low_delay support for B_VOP decode
42   *              MinChen <chenm001@163.com>   *              MinChen <chenm001@163.com>
43   *  05.05.2002  fix some B-frame decode problem   *  05.05.2002  fix some B-frame decode problem
# Line 57  Line 60 
60  #include <stdlib.h>  #include <stdlib.h>
61  #include <string.h>  #include <string.h>
62    
63    #ifdef BFRAMES_DEC_DEBUG
64            #define BFRAMES_DEC
65    #endif
66    
67  #include "xvid.h"  #include "xvid.h"
68  #include "portab.h"  #include "portab.h"
69    
# Line 1082  Line 1089 
1089    
1090          uint32_t x, y;          uint32_t x, y;
1091          VECTOR mv, zeromv;          VECTOR mv, zeromv;
1092    #ifdef BFRAMES_DEC_DEBUG
1093            FILE *fp;
1094            static char first=0;
1095    #define BFRAME_DEBUG    if (!first && fp){ \
1096                    fprintf(fp,"Y=%3d   X=%3d   MB=%2d   CBP=%02X\n",y,x,mb->mb_type,mb->cbp); \
1097            }
1098    #endif
1099    
1100          start_timer();          start_timer();
1101          image_setedges(&dec->refn[0], dec->edged_width, dec->edged_height,          image_setedges(&dec->refn[0], dec->edged_width, dec->edged_height,
# Line 1089  Line 1103 
1103          //image_setedges(&dec->refn[1], dec->edged_width, dec->edged_height, dec->width, dec->height, dec->interlacing);          //image_setedges(&dec->refn[1], dec->edged_width, dec->edged_height, dec->width, dec->height, dec->interlacing);
1104          stop_edges_timer();          stop_edges_timer();
1105    
1106    #ifdef BFRAMES_DEC_DEBUG
1107            if (!first){
1108                    fp=fopen("C:\\XVIDDBG.TXT","w");
1109            }
1110    #endif
1111    
1112          for (y = 0; y < dec->mb_height; y++) {          for (y = 0; y < dec->mb_height; y++) {
1113                  // Initialize Pred Motion Vector                  // Initialize Pred Motion Vector
# Line 1097  Line 1116 
1116                          MACROBLOCK *mb = &dec->mbs[y * dec->mb_width + x];                          MACROBLOCK *mb = &dec->mbs[y * dec->mb_width + x];
1117                          MACROBLOCK *last_mb = &dec->last_mbs[y * dec->mb_width + x];                          MACROBLOCK *last_mb = &dec->last_mbs[y * dec->mb_width + x];
1118    
1119                          mb->mvs[0].x = mb->mvs[0].y = zeromv.x = zeromv.y = mv.x = mv.y =                          mb->mvs[0].x = mb->mvs[0].y = zeromv.x = zeromv.y = mv.x = mv.y = 0;
                                 0;  
1120    
1121                          // the last P_VOP is skip macroblock ?                          // the last P_VOP is skip macroblock ?
1122                          if (last_mb->mode == MODE_NOT_CODED) {                          if (last_mb->mode == MODE_NOT_CODED) {
1123                                  //DEBUG2("Skip MB in B-frame at (X,Y)=!",x,y);                                  //DEBUG2("Skip MB in B-frame at (X,Y)=!",x,y);
1124                                  mb->mb_type = MODE_FORWARD;                                  mb->mb_type = MODE_NOT_CODED;
1125                                  mb->cbp = 0;                                  mb->cbp = 0;
1126    #ifdef BFRAMES_DEC_DEBUG
1127            BFRAME_DEBUG
1128    #endif
1129                                    mb->mb_type = MODE_FORWARD;
1130                                  mb->mvs[1].x = mb->mvs[2].x = mb->mvs[3].x = mb->mvs[0].x;                                  mb->mvs[1].x = mb->mvs[2].x = mb->mvs[3].x = mb->mvs[0].x;
1131                                  mb->mvs[1].y = mb->mvs[2].y = mb->mvs[3].y = mb->mvs[0].y;                                  mb->mvs[1].y = mb->mvs[2].y = mb->mvs[3].y = mb->mvs[0].y;
1132                                  mb->quant = 8;                                  mb->quant = 8;
# Line 1144  Line 1166 
1166                          mb->mode = MODE_INTER;                          mb->mode = MODE_INTER;
1167                          //DEBUG1("Switch bm_type=",mb->mb_type);                          //DEBUG1("Switch bm_type=",mb->mb_type);
1168    
1169    #ifdef BFRAMES_DEC_DEBUG
1170            BFRAME_DEBUG
1171    #endif
1172                          switch (mb->mb_type) {                          switch (mb->mb_type) {
1173                          case MODE_DIRECT:                          case MODE_DIRECT:
1174                                  get_b_motion_vector(dec, bs, x, y, &mb->mvs[0], 1, zeromv);                                  get_b_motion_vector(dec, bs, x, y, &mb->mvs[0], 1, zeromv);
# Line 1224  Line 1249 
1249                                  break;                                  break;
1250    
1251                          default:                          default:
1252                                  DEBUG1("Not support B-frame mb_type =", mb->mb_type);                                  //DEBUG1("Not support B-frame mb_type =", mb->mb_type);
1253                                    ;
1254                          }                          }
1255    
1256                  }                                               // end of FOR                  }                                               // end of FOR
1257          }          }
1258    #ifdef BFRAMES_DEC_DEBUG
1259            if (!first){
1260                    first=1;
1261                    if (fp)
1262                            fclose(fp);
1263            }
1264    #endif
1265  }  }
1266    
1267  // swap two MACROBLOCK array  // swap two MACROBLOCK array
# Line 1306  Line 1339 
1339                  return XVID_ERR_FAIL;                  return XVID_ERR_FAIL;
1340          }          }
1341    
1342    #ifdef BFRAMES_DEC_DEBUG
1343            if (frame->length != BitstreamPos(&bs) / 8){
1344                    DEBUG2("InLen/UseLen",frame->length, BitstreamPos(&bs) / 8);
1345            }
1346    #endif
1347          frame->length = BitstreamPos(&bs) / 8;          frame->length = BitstreamPos(&bs) / 8;
1348    
1349    
1350  #ifdef BFRAMES_DEC  #ifdef BFRAMES_DEC
1351          // test if no B_VOP          // test if no B_VOP
1352          if (dec->low_delay) {          if (dec->low_delay) {
1353  #endif  #endif
1354                  image_output(&dec->cur, dec->width, dec->height, dec->edged_width,                  image_output(&dec->cur, dec->width, dec->height, dec->edged_width,
1355                                           frame->image, frame->stride, frame->colorspace);                                           frame->image, frame->stride, frame->colorspace);
1356    
1357  #ifdef BFRAMES_DEC  #ifdef BFRAMES_DEC
1358          } else {          } else {
1359                  if (dec->frames >= 1) {                  if (dec->frames >= 0) {
1360                          start_timer();                          start_timer();
1361                          if ((vop_type == I_VOP || vop_type == P_VOP)) {                          if ((vop_type == I_VOP || vop_type == P_VOP)) {
1362                                  image_output(&dec->refn[0], dec->width, dec->height,                                  image_output(&dec->refn[0], dec->width, dec->height,
# Line 1336  Line 1376 
1376                  image_swap(&dec->refn[0], &dec->refn[1]);                  image_swap(&dec->refn[0], &dec->refn[1]);
1377                  image_swap(&dec->cur, &dec->refn[0]);                  image_swap(&dec->cur, &dec->refn[0]);
1378                  // swap MACROBLOCK                  // swap MACROBLOCK
1379                  if (dec->low_delay && vop_type == P_VOP)                  if (!dec->low_delay && vop_type == P_VOP)
1380                          mb_swap(&dec->mbs, &dec->last_mbs);                          mb_swap(&dec->mbs, &dec->last_mbs);
1381          }          }
1382    

Legend:
Removed from v.1.24  
changed lines
  Added in v.1.28

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4