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

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

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

revision 1.25.2.1, Mon Sep 23 20:36:01 2002 UTC revision 1.26, Sun Sep 8 14:43:04 2002 UTC
# Line 1  Line 1 
1   /******************************************************************************  /*****************************************************************************
2    *                                                                            *   *
3    *  This file is part of XviD, a free MPEG-4 video encoder/decoder            *   *  XVID MPEG-4 VIDEO CODEC
4    *                                                                            *   *  - Vector Length Coding tables -
5    *  XviD is an implementation of a part of one or more MPEG-4 Video tools     *   *
6    *  as specified in ISO/IEC 14496-2 standard.  Those intending to use this    *   *  Copyright(C) 2002 Michael Militzer <isibaar@xvid.org>
7    *  software module in hardware or software products are advised that its     *   *
8    *  use may infringe existing patents or copyrights, and any such use         *   *
9    *  would be at such party's own risk.  The original developer of this        *   *  This program is an implementation of a part of one or more MPEG-4
10    *  software module and his/her company, and subsequent editors and their     *   *  Video tools as specified in ISO/IEC 14496-2 standard.  Those intending
11    *  companies, will have no liability for use of this software or             *   *  to use this software module in hardware or software products are
12    *  modifications or derivatives thereof.                                     *   *  advised that its use may infringe existing patents or copyrights, and
13    *                                                                            *   *  any such use would be at such party's own risk.  The original
14    *  XviD is free software; you can redistribute it and/or modify it           *   *  developer of this software module and his/her company, and subsequent
15    *  under the terms of the GNU General Public License as published by         *   *  editors and their companies, will have no liability for use of this
16    *  the Free Software Foundation; either version 2 of the License, or         *   *  software or modifications or derivatives thereof.
17    *  (at your option) any later version.                                       *   *
18    *                                                                            *   *  This program is free software; you can redistribute it and/or modify
19    *  XviD is distributed in the hope that it will be useful, but               *   *  it under the terms of the GNU General Public License as published by
20    *  WITHOUT ANY WARRANTY; without even the implied warranty of                *   *  the Free Software Foundation; either version 2 of the License, or
21    *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             *   *  (at your option) any later version.
22    *  GNU General Public License for more details.                              *   *
23    *                                                                            *   *  This program is distributed in the hope that it will be useful,
24    *  You should have received a copy of the GNU General Public License         *   *  but WITHOUT ANY WARRANTY; without even the implied warranty of
25    *  along with this program; if not, write to the Free Software               *   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
26    *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA  *   *  GNU General Public License for more details.
27    *                                                                            *   *
28    ******************************************************************************/   *  You should have received a copy of the GNU General Public License
29     *  along with this program; if not, write to the Free Software
30   /******************************************************************************   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
31    *                                                                            *   *
32    *  mbcoding.c                                                                *   * $Id$
33    *                                                                            *   *
34    *  Copyright (C) 2002 - Michael Militzer <isibaar@xvid.org>                  *   ****************************************************************************/
   *                                                                            *  
   *  For more information visit the XviD homepage: http://www.xvid.org         *  
   *                                                                            *  
   ******************************************************************************/  
   
  /******************************************************************************  
   *                                                                                                                                                        *  
   *  Revision history:                                                         *  
   *                                                                            *  
   *  28.06.2002 added check_resync_marker()                                    *  
   *  14.04.2002 bframe encoding                                                                                            *  
   *  08.03.2002 initial version; isibaar                                                           *  
   *                                                                                                                                                        *  
   ******************************************************************************/  
   
   
35    
36  #include <stdlib.h>  #include <stdlib.h>
37  #include "../portab.h"  #include "../portab.h"
# Line 61  Line 45 
45  #define ABS(X) (((X)>0)?(X):-(X))  #define ABS(X) (((X)>0)?(X):-(X))
46  #define CLIP(X,A) (X > A) ? (A) : (X)  #define CLIP(X,A) (X > A) ? (A) : (X)
47    
48  VLC intra_table[524032];  /*****************************************************************************
49  VLC inter_table[524032];   * Local data
50     ****************************************************************************/
51  VLC DCT3Dintra[4096];  
52  VLC DCT3Dinter[4096];  static VLC intra_table[524032];
53    static VLC inter_table[524032];
54    
55    static VLC DCT3Dintra[4096];
56    static VLC DCT3Dinter[4096];
57    
58    /*****************************************************************************
59     * Functions
60     ****************************************************************************/
61    
62  void  void
63  init_vlc_tables(void)  init_vlc_tables(void)
# Line 82  Line 74 
74          vlc[0] = intra_table;          vlc[0] = intra_table;
75          vlc[1] = inter_table;          vlc[1] = inter_table;
76    
77          // generate encoding vlc lookup tables          /*
78          // the lookup table idea is taken from the excellent fame project by Vivien Chapellier           * Generate encoding vlc lookup tables
79             * the lookup table idea is taken from the excellent fame project
80             * by Vivien Chapellier
81             */
82          for (i = 0; i < 4; i++) {          for (i = 0; i < 4; i++) {
83                  intra = i % 2;                  intra = i % 2;
84                  last = i / 2;                  last = i / 2;
# Line 280  Line 275 
275  }  }
276    
277    
278  static __inline void  static void
279  CodeBlockIntra(const FRAMEINFO * frame,  CodeBlockIntra(const FRAMEINFO * frame,
280                             const MACROBLOCK * pMB,                             const MACROBLOCK * pMB,
281                             int16_t qcoeff[6 * 64],                             int16_t qcoeff[6 * 64],
# Line 425  Line 420 
420    
421  }  }
422    
423  /*  
 // moved to mbcoding.h so that in can be 'static __inline'  
424  void  void
425  MBSkip(Bitstream * bs)  MBSkip(Bitstream * bs)
426  {  {
427          BitstreamPutBit(bs, 1); // not coded          BitstreamPutBit(bs, 1); // not coded
428            return;
429  }  }
430  */  
431    
432  /***************************************************************  /***************************************************************
433   * bframe encoding start   * bframe encoding start
# Line 446  Line 441 
441          3       0001b   forward mc+q            dbquant, mvdf          3       0001b   forward mc+q            dbquant, mvdf
442  */  */
443    
444  static __inline void  void
445  put_bvop_mbtype(Bitstream * bs,  put_bvop_mbtype(Bitstream * bs,
446                                  int value)                                  int value)
447  {  {
448          switch (value) {          switch (value) {
449                  case MODE_FORWARD:          case 0:
450                    BitstreamPutBit(bs, 1);
451                    return;
452    
453            case 1:
454                    BitstreamPutBit(bs, 0);
455                    BitstreamPutBit(bs, 1);
456                    return;
457    
458            case 2:
459                    BitstreamPutBit(bs, 0);
460                    BitstreamPutBit(bs, 0);
461                    BitstreamPutBit(bs, 1);
462                    return;
463    
464            case 3:
465                          BitstreamPutBit(bs, 0);                          BitstreamPutBit(bs, 0);
                 case MODE_BACKWARD:  
466                          BitstreamPutBit(bs, 0);                          BitstreamPutBit(bs, 0);
                 case MODE_INTERPOLATE:  
467                          BitstreamPutBit(bs, 0);                          BitstreamPutBit(bs, 0);
                 case MODE_DIRECT:  
468                          BitstreamPutBit(bs, 1);                          BitstreamPutBit(bs, 1);
469                  default:                  return;
470                          break;  
471            default:;                                       // invalid!
472    
473          }          }
474    
475  }  }
476    
477  /*  /*
# Line 471  Line 481 
481          +2      11b          +2      11b
482  */  */
483    
484  static __inline void  void
485  put_bvop_dbquant(Bitstream * bs,  put_bvop_dbquant(Bitstream * bs,
486                                   int value)                                   int value)
487  {  {
# Line 504  Line 514 
514                           Bitstream * bs,                           Bitstream * bs,
515                           Statistics * pStat)                           Statistics * pStat)
516  {  {
517          int vcode = fcode;          int i;
         unsigned int i;  
518    
519  /*      ------------------------------------------------------------------  /*      ------------------------------------------------------------------
520                  when a block is skipped it is decoded DIRECT(0,0)                  when a block is skipped it is decoded DIRECT(0,0)
# Line 535  Line 544 
544                  put_bvop_dbquant(bs, 0);        // todo: mb->dquant = 0                  put_bvop_dbquant(bs, 0);        // todo: mb->dquant = 0
545          }          }
546    
547          switch (mb->mode) {          if (mb->mode == MODE_INTERPOLATE || mb->mode == MODE_FORWARD) {
548                  case MODE_INTERPOLATE:                  CodeVector(bs, mb->pmvs[0].x, fcode, pStat);
549                          CodeVector(bs, mb->pmvs[1].x, vcode, pStat); //forward vector of interpolate mode                  CodeVector(bs, mb->pmvs[0].y, fcode, pStat);
550                          CodeVector(bs, mb->pmvs[1].y, vcode, pStat);          }
551                  case MODE_BACKWARD:  
552                          vcode = bcode;          if (mb->mode == MODE_INTERPOLATE || mb->mode == MODE_BACKWARD) {
553                  case MODE_FORWARD:                  CodeVector(bs, mb->b_pmvs[0].x, bcode, pStat);
554                          CodeVector(bs, mb->pmvs[0].x, vcode, pStat);                  CodeVector(bs, mb->b_pmvs[0].y, bcode, pStat);
555                          CodeVector(bs, mb->pmvs[0].y, vcode, pStat);          }
556                          break;  
557                  case MODE_DIRECT:          if (mb->mode == MODE_DIRECT) {
558                          CodeVector(bs, mb->pmvs[3].x, 1, pStat);        // fcode is always 1 for delta vector                  CodeVector(bs, mb->deltamv.x, 1, pStat);                /* fcode is always 1 for delta vector */
559                          CodeVector(bs, mb->pmvs[3].y, 1, pStat);        // prediction is always (0,0)                  CodeVector(bs, mb->deltamv.y, 1, pStat);                /* prediction is always (0,0) */
                 default: break;  
560          }          }
561    
562          for (i = 0; i < 6; i++) {          for (i = 0; i < 6; i++) {
# Line 636  Line 644 
644    
645  }  }
646    
647  static __inline int  int
648  get_mv_data(Bitstream * bs)  get_mv_data(Bitstream * bs)
649  {  {
650    
# Line 753  Line 761 
761  {  {
762    
763          const uint16_t *scan = scan_tables[direction];          const uint16_t *scan = scan_tables[direction];
764          int level, run, last;          int level;
765            int run;
766            int last;
767    
768          do {          do {
769                  level = get_coeff(bs, &run, &last, 1, 0);                  level = get_coeff(bs, &run, &last, 1, 0);

Legend:
Removed from v.1.25.2.1  
changed lines
  Added in v.1.26

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