[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.37.2.22, Sat Dec 14 09:39:42 2002 UTC revision 1.37.2.26, Sat Jan 4 06:14:32 2003 UTC
# Line 68  Line 68 
68    
69  #include "xvid.h"  #include "xvid.h"
70  #include "portab.h"  #include "portab.h"
71    #include "global.h"
72    
73  #include "decoder.h"  #include "decoder.h"
74  #include "bitstream/bitstream.h"  #include "bitstream/bitstream.h"
# Line 384  Line 385 
385    
386    
387    
   
 #define SIGN(X) (((X)>0)?1:-1)  
 #define ABS(X) (((X)>0)?(X):-(X))  
   
388  // decode an inter macroblock  // decode an inter macroblock
389    
390  void  void
# Line 915  Line 912 
912                          }                          }
913                          else if (gmc_mv)        /* not coded S_VOP macroblock */                          else if (gmc_mv)        /* not coded S_VOP macroblock */
914                          {                          {
915                                  mb->mode = MODE_NOT_CODED;                                  mb->mode = MODE_NOT_CODED_GMC;
916                                  mb->mvs[0].x = mb->mvs[1].x = mb->mvs[2].x = mb->mvs[3].x = gmc_sanitize(gmc_mv[0].x, dec->quarterpel, fcode);                                  mb->mvs[0].x = mb->mvs[1].x = mb->mvs[2].x = mb->mvs[3].x = gmc_sanitize(gmc_mv[0].x, dec->quarterpel, fcode);
917                                  mb->mvs[0].y = mb->mvs[1].y = mb->mvs[2].y = mb->mvs[3].y = gmc_sanitize(gmc_mv[0].y, dec->quarterpel, fcode);                                  mb->mvs[0].y = mb->mvs[1].y = mb->mvs[2].y = mb->mvs[3].y = gmc_sanitize(gmc_mv[0].y, dec->quarterpel, fcode);
918                                  decoder_mbinter(dec, mb, x, y, 0, 0, bs, quant, rounding, reduced_resolution);                                  decoder_mbinter(dec, mb, x, y, 0, 0, bs, quant, rounding, reduced_resolution);
# Line 1467  Line 1464 
1464                          mb->b_mvs[0] = mb->b_mvs[1] = mb->b_mvs[2] = mb->b_mvs[3] =                          mb->b_mvs[0] = mb->b_mvs[1] = mb->b_mvs[2] = mb->b_mvs[3] =
1465                          mb->mvs[0] = mb->mvs[1] = mb->mvs[2] = mb->mvs[3] = zeromv;                          mb->mvs[0] = mb->mvs[1] = mb->mvs[2] = mb->mvs[3] = zeromv;
1466    
1467                          // the last P_VOP is skip macroblock ?                          // skip if the co-located P_VOP macroblock is not coded
1468                            // note: gmc+not_coded isn't skipped
1469    
1470                          if (last_mb->mode == MODE_NOT_CODED) {                          if (last_mb->mode == MODE_NOT_CODED) {
1471                                  //DEBUG2("Skip MB in B-frame at (X,Y)=!",x,y);                                  //DEBUG2("Skip MB in B-frame at (X,Y)=!",x,y);
1472                                  mb->cbp = 0;                                  mb->cbp = 0;
# Line 1651  Line 1650 
1650          dec->low_delay_default = (frame->general & XVID_DEC_LOWDELAY);          dec->low_delay_default = (frame->general & XVID_DEC_LOWDELAY);
1651          dec->out_frm = (frame->colorspace == XVID_CSP_EXTERN) ? frame->image : NULL;          dec->out_frm = (frame->colorspace == XVID_CSP_EXTERN) ? frame->image : NULL;
1652    
1653            if ((frame->general & XVID_DEC_DISCONTINUITY))
1654                    dec->frames = 0;
1655    
1656          if (frame->length < 0)  /* decoder flush */          if (frame->length < 0)  /* decoder flush */
1657          {          {
1658                  /* if  not decoding "low_delay/packed", and this isn't low_delay and                  /* if  not decoding "low_delay/packed", and this isn't low_delay and
# Line 1700  Line 1702 
1702          if (vop_type == - 1)          if (vop_type == - 1)
1703          {          {
1704                  if (success) goto done;                  if (success) goto done;
1705                    emms();
1706                  return XVID_ERR_FAIL;                  return XVID_ERR_FAIL;
1707          }          }
1708    
# Line 1720  Line 1723 
1723                          stats->data.vol.par_width = dec->par_width;                          stats->data.vol.par_width = dec->par_width;
1724                          stats->data.vol.par_height = dec->par_height;                          stats->data.vol.par_height = dec->par_height;
1725                          frame->length = BitstreamPos(&bs) / 8;                          frame->length = BitstreamPos(&bs) / 8;
1726                            emms();
1727                          return XVID_ERR_OK;                          return XVID_ERR_OK;
1728                  }                  }
1729                  goto repeat;                  goto repeat;
# Line 1835  Line 1839 
1839                  {                  {
1840                          /* output the recently decoded frame */                          /* output the recently decoded frame */
1841                          decoder_output(dec, &dec->refn[0], dec->last_mbs, frame, dec->last_reduced_resolution);                          decoder_output(dec, &dec->refn[0], dec->last_mbs, frame, dec->last_reduced_resolution);
1842                            output = 1;
1843                  }                  }
1844                  else                  else
1845                  {                  {
# Line 1846  Line 1851 
1851    
1852                          decoder_output(dec, &dec->cur, NULL, frame, 1 /*disable pp*/);                          decoder_output(dec, &dec->cur, NULL, frame, 1 /*disable pp*/);
1853                  }                  }
                 output = 1;  
1854          }          }
1855    
1856          frame->length = BitstreamPos(&bs) / 8;          frame->length = BitstreamPos(&bs) / 8;

Legend:
Removed from v.1.37.2.22  
changed lines
  Added in v.1.37.2.26

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