[cvs] / xvidcore / src / utils / mbtransquant.c Repository:
ViewVC logotype

Diff of /xvidcore/src/utils/mbtransquant.c

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

revision 1.9, Sat Aug 17 16:22:58 2002 UTC revision 1.20, Tue Nov 26 23:44:11 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    *                                                                            *   *  - MacroBlock transfer and quantization -
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-2001 Christoph Lampert <gruel@web.de>
7    *  software module in hardware or software products are advised that its     *   *               2002-2001 Michael Militzer <isibaar@xvid.org>
8    *  use may infringe existing patents or copyrights, and any such use         *   *               2002-2001 Peter Ross <pross@xvid.org>
9    *  would be at such party's own risk.  The original developer of this        *   *               2002      Daniel Smith <danielsmith@astroboymail.com>
10    *  software module and his/her company, and subsequent editors and their     *   *
11    *  companies, will have no liability for use of this software or             *   *  This file is part of XviD, a free MPEG-4 video encoder/decoder
12    *  modifications or derivatives thereof.                                     *   *
13    *                                                                            *   *  XviD is free software; you can redistribute it and/or modify it
14    *  XviD is free software; you can redistribute it and/or modify it           *   *  under the terms of the GNU General Public License as published by
15    *  under the terms of the GNU General Public License as published by         *   *  the Free Software Foundation; either version 2 of the License, or
16    *  the Free Software Foundation; either version 2 of the License, or         *   *  (at your option) any later version.
17    *  (at your option) any later version.                                       *   *
18    *                                                                            *   *  This program is distributed in the hope that it will be useful,
19    *  XviD is distributed in the hope that it will be useful, but               *   *  but WITHOUT ANY WARRANTY; without even the implied warranty of
20    *  WITHOUT ANY WARRANTY; without even the implied warranty of                *   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21    *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             *   *  GNU General Public License for more details.
22    *  GNU General Public License for more details.                              *   *
23    *                                                                            *   *  You should have received a copy of the GNU General Public License
24    *  You should have received a copy of the GNU General Public License         *   *  along with this program; if not, write to the Free Software
25    *  along with this program; if not, write to the Free Software               *   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
26    *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA  *   *
27    *                                                                            *   *  Under section 8 of the GNU General Public License, the copyright
28    ******************************************************************************/   *  holders of XVID explicitly forbid distribution in the following
29     *  countries:
30   /******************************************************************************   *
31    *                                                                            *   *    - Japan
32    *  mbtransquant.c                                                            *   *    - United States of America
33    *                                                                            *   *
34    *  Copyright (C) 2001 - Peter Ross <pross@cs.rmit.edu.au>                    *   *  Linking XviD statically or dynamically with other modules is making a
35    *  Copyright (C) 2001 - Michael Militzer <isibaar@xvid.org>                  *   *  combined work based on XviD.  Thus, the terms and conditions of the
36    *                                                                            *   *  GNU General Public License cover the whole combination.
37    *  For more information visit the XviD homepage: http://www.xvid.org         *   *
38    *                                                                            *   *  As a special exception, the copyright holders of XviD give you
39    ******************************************************************************/   *  permission to link XviD with independent modules that communicate with
40     *  XviD solely through the VFW1.1 and DShow interfaces, regardless of the
41   /******************************************************************************   *  license terms of these independent modules, and to copy and distribute
42    *                                                                            *   *  the resulting combined work under terms of your choice, provided that
43    *  Revision history:                                                         *   *  every copy of the combined work is accompanied by a complete copy of
44    *                                                                            *   *  the source code of XviD (the version of XviD used to produce the
45    *  29.03.2002 interlacing speedup - used transfer strides instead of             *   *  combined work), being distributed under the terms of the GNU General
46    *             manual field-to-frame conversion                                                           *   *  Public License plus this exception.  An independent module is a module
47    *  26.03.2002 interlacing support - moved transfers outside loops                        *   *  which is not derived from or based on XviD.
48    *  22.12.2001 get_dc_scaler() moved to common.h                                                          *   *
49    *  19.11.2001 introduced coefficient thresholding (Isibaar)                  *   *  Note that people who make modified versions of XviD are not obligated
50    *  17.11.2001 initial version                                                *   *  to grant this special exception for their modified versions; it is
51    *                                                                            *   *  their choice whether to do so.  The GNU General Public License gives
52    ******************************************************************************/   *  permission to release a modified version without this exception; this
53     *  exception also makes it possible to release a modified version which
54     *  carries forward this exception.
55     *
56     * $Id$
57     *
58     ****************************************************************************/
59    
60  #include <string.h>  #include <string.h>
61    
# Line 105  Line 111 
111    
112          start_timer();          start_timer();
113          pMB->field_dct = 0;          pMB->field_dct = 0;
114          if ((frame->global_flags & XVID_INTERLACING)) {          if ((frame->global_flags & XVID_INTERLACING) &&
115                    (x_pos>0) && (x_pos<pParam->mb_width-1) &&
116                    (y_pos>0) && (y_pos<pParam->mb_height-1)) {
117                  pMB->field_dct = MBDecideFieldDCT(data);                  pMB->field_dct = MBDecideFieldDCT(data);
118          }          }
119          stop_interlacing_timer();          stop_interlacing_timer();
# Line 183  Line 191 
191    
192          start_timer();          start_timer();
193          pMB->field_dct = 0;          pMB->field_dct = 0;
194          if ((frame->global_flags & XVID_INTERLACING)) {          if ((frame->global_flags & XVID_INTERLACING) &&
195                    (x_pos>0) && (x_pos<pParam->mb_width-1) &&
196                    (y_pos>0) && (y_pos<pParam->mb_height-1)) {
197                  pMB->field_dct = MBDecideFieldDCT(data);                  pMB->field_dct = MBDecideFieldDCT(data);
198          }          }
199          stop_interlacing_timer();          stop_interlacing_timer();
# Line 296  Line 306 
306  MBTransQuantInterBVOP(const MBParam * pParam,  MBTransQuantInterBVOP(const MBParam * pParam,
307                                    FRAMEINFO * frame,                                    FRAMEINFO * frame,
308                                    MACROBLOCK * pMB,                                    MACROBLOCK * pMB,
                                   const uint32_t x_pos,  
                                   const uint32_t y_pos,  
309                                    int16_t data[6 * 64],                                    int16_t data[6 * 64],
310                                    int16_t qcoeff[6 * 64])                                    int16_t qcoeff[6 * 64])
311  {  {
# Line 380  Line 388 
388  MBQuantIntra(const MBParam * pParam,  MBQuantIntra(const MBParam * pParam,
389                           FRAMEINFO * frame,                           FRAMEINFO * frame,
390                           MACROBLOCK *pMB,                           MACROBLOCK *pMB,
391                       int16_t qcoeff[6 * 64],                           int16_t data[6 * 64],
392                           int16_t data[6*64])                       int16_t qcoeff[6 * 64])
393  {  {
394          int i;          int i;
395          int iQuant = frame->quant;          int iQuant = frame->quant;
# Line 454  Line 462 
462                          stop_quant_timer();                          stop_quant_timer();
463                  }                  }
464    
465                  if (sum >= TOOSMALL_LIMIT) {    // skip block ?                  if (sum >= TOOSMALL_LIMIT) {    /* skip block ? */
466                          cbp |= 1 << (5 - i);                          cbp |= 1 << (5 - i);
467                  }                  }
468          }          }
# Line 614  Line 622 
622                  }                  }
623          }          }
624    
625          if (frame > field) {          if (frame > (field + 350)) {
626                  MBFrameToField(data);                  MBFrameToField(data);
627          }          }
628    
629          return (frame > field);          return (frame > (field + 350));
630  }  }
631    
632    
# Line 634  Line 642 
642    
643          /* left blocks */          /* left blocks */
644    
645          // 1=2, 2=4, 4=8, 8=1          /* 1=2, 2=4, 4=8, 8=1 */
646          MOVLINE(tmp, LINE(0, 1));          MOVLINE(tmp, LINE(0, 1));
647          MOVLINE(LINE(0, 1), LINE(0, 2));          MOVLINE(LINE(0, 1), LINE(0, 2));
648          MOVLINE(LINE(0, 2), LINE(0, 4));          MOVLINE(LINE(0, 2), LINE(0, 4));
649          MOVLINE(LINE(0, 4), LINE(2, 0));          MOVLINE(LINE(0, 4), LINE(2, 0));
650          MOVLINE(LINE(2, 0), tmp);          MOVLINE(LINE(2, 0), tmp);
651    
652          // 3=6, 6=12, 12=9, 9=3          /* 3=6, 6=12, 12=9, 9=3 */
653          MOVLINE(tmp, LINE(0, 3));          MOVLINE(tmp, LINE(0, 3));
654          MOVLINE(LINE(0, 3), LINE(0, 6));          MOVLINE(LINE(0, 3), LINE(0, 6));
655          MOVLINE(LINE(0, 6), LINE(2, 4));          MOVLINE(LINE(0, 6), LINE(2, 4));
656          MOVLINE(LINE(2, 4), LINE(2, 1));          MOVLINE(LINE(2, 4), LINE(2, 1));
657          MOVLINE(LINE(2, 1), tmp);          MOVLINE(LINE(2, 1), tmp);
658    
659          // 5=10, 10=5          /* 5=10, 10=5 */
660          MOVLINE(tmp, LINE(0, 5));          MOVLINE(tmp, LINE(0, 5));
661          MOVLINE(LINE(0, 5), LINE(2, 2));          MOVLINE(LINE(0, 5), LINE(2, 2));
662          MOVLINE(LINE(2, 2), tmp);          MOVLINE(LINE(2, 2), tmp);
663    
664          // 7=14, 14=13, 13=11, 11=7          /* 7=14, 14=13, 13=11, 11=7 */
665          MOVLINE(tmp, LINE(0, 7));          MOVLINE(tmp, LINE(0, 7));
666          MOVLINE(LINE(0, 7), LINE(2, 6));          MOVLINE(LINE(0, 7), LINE(2, 6));
667          MOVLINE(LINE(2, 6), LINE(2, 5));          MOVLINE(LINE(2, 6), LINE(2, 5));
# Line 662  Line 670 
670    
671          /* right blocks */          /* right blocks */
672    
673          // 1=2, 2=4, 4=8, 8=1          /* 1=2, 2=4, 4=8, 8=1 */
674          MOVLINE(tmp, LINE(1, 1));          MOVLINE(tmp, LINE(1, 1));
675          MOVLINE(LINE(1, 1), LINE(1, 2));          MOVLINE(LINE(1, 1), LINE(1, 2));
676          MOVLINE(LINE(1, 2), LINE(1, 4));          MOVLINE(LINE(1, 2), LINE(1, 4));
677          MOVLINE(LINE(1, 4), LINE(3, 0));          MOVLINE(LINE(1, 4), LINE(3, 0));
678          MOVLINE(LINE(3, 0), tmp);          MOVLINE(LINE(3, 0), tmp);
679    
680          // 3=6, 6=12, 12=9, 9=3          /* 3=6, 6=12, 12=9, 9=3 */
681          MOVLINE(tmp, LINE(1, 3));          MOVLINE(tmp, LINE(1, 3));
682          MOVLINE(LINE(1, 3), LINE(1, 6));          MOVLINE(LINE(1, 3), LINE(1, 6));
683          MOVLINE(LINE(1, 6), LINE(3, 4));          MOVLINE(LINE(1, 6), LINE(3, 4));
684          MOVLINE(LINE(3, 4), LINE(3, 1));          MOVLINE(LINE(3, 4), LINE(3, 1));
685          MOVLINE(LINE(3, 1), tmp);          MOVLINE(LINE(3, 1), tmp);
686    
687          // 5=10, 10=5          /* 5=10, 10=5 */
688          MOVLINE(tmp, LINE(1, 5));          MOVLINE(tmp, LINE(1, 5));
689          MOVLINE(LINE(1, 5), LINE(3, 2));          MOVLINE(LINE(1, 5), LINE(3, 2));
690          MOVLINE(LINE(3, 2), tmp);          MOVLINE(LINE(3, 2), tmp);
691    
692          // 7=14, 14=13, 13=11, 11=7          /* 7=14, 14=13, 13=11, 11=7 */
693          MOVLINE(tmp, LINE(1, 7));          MOVLINE(tmp, LINE(1, 7));
694          MOVLINE(LINE(1, 7), LINE(3, 6));          MOVLINE(LINE(1, 7), LINE(3, 6));
695          MOVLINE(LINE(3, 6), LINE(3, 5));          MOVLINE(LINE(3, 6), LINE(3, 5));

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.20

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