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

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

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

revision 1566, Sun Dec 5 13:56:13 2004 UTC revision 1663, Sat Dec 10 05:20:35 2005 UTC
# Line 21  Line 21 
21   *  along with this program ; if not, write to the Free Software   *  along with this program ; if not, write to the Free Software
22   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
23   *   *
24   * $Id: mbtransquant.c,v 1.26 2004-12-05 13:56:13 syskin Exp $   * $Id: mbtransquant.c,v 1.31 2005-12-10 05:20:35 syskin Exp $
25   *   *
26   ****************************************************************************/   ****************************************************************************/
27    
# Line 90  Line 90 
90    
91          /* Perform DCT */          /* Perform DCT */
92          start_timer();          start_timer();
93          fdct(&data[0 * 64]);          fdct((short * const)&data[0 * 64]);
94          fdct(&data[1 * 64]);          fdct((short * const)&data[1 * 64]);
95          fdct(&data[2 * 64]);          fdct((short * const)&data[2 * 64]);
96          fdct(&data[3 * 64]);          fdct((short * const)&data[3 * 64]);
97          fdct(&data[4 * 64]);          fdct((short * const)&data[4 * 64]);
98          fdct(&data[5 * 64]);          fdct((short * const)&data[5 * 64]);
99          stop_dct_timer();          stop_dct_timer();
100  }  }
101    
# Line 105  Line 105 
105             const uint8_t cbp)             const uint8_t cbp)
106  {  {
107          start_timer();          start_timer();
108          if(cbp & (1 << (5 - 0))) idct(&data[0 * 64]);          if(cbp & (1 << (5 - 0))) idct((short * const)&data[0 * 64]);
109          if(cbp & (1 << (5 - 1))) idct(&data[1 * 64]);          if(cbp & (1 << (5 - 1))) idct((short * const)&data[1 * 64]);
110          if(cbp & (1 << (5 - 2))) idct(&data[2 * 64]);          if(cbp & (1 << (5 - 2))) idct((short * const)&data[2 * 64]);
111          if(cbp & (1 << (5 - 3))) idct(&data[3 * 64]);          if(cbp & (1 << (5 - 3))) idct((short * const)&data[3 * 64]);
112          if(cbp & (1 << (5 - 4))) idct(&data[4 * 64]);          if(cbp & (1 << (5 - 4))) idct((short * const)&data[4 * 64]);
113          if(cbp & (1 << (5 - 5))) idct(&data[5 * 64]);          if(cbp & (1 << (5 - 5))) idct((short * const)&data[5 * 64]);
114          stop_idct_timer();          stop_idct_timer();
115  }  }
116    
# Line 183  Line 183 
183                                             const uint16_t * const Zigzag,                                             const uint16_t * const Zigzag,
184                                             const uint16_t * const QuantMatrix,                                             const uint16_t * const QuantMatrix,
185                                             int Non_Zero,                                             int Non_Zero,
186                                             int Sum);                                             int Sum,
187                                               int Lambda_Mod);
188    
189  /* Quantize all blocks -- Inter mode */  /* Quantize all blocks -- Inter mode */
190  static __inline uint8_t  static __inline uint8_t
# Line 216  Line 217 
217    
218                  sum = quant[mpeg](&qcoeff[i*64], &data[i*64], pMB->quant, pParam->mpeg_quant_matrices);                  sum = quant[mpeg](&qcoeff[i*64], &data[i*64], pMB->quant, pParam->mpeg_quant_matrices);
219    
220                  if(sum && (frame->vop_flags & XVID_VOP_TRELLISQUANT)) {                  if(sum && (pMB->quant > 2) && (frame->vop_flags & XVID_VOP_TRELLISQUANT)) {
221                          const uint16_t *matrix;                          const uint16_t *matrix;
222                          const static uint16_t h263matrix[] =                          const static uint16_t h263matrix[] =
223                                  {                                  {
# Line 235  Line 236 
236                                                                                   pMB->quant, &scan_tables[0][0],                                                                                   pMB->quant, &scan_tables[0][0],
237                                                                                   matrix,                                                                                   matrix,
238                                                                                   63,                                                                                   63,
239                                                                                   sum);                                                                                   sum,
240                                                                                     pMB->lambda[i]);
241                  }                  }
242                  stop_quant_timer();                  stop_quant_timer();
243    
# Line 756  Line 758 
758          return -1;          return -1;
759  }  }
760    
761    #define TRELLIS_MIN_EFFORT      3
762    
763  /* this routine has been strippen of all debug code */  /* this routine has been strippen of all debug code */
764  static int  static int
765  dct_quantize_trellis_c(int16_t *const Out,  dct_quantize_trellis_c(int16_t *const Out,
# Line 764  Line 768 
768                                             const uint16_t * const Zigzag,                                             const uint16_t * const Zigzag,
769                                             const uint16_t * const QuantMatrix,                                             const uint16_t * const QuantMatrix,
770                                             int Non_Zero,                                             int Non_Zero,
771                                             int Sum)                                             int Sum,
772                                               int Lambda_Mod)
773  {  {
774    
775          /* Note: We should search last non-zero coeffs on *real* DCT input coeffs          /* Note: We should search last non-zero coeffs on *real* DCT input coeffs
# Line 774  Line 779 
779           * helps. */           * helps. */
780          typedef struct { int16_t Run, Level; } NODE;          typedef struct { int16_t Run, Level; } NODE;
781    
782          NODE Nodes[65], Last;          NODE Nodes[65], Last = { 0, 0};
783          uint32_t Run_Costs0[64+1];          uint32_t Run_Costs0[64+1];
784          uint32_t * const Run_Costs = Run_Costs0 + 1;          uint32_t * const Run_Costs = Run_Costs0 + 1;
785    
786          /* it's 1/lambda, actually */          /* it's 1/lambda, actually */
787          const int Lambda = Trellis_Lambda_Tabs[Q-1];          const int Lambda = (Lambda_Mod*Trellis_Lambda_Tabs[Q-1])>>LAMBDA_EXP;
788    
789          int Run_Start = -1;          int Run_Start = -1;
790          uint32_t Min_Cost = 2<<TL_SHIFT;          uint32_t Min_Cost = 2<<TL_SHIFT;
# Line 793  Line 798 
798          Run_Costs[-1] = 2<<TL_SHIFT;          Run_Costs[-1] = 2<<TL_SHIFT;
799    
800          Non_Zero = Find_Last(Out, Zigzag, Non_Zero);          Non_Zero = Find_Last(Out, Zigzag, Non_Zero);
801          if (Non_Zero<0)          if (Non_Zero < TRELLIS_MIN_EFFORT)
802                  return 0; /* Sum is zero if there are only zero coeffs */                  Non_Zero = TRELLIS_MIN_EFFORT;
803    
804          for(i=0; i<=Non_Zero; i++) {          for(i=0; i<=Non_Zero; i++) {
805                  const int q = ((Q*QuantMatrix[Zigzag[i]])>>4);                  const int q = ((Q*QuantMatrix[Zigzag[i]])>>4);

Legend:
Removed from v.1566  
changed lines
  Added in v.1663

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