26 |
* along with this program; if not, write to the xvid_free Software |
* along with this program; if not, write to the xvid_free Software |
27 |
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
28 |
* |
* |
29 |
* $Id: mbprediction.h,v 1.5 2002-04-28 23:36:28 edgomez Exp $ |
* $Id: mbprediction.h,v 1.8 2002-05-07 19:59:10 chl Exp $ |
30 |
* |
* |
31 |
*************************************************************************/ |
*************************************************************************/ |
32 |
|
|
204 |
int yin1, yin2, yin3; |
int yin1, yin2, yin3; |
205 |
int vec1, vec2, vec3; |
int vec1, vec2, vec3; |
206 |
|
|
|
static VECTOR zeroMV; |
|
207 |
uint32_t index = x + y * x_dim; |
uint32_t index = x + y * x_dim; |
208 |
zeroMV.x = zeroMV.y = 0; |
const VECTOR zeroMV = { 0,0 }; |
209 |
|
|
210 |
// first row (special case) |
// first row of blocks (special case) |
211 |
if (y == 0 && (block == 0 || block == 1)) |
if (y == 0 && (block == 0 || block == 1)) |
212 |
{ |
{ |
213 |
if ((x == 0) && (block == 0)) // first column, first block |
if ((x == 0) && (block == 0)) // first column, first block |
214 |
{ |
{ |
215 |
pmv[0] = pmv[1] = pmv[2] = pmv[3] = zeroMV; |
pmv[0] = pmv[1] = pmv[2] = pmv[3] = zeroMV; |
216 |
psad[0] = psad[1] = psad[2] = psad[3] = MV_MAX_ERROR; |
psad[0] = 0; |
217 |
|
psad[1] = psad[2] = psad[3] = MV_MAX_ERROR; |
218 |
return 0; |
return 0; |
219 |
} |
} |
220 |
if (block == 1) // second block; has only a left neighbour |
if (block == 1) // second block; has only a left neighbour |
272 |
} |
} |
273 |
|
|
274 |
|
|
275 |
if (xin1 < 0 || /* yin1 < 0 || */ xin1 >= (int32_t)x_dim) |
if (xin1 < 0 || xin1 >= (int32_t)x_dim) |
276 |
{ |
{ |
277 |
pmv[1] = zeroMV; |
pmv[1] = zeroMV; |
278 |
psad[1] = MV_MAX_ERROR; |
psad[1] = MV_MAX_ERROR; |
283 |
psad[1] = pMBs[xin1 + yin1 * x_dim].sad8[vec1]; |
psad[1] = pMBs[xin1 + yin1 * x_dim].sad8[vec1]; |
284 |
} |
} |
285 |
|
|
286 |
if (xin2 < 0 || /* yin2 < 0 || */ xin2 >= (int32_t)x_dim) |
if (xin2 < 0 || xin2 >= (int32_t)x_dim) |
287 |
{ |
{ |
288 |
pmv[2] = zeroMV; |
pmv[2] = zeroMV; |
289 |
psad[2] = MV_MAX_ERROR; |
psad[2] = MV_MAX_ERROR; |
294 |
psad[2] = pMBs[xin2 + yin2 * x_dim].sad8[vec2]; |
psad[2] = pMBs[xin2 + yin2 * x_dim].sad8[vec2]; |
295 |
} |
} |
296 |
|
|
297 |
if (xin3 < 0 || /* yin3 < 0 || */ xin3 >= (int32_t)x_dim) |
if (xin3 < 0 || xin3 >= (int32_t)x_dim) |
298 |
{ |
{ |
299 |
pmv[3] = zeroMV; |
pmv[3] = zeroMV; |
300 |
psad[3] = MV_MAX_ERROR; |
psad[3] = MV_MAX_ERROR; |
306 |
} |
} |
307 |
|
|
308 |
if ( (MVequal(pmv[1],pmv[2])) && (MVequal(pmv[1],pmv[3])) ) |
if ( (MVequal(pmv[1],pmv[2])) && (MVequal(pmv[1],pmv[3])) ) |
309 |
{ pmv[0]=pmv[1]; |
{ |
310 |
psad[0]=psad[1]; |
pmv[0]=pmv[1]; |
311 |
|
psad[0]=MIN( MIN(psad[1],psad[2]), psad[3]); |
312 |
return 1; |
return 1; |
313 |
} |
} |
314 |
|
|