[svn] / trunk / xvidcore / src / bitstream / mbcoding.c Repository:
ViewVC logotype

Diff of /trunk/xvidcore/src/bitstream/mbcoding.c

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

revision 1567, Wed Dec 8 12:43:48 2004 UTC revision 1677, Thu Jan 19 22:25:23 2006 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.49 2004-12-08 12:43:48 syskin Exp $   * $Id: mbcoding.c,v 1.53 2006-01-19 22:25:23 Isibaar Exp $
23   *   *
24   ****************************************************************************/   ****************************************************************************/
25    
# Line 572  Line 572 
572  #endif  #endif
573                  }                  }
574          }          }
575    
576            bits = BitstreamPos(bs);
577    
578          /* code motion vector(s) if motion is local  */          /* code motion vector(s) if motion is local  */
579          if (!pMB->mcsel)          if (!pMB->mcsel)
580                  for (i = 0; i < (pMB->mode == MODE_INTER4V ? 4 : 1); i++) {                  for (i = 0; i < (pMB->mode == MODE_INTER4V ? 4 : 1); i++) {
# Line 579  Line 582 
582                          CodeVector(bs, pMB->pmvs[i].y, frame->fcode);                          CodeVector(bs, pMB->pmvs[i].y, frame->fcode);
583                  }                  }
584    
585            bits = BitstreamPos(bs) - bits;
586            pStat->iMVBits += bits;
587    
588          bits = BitstreamPos(bs);          bits = BitstreamPos(bs);
589    
590          /* code block coeffs */          /* code block coeffs */
# Line 606  Line 612 
612          if (frame->coding_type != I_VOP)          if (frame->coding_type != I_VOP)
613                          BitstreamPutBit(bs, 0); /* not_coded */                          BitstreamPutBit(bs, 0); /* not_coded */
614    
615            if (frame->vop_flags & XVID_VOP_GREYSCALE) {
616                    pMB->cbp &= 0x3C;               /* keep only bits 5-2 */
617                    qcoeff[4*64+0]=0;               /* for INTRA DC value is saved */
618                    qcoeff[5*64+0]=0;
619            }
620    
621          if (pMB->mode == MODE_INTRA || pMB->mode == MODE_INTRA_Q)          if (pMB->mode == MODE_INTRA || pMB->mode == MODE_INTRA_Q)
622                  CodeBlockIntra(frame, pMB, qcoeff, bs, pStat);                  CodeBlockIntra(frame, pMB, qcoeff, bs, pStat);
623          else          else
# Line 692  Line 704 
704                  scan_tables[2] : scan_tables[0];                  scan_tables[2] : scan_tables[0];
705          int bits;          int bits;
706    
   
707  /*      ------------------------------------------------------------------  /*      ------------------------------------------------------------------
708                  when a block is skipped it is decoded DIRECT(0,0)                  when a block is skipped it is decoded DIRECT(0,0)
709                  hence is interpolated from forward & backward frames                  hence is interpolated from forward & backward frames
# Line 741  Line 752 
752                  }                  }
753          }          }
754    
755            bits = BitstreamPos(bs);
756    
757          switch (mb->mode) {          switch (mb->mode) {
758                  case MODE_INTERPOLATE:                  case MODE_INTERPOLATE:
# Line 757  Line 769 
769                          CodeVector(bs, mb->pmvs[3].y, 1);       /* prediction is always (0,0) */                          CodeVector(bs, mb->pmvs[3].y, 1);       /* prediction is always (0,0) */
770                  default: break;                  default: break;
771          }          }
772            pStat->iMVBits += BitstreamPos(bs) - bits;
773    
774          bits = BitstreamPos(bs);          bits = BitstreamPos(bs);
775          for (i = 0; i < 6; i++) {          for (i = 0; i < 6; i++) {
# Line 1067  Line 1080 
1080                          break;                          break;
1081                  }                  }
1082                  coeff += run;                  coeff += run;
1083    
1084    #ifdef _DEBUG
1085                    if(coeff>=64) {
1086                      DPRINTF(XVID_DEBUG_ERROR,"error: overflow in coefficient index\n");
1087                      return;
1088                    }
1089    #endif
1090    
1091                  block[scan[coeff]] = level;                  block[scan[coeff]] = level;
1092    
1093                  DPRINTF(XVID_DEBUG_COEFF,"block[%i] %i\n", scan[coeff], level);                  DPRINTF(XVID_DEBUG_COEFF,"block[%i] %i\n", scan[coeff], level);
# Line 1108  Line 1129 
1129                  }                  }
1130                  p += run;                  p += run;
1131    
1132    #ifdef _DEBUG
1133                    if(p>=64)       {
1134                      DPRINTF(XVID_DEBUG_ERROR,"error: overflow in coefficient index\n");
1135                      return;
1136                    }
1137    #endif
1138    
1139                  if (level < 0) {                  if (level < 0) {
1140                          level = level*quant_m_2 - quant_add;                          level = level*quant_m_2 - quant_add;
1141                          block[scan[p]] = (level >= -2048 ? level : -2048);                          block[scan[p]] = (level >= -2048 ? level : -2048);
# Line 1143  Line 1171 
1171                  }                  }
1172                  p += run;                  p += run;
1173    
1174    #ifdef _DEBUG
1175                    if(p>=64)       {
1176                      DPRINTF(XVID_DEBUG_ERROR,"error: overflow in coefficient index\n");
1177                      return;
1178                    }
1179    #endif
1180    
1181                  if (level < 0) {                  if (level < 0) {
1182                          level = ((2 * -level + 1) * matrix[scan[p]] * quant) >> 4;                          level = ((2 * -level + 1) * matrix[scan[p]] * quant) >> 4;
1183                          block[scan[p]] = (level <= 2048 ? -level : -2048);                          block[scan[p]] = (level <= 2048 ? -level : -2048);
# Line 1939  Line 1974 
1974  };  };
1975    
1976  short const dc_threshold[] = {  short const dc_threshold[] = {
1977          21514, 26984,  8307, 28531, 29798, 24951, 25970, 26912,          26708, 29545, 29472, 26223, 30580, 29281,  8293, 29545,
1978           8307, 25956, 26994, 25974,  8292, 29286, 28015, 29728,          25632, 29285, 30313, 25701, 26144, 28530,  8301, 26740,
1979          25960, 18208, 21838, 18208, 19536, 22560, 26998,  8260,           8293, 20039,  8277, 20551,  8268, 30296, 17513, 25376,
1980          28515, 25956,  8291, 25640, 30309, 27749, 11817, 22794,          25711, 25445, 10272, 11825, 11825, 10544,  2606, 28505,
1981          30063,  8306, 28531, 29798, 24951, 25970, 25632, 29545,          29301, 29472, 26223, 30580, 29281,  8293, 26980, 29811,
1982          29300, 25193, 29813, 29295, 26656, 29537, 29728,  8303,          26994, 30050, 28532,  8306, 24936,  8307, 28532, 26400,
1983          26983, 25974, 24864, 25443, 29541,  8307, 28532, 26912,          30313,  8293, 25441, 25955, 29555, 29728,  8303, 29801,
1984          29556, 29472, 30063, 25458,  8293, 28515, 25956,  2606           8307, 28531, 29301, 25955, 25376, 25711, 11877,    10
1985  };  };
1986    
1987  VLC const dc_lum_tab[] = {  VLC const dc_lum_tab[] = {

Legend:
Removed from v.1567  
changed lines
  Added in v.1677

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