[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.29, Mon Jul 15 00:26:38 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);
                                 mb->mb_type = MODE_FORWARD;  
1124                                  mb->cbp = 0;                                  mb->cbp = 0;
1125    #ifdef BFRAMES_DEC_DEBUG
1126                                    mb->mb_type = MODE_NOT_CODED;
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;
                                 mb->quant = 8;  
1132    
1133                                  decoder_bf_mbinter(dec, mb, x, y, mb->cbp, bs, quant, 1);                                  decoder_bf_mbinter(dec, mb, x, y, mb->cbp, bs, quant, 1);
1134                                  continue;                                  continue;
# Line 1144  Line 1165 
1165                          mb->mode = MODE_INTER;                          mb->mode = MODE_INTER;
1166                          //DEBUG1("Switch bm_type=",mb->mb_type);                          //DEBUG1("Switch bm_type=",mb->mb_type);
1167    
1168    #ifdef BFRAMES_DEC_DEBUG
1169            BFRAME_DEBUG
1170    #endif
1171                          switch (mb->mb_type) {                          switch (mb->mb_type) {
1172                          case MODE_DIRECT:                          case MODE_DIRECT:
1173                                  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 1248 
1248                                  break;                                  break;
1249    
1250                          default:                          default:
1251                                  DEBUG1("Not support B-frame mb_type =", mb->mb_type);                                  //DEBUG1("Not support B-frame mb_type =", mb->mb_type);
1252                                    ;
1253                          }                          }
1254    
1255                  }                                               // end of FOR                  }                                               // end of FOR
1256          }          }
1257    #ifdef BFRAMES_DEC_DEBUG
1258            if (!first){
1259                    first=1;
1260                    if (fp)
1261                            fclose(fp);
1262            }
1263    #endif
1264  }  }
1265    
1266  // swap two MACROBLOCK array  // swap two MACROBLOCK array
# Line 1306  Line 1338 
1338                  return XVID_ERR_FAIL;                  return XVID_ERR_FAIL;
1339          }          }
1340    
1341    #ifdef BFRAMES_DEC_DEBUG
1342            if (frame->length != BitstreamPos(&bs) / 8){
1343                    DEBUG2("InLen/UseLen",frame->length, BitstreamPos(&bs) / 8);
1344            }
1345    #endif
1346          frame->length = BitstreamPos(&bs) / 8;          frame->length = BitstreamPos(&bs) / 8;
1347    
1348    
1349  #ifdef BFRAMES_DEC  #ifdef BFRAMES_DEC
1350          // test if no B_VOP          // test if no B_VOP
1351          if (dec->low_delay) {          if (dec->low_delay) {
1352  #endif  #endif
1353                  image_output(&dec->cur, dec->width, dec->height, dec->edged_width,                  image_output(&dec->cur, dec->width, dec->height, dec->edged_width,
1354                                           frame->image, frame->stride, frame->colorspace);                                           frame->image, frame->stride, frame->colorspace);
1355    
1356  #ifdef BFRAMES_DEC  #ifdef BFRAMES_DEC
1357          } else {          } else {
1358                  if (dec->frames >= 1) {                  if (dec->frames >= 0) {
1359                          start_timer();                          start_timer();
1360                          if ((vop_type == I_VOP || vop_type == P_VOP)) {                          if ((vop_type == I_VOP || vop_type == P_VOP)) {
1361                                  image_output(&dec->refn[0], dec->width, dec->height,                                  image_output(&dec->refn[0], dec->width, dec->height,
# Line 1336  Line 1375 
1375                  image_swap(&dec->refn[0], &dec->refn[1]);                  image_swap(&dec->refn[0], &dec->refn[1]);
1376                  image_swap(&dec->cur, &dec->refn[0]);                  image_swap(&dec->cur, &dec->refn[0]);
1377                  // swap MACROBLOCK                  // swap MACROBLOCK
1378                  if (dec->low_delay && vop_type == P_VOP)                  if (!dec->low_delay && vop_type == P_VOP)
1379                          mb_swap(&dec->mbs, &dec->last_mbs);                          mb_swap(&dec->mbs, &dec->last_mbs);
1380          }          }
1381    

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

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