[svn] / branches / release-1_3-branch / xvidcore / src / bitstream / mbcoding.c Repository:
ViewVC logotype

Diff of /branches/release-1_3-branch/xvidcore/src/bitstream/mbcoding.c

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

revision 1609, Mon Apr 4 23:49:37 2005 UTC revision 1773, Sat Apr 28 16:30:26 2007 UTC
# Line 19  Line 19 
19   *  along with this program ; if not, write to the Free Software   *  along with this program ; if not, write to the Free Software
20   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
21   *   *
22   * $Id: mbcoding.c,v 1.51 2005-04-04 23:49:37 edgomez Exp $   * $Id: mbcoding.c,v 1.54 2007-04-28 16:30:20 syskin Exp $
23   *   *
24   ****************************************************************************/   ****************************************************************************/
25    
# Line 36  Line 36 
36    
37  #include "../utils/mbfunctions.h"  #include "../utils/mbfunctions.h"
38    
39    #ifdef _DEBUG
40    # include "../motion/estimation.h"
41    # include "../motion/motion_inlines.h"
42    # include <assert.h>
43    #endif
44    
45    
46  #define LEVELOFFSET 32  #define LEVELOFFSET 32
47    
48  /* Initialized once during xvid_global call  /* Initialized once during xvid_global call
# Line 572  Line 579 
579  #endif  #endif
580                  }                  }
581          }          }
582    
583            bits = BitstreamPos(bs);
584    
585          /* code motion vector(s) if motion is local  */          /* code motion vector(s) if motion is local  */
586          if (!pMB->mcsel)          if (!pMB->mcsel)
587                  for (i = 0; i < (pMB->mode == MODE_INTER4V ? 4 : 1); i++) {                  for (i = 0; i < (pMB->mode == MODE_INTER4V ? 4 : 1); i++) {
588                          CodeVector(bs, pMB->pmvs[i].x, frame->fcode);                          CodeVector(bs, pMB->pmvs[i].x, frame->fcode);
589                          CodeVector(bs, pMB->pmvs[i].y, frame->fcode);                          CodeVector(bs, pMB->pmvs[i].y, frame->fcode);
590    
591    #ifdef _DEBUG
592                            if (i == 0) /* for simplicity */ {
593                                    int coded_length = BitstreamPos(bs) - bits;
594                                    int estimated_length = d_mv_bits(pMB->pmvs[i].x, pMB->pmvs[i].y, zeroMV, frame->fcode, 0);
595                                    assert(estimated_length == coded_length);
596                                    d_mv_bits(pMB->pmvs[i].x, pMB->pmvs[i].y, zeroMV, frame->fcode, 0);
597                  }                  }
598    #endif
599                    }
600    
601            bits = BitstreamPos(bs) - bits;
602            pStat->iMVBits += bits;
603    
604          bits = BitstreamPos(bs);          bits = BitstreamPos(bs);
605    
# Line 746  Line 768 
768                  }                  }
769          }          }
770    
771            bits = BitstreamPos(bs);
772    
773          switch (mb->mode) {          switch (mb->mode) {
774                  case MODE_INTERPOLATE:                  case MODE_INTERPOLATE:
# Line 762  Line 785 
785                          CodeVector(bs, mb->pmvs[3].y, 1);       /* prediction is always (0,0) */                          CodeVector(bs, mb->pmvs[3].y, 1);       /* prediction is always (0,0) */
786                  default: break;                  default: break;
787          }          }
788            pStat->iMVBits += BitstreamPos(bs) - bits;
789    
790          bits = BitstreamPos(bs);          bits = BitstreamPos(bs);
791          for (i = 0; i < 6; i++) {          for (i = 0; i < 6; i++) {
# Line 1072  Line 1096 
1096                          break;                          break;
1097                  }                  }
1098                  coeff += run;                  coeff += run;
1099    
1100    #ifdef _DEBUG
1101                    if(coeff>=64) {
1102                      DPRINTF(XVID_DEBUG_ERROR,"error: overflow in coefficient index\n");
1103                      return;
1104                    }
1105    #endif
1106    
1107                  block[scan[coeff]] = level;                  block[scan[coeff]] = level;
1108    
1109                  DPRINTF(XVID_DEBUG_COEFF,"block[%i] %i\n", scan[coeff], level);                  DPRINTF(XVID_DEBUG_COEFF,"block[%i] %i\n", scan[coeff], level);
# Line 1113  Line 1145 
1145                  }                  }
1146                  p += run;                  p += run;
1147    
1148    #ifdef _DEBUG
1149                    if(p>=64)       {
1150                      DPRINTF(XVID_DEBUG_ERROR,"error: overflow in coefficient index\n");
1151                      return;
1152                    }
1153    #endif
1154    
1155                  if (level < 0) {                  if (level < 0) {
1156                          level = level*quant_m_2 - quant_add;                          level = level*quant_m_2 - quant_add;
1157                          block[scan[p]] = (level >= -2048 ? level : -2048);                          block[scan[p]] = (level >= -2048 ? level : -2048);
# Line 1148  Line 1187 
1187                  }                  }
1188                  p += run;                  p += run;
1189    
1190    #ifdef _DEBUG
1191                    if(p>=64)       {
1192                      DPRINTF(XVID_DEBUG_ERROR,"error: overflow in coefficient index\n");
1193                      return;
1194                    }
1195    #endif
1196    
1197                  if (level < 0) {                  if (level < 0) {
1198                          level = ((2 * -level + 1) * matrix[scan[p]] * quant) >> 4;                          level = ((2 * -level + 1) * matrix[scan[p]] * quant) >> 4;
1199                          block[scan[p]] = (level <= 2048 ? -level : -2048);                          block[scan[p]] = (level <= 2048 ? -level : -2048);

Legend:
Removed from v.1609  
changed lines
  Added in v.1773

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