[cvs] / xvidcore / src / motion / gmc.h Repository:
ViewVC logotype

Annotation of /xvidcore/src/motion/gmc.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.2.5 - (view) (download)

1 : edgomez 1.1.2.3 /*****************************************************************************
2 : chl 1.1.2.1 *
3 : edgomez 1.1.2.3 * XVID MPEG-4 VIDEO CODEC
4 :     * - GMC interpolation module header -
5 : chl 1.1.2.1 *
6 : edgomez 1.1.2.3 * Copyright(C) 2002-2003 Pascal Massimino <skal@planet-d.net>
7 : chl 1.1.2.1 *
8 : edgomez 1.1.2.3 * This program is free software ; you can redistribute it and/or modify
9 :     * it under the terms of the GNU General Public License as published by
10 :     * the Free Software Foundation ; either version 2 of the License, or
11 :     * (at your option) any later version.
12 :     *
13 :     * This program is distributed in the hope that it will be useful,
14 :     * but WITHOUT ANY WARRANTY ; without even the implied warranty of
15 :     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 :     * GNU General Public License for more details.
17 :     *
18 :     * You should have received a copy of the GNU General Public License
19 :     * along with this program ; if not, write to the Free Software
20 :     * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 :     *
22 : edgomez 1.1.2.5 * $Id$
23 : edgomez 1.1.2.3 *
24 :     ****************************************************************************/
25 : chl 1.1.2.1
26 :     #include "../portab.h"
27 :     #include "../global.h"
28 :    
29 :     /* This is borrowed from decoder.c */
30 : edgomez 1.1.2.3 static __inline int
31 :     gmc_sanitize(int value, int quarterpel, int fcode)
32 : chl 1.1.2.1 {
33 :     int length = 1 << (fcode+4);
34 :    
35 : edgomez 1.1.2.5 #if 0
36 :     if (quarterpel) value *= 2;
37 :     #endif
38 : chl 1.1.2.1
39 :     if (value < -length)
40 :     return -length;
41 :     else if (value >= length)
42 :     return length-1;
43 :     else return value;
44 :     }
45 :    
46 :    
47 :     /* And this is borrowed from bitstream.c until we find a common solution */
48 :     static uint32_t __inline
49 :     log2bin(uint32_t value)
50 :     {
51 :     /* Changed by Chenm001 */
52 :     #if !defined(_MSC_VER)
53 :     int n = 0;
54 :    
55 :     while (value) {
56 : syskin 1.1.2.2 value >>= 1;
57 :     n++;
58 : chl 1.1.2.1 }
59 :     return n;
60 :     #else
61 :     __asm {
62 : syskin 1.1.2.2 bsr eax, value
63 :     inc eax
64 : chl 1.1.2.1 }
65 :     #endif
66 :     }
67 :     /* 16*sizeof(int) -> 1 or 2 cachelines */
68 :     /* table lookup might be faster! (still to be benchmarked) */
69 :    
70 :     /*
71 :     static int log2bin_table[16] =
72 :     { 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4};
73 :     */
74 : syskin 1.1.2.2 /* 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 */
75 : chl 1.1.2.1
76 :     #define RDIV(a,b) (((a)>0 ? (a) + ((b)>>1) : (a) - ((b)>>1))/(b))
77 :     #define RSHIFT(a,b) ( (a)>0 ? ((a) + (1<<((b)-1)))>>(b) : ((a) + (1<<((b)-1))-1)>>(b))
78 :    
79 :     #define MLT(i) (((16-(i))<<16) + (i))
80 :     static const uint32_t MTab[16] = {
81 :     MLT( 0), MLT( 1), MLT( 2), MLT( 3), MLT( 4), MLT( 5), MLT( 6), MLT( 7),
82 :     MLT( 8), MLT( 9), MLT(10), MLT(11), MLT(12), MLT(13), MLT(14), MLT(15)
83 :     };
84 :     #undef MLT
85 :    
86 :    
87 : edgomez 1.1.2.5 /* ************************************************************
88 :     * Pts = 2 or 3
89 :     *
90 :     * Warning! *src is the global frame pointer (that is: adress
91 :     * of pixel 0,0), not the macroblock one.
92 :     * Conversely, *dst is the macroblock top-left adress.
93 :     */
94 : chl 1.1.2.1
95 :     void Predict_16x16_C(const NEW_GMC_DATA * const This,
96 : syskin 1.1.2.2 uint8_t *dst, const uint8_t *src,
97 :     int dststride, int srcstride, int x, int y, int rounding);
98 : chl 1.1.2.1
99 :     void Predict_8x8_C(const NEW_GMC_DATA * const This,
100 : syskin 1.1.2.2 uint8_t *uDst, const uint8_t *uSrc,
101 :     uint8_t *vDst, const uint8_t *vSrc,
102 :     int dststride, int srcstride, int x, int y, int rounding);
103 : chl 1.1.2.1
104 : syskin 1.1.2.2 void get_average_mv_C(const NEW_GMC_DATA * const Dsp, VECTOR * const mv,
105 :     int x, int y, int qpel);
106 : chl 1.1.2.1
107 : edgomez 1.1.2.5 /* ************************************************************
108 :     * simplified version for 1 warp point
109 :     */
110 : chl 1.1.2.1
111 :     void Predict_1pt_16x16_C(const NEW_GMC_DATA * const This,
112 : syskin 1.1.2.2 uint8_t *Dst, const uint8_t *Src,
113 :     int dststride, int srcstride, int x, int y, int rounding);
114 : chl 1.1.2.1
115 :     void Predict_1pt_8x8_C(const NEW_GMC_DATA * const This,
116 : syskin 1.1.2.2 uint8_t *uDst, const uint8_t *uSrc,
117 :     uint8_t *vDst, const uint8_t *vSrc,
118 :     int dststride, int srcstride, int x, int y, int rounding);
119 : chl 1.1.2.1
120 : syskin 1.1.2.2 void get_average_mv_1pt_C(const NEW_GMC_DATA * const Dsp, VECTOR * const mv,
121 :     int x, int y, int qpel);
122 : chl 1.1.2.1
123 : edgomez 1.1.2.5 /* *************************************************************
124 :     * Warning! It's Accuracy being passed, not 'resolution'!
125 :     */
126 : chl 1.1.2.1
127 : syskin 1.1.2.2 void generate_GMCparameters(int nb_pts, const int accuracy,
128 :     const WARPPOINTS *const pts,
129 :     const int width, const int height,
130 :     NEW_GMC_DATA *const gmc);
131 : chl 1.1.2.1
132 : edgomez 1.1.2.5 /* *******************************************************************
133 :     */
134 : chl 1.1.2.1
135 :     void
136 : edgomez 1.1.2.5 generate_GMCimage( const NEW_GMC_DATA *const gmc_data, /* [input] precalculated data */
137 :     const IMAGE *const pRef, /* [input] */
138 : chl 1.1.2.1 const int mb_width,
139 :     const int mb_height,
140 :     const int stride,
141 :     const int stride2,
142 : edgomez 1.1.2.5 const int fcode, /* [input] some parameters... */
143 :     const int32_t quarterpel, /* [input] for rounding avgMV */
144 :     const int reduced_resolution, /* [input] ignored */
145 :     const int32_t rounding, /* [input] for rounding image data */
146 :     MACROBLOCK *const pMBs, /* [output] average motion vectors */
147 :     IMAGE *const pGMC); /* [output] full warped image */
148 : chl 1.1.2.1

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