1 |
/************************************************************************** |
/***************************************************************************** |
2 |
* |
* |
3 |
* XVID MPEG-4 VIDEO CODEC |
* XVID MPEG-4 VIDEO CODEC |
4 |
* - Motion estimation header - |
* - Motion Estimation related header - |
5 |
* |
* |
6 |
* This program is an implementation of a part of one or more MPEG-4 |
* Copyright(C) 2002 Christoph Lampert <gruel@web.de> |
7 |
* Video tools as specified in ISO/IEC 14496-2 standard. Those intending |
* 2002 Michael Militzer <michael@xvid.org> |
8 |
* to use this software module in hardware or software products are |
* 2002-2003 Radoslaw Czyz <xvid@syskin.cjb.net> |
|
* advised that its use may infringe existing patents or copyrights, and |
|
|
* any such use would be at such party's own risk. The original |
|
|
* developer of this software module and his/her company, and subsequent |
|
|
* editors and their companies, will have no liability for use of this |
|
|
* software or modifications or derivatives thereof. |
|
9 |
* |
* |
10 |
* This program is free software; you can redistribute it and/or modify |
* This program is free software; you can redistribute it and/or modify |
11 |
* it under the terms of the GNU General Public License as published by |
* it under the terms of the GNU General Public License as published by |
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: motion_est.h,v 1.3.2.8 2003-06-09 01:22:18 edgomez Exp $ |
* $Id: motion_est.h,v 1.3.2.10 2003-06-19 09:59:37 syskin Exp $ |
25 |
* |
* |
26 |
***************************************************************************/ |
****************************************************************************/ |
27 |
|
|
28 |
#ifndef _MOTION_EST_H_ |
#ifndef _MOTION_EST_H_ |
29 |
#define _MOTION_EST_H_ |
#define _MOTION_EST_H_ |
350 |
int bits, i; |
int bits, i; |
351 |
const int lambda = LAMBDA*quant*quant; |
const int lambda = LAMBDA*quant*quant; |
352 |
int distortion = 0; |
int distortion = 0; |
353 |
uint32_t iDcScaler = get_dc_scaler(quant, block > 3); |
uint32_t iDcScaler = get_dc_scaler(quant, block < 4); |
354 |
int b_dc; |
int b_dc; |
355 |
|
|
356 |
fdct(data); |
fdct(data); |
357 |
data[0] -= 1024; |
data[0] -= 1024; |
358 |
|
|
359 |
if (quant_type == 0) quant_intra(coeff, data, quant, iDcScaler); |
if (quant_type == 0) quant_intra_c(coeff, data, quant, iDcScaler); // MUST BE _C |
360 |
else quant4_intra(coeff, data, quant, iDcScaler); |
else quant4_intra_c(coeff, data, quant, iDcScaler); // MUST BE _C |
361 |
|
|
362 |
b_dc = coeff[0]; |
b_dc = coeff[0]; |
363 |
if (block < 4) { |
if (block < 4) { |
365 |
*dcpred = b_dc; |
*dcpred = b_dc; |
366 |
} |
} |
367 |
|
|
|
*cbp |= 1 << (5 - block); |
|
368 |
bits = BITS_MULT*CodeCoeffIntra_CalcBits(coeff, scan_tables[0]); |
bits = BITS_MULT*CodeCoeffIntra_CalcBits(coeff, scan_tables[0]); |
|
bits += BITS_MULT*dcy_tab[coeff[0] + 255].len; |
|
369 |
if (bits != 0) *cbp |= 1 << (5 - block); |
if (bits != 0) *cbp |= 1 << (5 - block); |
370 |
|
|
371 |
|
if (block < 4) bits += BITS_MULT*dcy_tab[coeff[0] + 255].len; |
372 |
|
else bits += BITS_MULT*dcc_tab[coeff[0] + 255].len; |
373 |
|
|
374 |
coeff[0] = b_dc; |
coeff[0] = b_dc; |
375 |
if (quant_type == 0) dequant_intra(coeff, coeff, quant, iDcScaler); |
if (quant_type == 0) dequant_intra(coeff, coeff, quant, iDcScaler); |
376 |
else dequant4_intra(coeff, coeff, quant, iDcScaler); |
else dequant4_intra(coeff, coeff, quant, iDcScaler); |
384 |
return bits; |
return bits; |
385 |
} |
} |
386 |
|
|
387 |
|
|
388 |
#endif /* _MOTION_EST_H_ */ |
#endif /* _MOTION_EST_H_ */ |