[svn] / trunk / xvidcore / src / motion / motion_est.h Repository:
ViewVC logotype

Diff of /trunk/xvidcore/src/motion/motion_est.h

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

revision 976, Tue Apr 8 11:12:07 2003 UTC revision 1074, Thu Jun 26 10:37:42 2003 UTC
# Line 26  Line 26 
26   *  along with this program; if not, write to the Free Software   *  along with this program; if not, write to the Free Software
27   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
28   *   *
29   *  $Id: motion_est.h,v 1.6 2003-04-08 11:12:07 syskin Exp $   *  $Id: motion_est.h,v 1.10 2003-06-26 10:37:42 syskin Exp $
30   *   *
31   ***************************************************************************/   ***************************************************************************/
32    
# Line 50  Line 50 
50  #define NEIGH_TEND_8X8          40.0  #define NEIGH_TEND_8X8          40.0
51  #define NEIGH_8X8_BIAS          30  #define NEIGH_8X8_BIAS          30
52    
53    #define BITS_MULT                       16
54    
55  /* Parameters which control inter/inter4v decision */  /* Parameters which control inter/inter4v decision */
56  #define IMV16X16                        2  #define IMV16X16                        2
57    
# Line 135  Line 137 
137          VECTOR directmvF[4];          VECTOR directmvF[4];
138          VECTOR directmvB[4];          VECTOR directmvB[4];
139          const VECTOR * referencemv;          const VECTOR * referencemv;
140  // _BITS stuff  // BITS/R-D stuff
141          int16_t * dctSpace;          int16_t * dctSpace;
142            uint32_t iQuant;
143            uint32_t quant_type;
144    
145  } SearchData;  } SearchData;
146    
# Line 218  Line 222 
222                  const int y,                  const int y,
223                  const uint32_t MotionFlags,                  const uint32_t MotionFlags,
224                  const uint32_t GlobalFlags,                  const uint32_t GlobalFlags,
                 const uint32_t iQuant,  
225                  SearchData * const Data,                  SearchData * const Data,
226                  const MBParam * const pParam,                  const MBParam * const pParam,
227                  const MACROBLOCK * const pMBs,                  const MACROBLOCK * const pMBs,
228                  const MACROBLOCK * const prevMBs,                  const MACROBLOCK * const prevMBs,
                 int inter4v,  
229                  MACROBLOCK * const pMB);                  MACROBLOCK * const pMB);
230    
231    
# Line 263  Line 265 
265          if (Flags & QUARTERPELREFINE8_BITS)          if (Flags & QUARTERPELREFINE8_BITS)
266                  Flags &= ~PMV_QUARTERPELREFINE8;                  Flags &= ~PMV_QUARTERPELREFINE8;
267    
268            if (Flags & QUARTERPELREFINE16_BITS)
269                    Flags &= ~PMV_QUARTERPELREFINE16;
270    
271          if (!(GlobalFlags & XVID_QUARTERPEL))          if (!(GlobalFlags & XVID_QUARTERPEL))
272                  Flags &= ~(PMV_QUARTERPELREFINE16+PMV_QUARTERPELREFINE8+QUARTERPELREFINE16_BITS+QUARTERPELREFINE8_BITS);                  Flags &= ~(PMV_QUARTERPELREFINE16+PMV_QUARTERPELREFINE8+QUARTERPELREFINE16_BITS+QUARTERPELREFINE8_BITS);
273    
# Line 281  Line 286 
286  #include "../quant/quant_mpeg4.h"  #include "../quant/quant_mpeg4.h"
287  #include "../quant/quant_h263.h"  #include "../quant/quant_h263.h"
288  #include "../bitstream/vlc_codes.h"  #include "../bitstream/vlc_codes.h"
289    #include "../dct/fdct.h"
290    
291  static int  static int
292  CountMBBitsInter(SearchData * const Data,  CountMBBitsInter(SearchData * const Data,
# Line 301  Line 307 
307  int CodeCoeffIntra_CalcBits(const int16_t qcoeff[64], const uint16_t * zigzag);  int CodeCoeffIntra_CalcBits(const int16_t qcoeff[64], const uint16_t * zigzag);
308  int CodeCoeffInter_CalcBits(const int16_t qcoeff[64], const uint16_t * zigzag);  int CodeCoeffInter_CalcBits(const int16_t qcoeff[64], const uint16_t * zigzag);
309    
310    /* one over lambda for R-D mode decision and motion search */
311    #define LAMBDA          ( (int)(BITS_MULT/1.0) )
312    
313    static __inline unsigned int
314    Block_CalcBits( int16_t * const coeff,
315                                    int16_t * const data,
316                                    int16_t * const dqcoeff,
317                                    const uint32_t quant, const int quant_type,
318                                    uint32_t * cbp,
319                                    const int block)
320    {
321            int sum;
322            int bits;
323            int distortion = 0;
324            int i;
325    
326            fdct(data);
327    
328            if (quant_type == 0) sum = quant_inter(coeff, data, quant);
329            else sum = quant4_inter(coeff, data, quant);
330    
331            if (sum > 0) {
332                    *cbp |= 1 << (5 - block);
333                    bits = BITS_MULT * CodeCoeffInter_CalcBits(coeff, scan_tables[0]);
334            } else bits = 0;
335    
336            if (quant_type == 0) dequant_inter(dqcoeff, coeff, quant);
337            else dequant4_inter(dqcoeff, coeff, quant);
338    
339            for (i = 0; i < 64; i++) {
340                    distortion += (data[i] - dqcoeff[i])*(data[i] - dqcoeff[i]);
341            }
342    
343            bits += (LAMBDA*distortion)/(quant*quant);
344    
345            return bits;
346    }
347    
348    static __inline unsigned int
349    Block_CalcBitsIntra(int16_t * const coeff,
350                                            int16_t * const data,
351                                            int16_t * const dqcoeff,
352                                            const uint32_t quant, const int quant_type,
353                                            uint32_t * cbp,
354                                            const int block,
355                                            int * dcpred)
356    {
357            int bits, i;
358            int distortion = 0;
359            uint32_t iDcScaler = get_dc_scaler(quant, block < 4);
360            int b_dc;
361    
362            fdct(data);
363            data[0] -= 1024;
364    
365            if (quant_type == 0) quant_intra(coeff, data, quant, iDcScaler);
366            else quant4_intra(coeff, data, quant, iDcScaler);
367    
368            b_dc = coeff[0];
369            if (block < 4) {
370                    coeff[0] -= *dcpred;
371                    *dcpred = b_dc;
372            }
373    
374            bits = BITS_MULT*CodeCoeffIntra_CalcBits(coeff, scan_tables[0]);
375            if (bits != 0) *cbp |= 1 << (5 - block);
376    
377            if (block < 4) bits += BITS_MULT*dcy_tab[coeff[0] + 255].len;
378            else bits += BITS_MULT*dcc_tab[coeff[0] + 255].len;
379    
380            coeff[0] = b_dc;
381            if (quant_type == 0) dequant_intra(dqcoeff, coeff, quant, iDcScaler);
382            else dequant4_intra(dqcoeff, coeff, quant, iDcScaler);
383    
384            for (i = 0; i < 64; i++) {
385                    distortion += (data[i] - dqcoeff[i])*(data[i] - dqcoeff[i]);
386            }
387    
388            bits += (LAMBDA*distortion)/(quant*quant);
389    
390            return bits;
391    }
392    
393  #endif                                                  /* _MOTION_EST_H_ */  #endif                                                  /* _MOTION_EST_H_ */

Legend:
Removed from v.976  
changed lines
  Added in v.1074

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