|
|
|
@ -3256,9 +3256,9 @@ static always_inline int check_block(SnowContext *s, int mb_x, int mb_y, int p[3 |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* special case for int[2] args we discard afterward, fixes compilation prob with gcc 2.95 */ |
|
|
|
|
static always_inline int check_block_inter(SnowContext *s, int mb_x, int mb_y, int p0, int p1, int intra, const uint8_t *obmc_edged, int *best_rd){ |
|
|
|
|
static always_inline int check_block_inter(SnowContext *s, int mb_x, int mb_y, int p0, int p1, const uint8_t *obmc_edged, int *best_rd){ |
|
|
|
|
int p[2] = {p0, p1}; |
|
|
|
|
return check_block(s, mb_x, mb_y, p, intra, obmc_edged, best_rd); |
|
|
|
|
return check_block(s, mb_x, mb_y, p, 0, obmc_edged, best_rd); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static always_inline int check_4block_inter(SnowContext *s, int mb_x, int mb_y, int p0, int p1, int *best_rd){ |
|
|
|
@ -3406,13 +3406,13 @@ static void iterative_me(SnowContext *s){ |
|
|
|
|
int color0[3]= {block->color[0], block->color[1], block->color[2]}; |
|
|
|
|
check_block(s, mb_x, mb_y, color0, 1, *obmc_edged, &best_rd); |
|
|
|
|
}else |
|
|
|
|
check_block_inter(s, mb_x, mb_y, block->mx, block->my, 0, *obmc_edged, &best_rd); |
|
|
|
|
check_block_inter(s, mb_x, mb_y, block->mx, block->my, *obmc_edged, &best_rd); |
|
|
|
|
|
|
|
|
|
check_block_inter(s, mb_x, mb_y, 0, 0, 0, *obmc_edged, &best_rd); |
|
|
|
|
check_block_inter(s, mb_x, mb_y, tb->mx, tb->my, 0, *obmc_edged, &best_rd); |
|
|
|
|
check_block_inter(s, mb_x, mb_y, lb->mx, lb->my, 0, *obmc_edged, &best_rd); |
|
|
|
|
check_block_inter(s, mb_x, mb_y, rb->mx, rb->my, 0, *obmc_edged, &best_rd); |
|
|
|
|
check_block_inter(s, mb_x, mb_y, bb->mx, bb->my, 0, *obmc_edged, &best_rd); |
|
|
|
|
check_block_inter(s, mb_x, mb_y, 0, 0, *obmc_edged, &best_rd); |
|
|
|
|
check_block_inter(s, mb_x, mb_y, tb->mx, tb->my, *obmc_edged, &best_rd); |
|
|
|
|
check_block_inter(s, mb_x, mb_y, lb->mx, lb->my, *obmc_edged, &best_rd); |
|
|
|
|
check_block_inter(s, mb_x, mb_y, rb->mx, rb->my, *obmc_edged, &best_rd); |
|
|
|
|
check_block_inter(s, mb_x, mb_y, bb->mx, bb->my, *obmc_edged, &best_rd); |
|
|
|
|
|
|
|
|
|
/* fullpel ME */ |
|
|
|
|
//FIXME avoid subpel interpol / round to nearest integer
|
|
|
|
@ -3420,10 +3420,10 @@ static void iterative_me(SnowContext *s){ |
|
|
|
|
dia_change=0; |
|
|
|
|
for(i=0; i<FFMAX(s->avctx->dia_size, 1); i++){ |
|
|
|
|
for(j=0; j<i; j++){ |
|
|
|
|
dia_change |= check_block_inter(s, mb_x, mb_y, block->mx+4*(i-j), block->my+(4*j), 0, *obmc_edged, &best_rd); |
|
|
|
|
dia_change |= check_block_inter(s, mb_x, mb_y, block->mx-4*(i-j), block->my-(4*j), 0, *obmc_edged, &best_rd); |
|
|
|
|
dia_change |= check_block_inter(s, mb_x, mb_y, block->mx+4*(i-j), block->my-(4*j), 0, *obmc_edged, &best_rd); |
|
|
|
|
dia_change |= check_block_inter(s, mb_x, mb_y, block->mx-4*(i-j), block->my+(4*j), 0, *obmc_edged, &best_rd); |
|
|
|
|
dia_change |= check_block_inter(s, mb_x, mb_y, block->mx+4*(i-j), block->my+(4*j), *obmc_edged, &best_rd); |
|
|
|
|
dia_change |= check_block_inter(s, mb_x, mb_y, block->mx-4*(i-j), block->my-(4*j), *obmc_edged, &best_rd); |
|
|
|
|
dia_change |= check_block_inter(s, mb_x, mb_y, block->mx+4*(i-j), block->my-(4*j), *obmc_edged, &best_rd); |
|
|
|
|
dia_change |= check_block_inter(s, mb_x, mb_y, block->mx-4*(i-j), block->my+(4*j), *obmc_edged, &best_rd); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}while(dia_change); |
|
|
|
@ -3432,7 +3432,7 @@ static void iterative_me(SnowContext *s){ |
|
|
|
|
static const int square[8][2]= {{+1, 0},{-1, 0},{ 0,+1},{ 0,-1},{+1,+1},{-1,-1},{+1,-1},{-1,+1},}; |
|
|
|
|
dia_change=0; |
|
|
|
|
for(i=0; i<8; i++) |
|
|
|
|
dia_change |= check_block_inter(s, mb_x, mb_y, block->mx+square[i][0], block->my+square[i][1], 0, *obmc_edged, &best_rd); |
|
|
|
|
dia_change |= check_block_inter(s, mb_x, mb_y, block->mx+square[i][0], block->my+square[i][1], *obmc_edged, &best_rd); |
|
|
|
|
}while(dia_change); |
|
|
|
|
//FIXME or try the standard 2 pass qpel or similar
|
|
|
|
|
#if 1 |
|
|
|
|