Mercurial > libavcodec.hg
comparison snow.c @ 3197:8f53630cd24e libavcodec
dont pass intra flag if its always 0
author | michael |
---|---|
date | Tue, 14 Mar 2006 00:22:05 +0000 |
parents | c30e9bcbb716 |
children | 6b9f0c4fbdbe |
comparison
equal
deleted
inserted
replaced
3196:15157293beea | 3197:8f53630cd24e |
---|---|
3254 return 0; | 3254 return 0; |
3255 } | 3255 } |
3256 } | 3256 } |
3257 | 3257 |
3258 /* special case for int[2] args we discard afterward, fixes compilation prob with gcc 2.95 */ | 3258 /* special case for int[2] args we discard afterward, fixes compilation prob with gcc 2.95 */ |
3259 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){ | 3259 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){ |
3260 int p[2] = {p0, p1}; | 3260 int p[2] = {p0, p1}; |
3261 return check_block(s, mb_x, mb_y, p, intra, obmc_edged, best_rd); | 3261 return check_block(s, mb_x, mb_y, p, 0, obmc_edged, best_rd); |
3262 } | 3262 } |
3263 | 3263 |
3264 static always_inline int check_4block_inter(SnowContext *s, int mb_x, int mb_y, int p0, int p1, int *best_rd){ | 3264 static always_inline int check_4block_inter(SnowContext *s, int mb_x, int mb_y, int p0, int p1, int *best_rd){ |
3265 const int b_stride= s->b_width << s->block_max_depth; | 3265 const int b_stride= s->b_width << s->block_max_depth; |
3266 BlockNode *block= &s->block[mb_x + mb_y * b_stride]; | 3266 BlockNode *block= &s->block[mb_x + mb_y * b_stride]; |
3404 // get previous score (cant be cached due to OBMC) | 3404 // get previous score (cant be cached due to OBMC) |
3405 if(pass > 0 && (block->type&BLOCK_INTRA)){ | 3405 if(pass > 0 && (block->type&BLOCK_INTRA)){ |
3406 int color0[3]= {block->color[0], block->color[1], block->color[2]}; | 3406 int color0[3]= {block->color[0], block->color[1], block->color[2]}; |
3407 check_block(s, mb_x, mb_y, color0, 1, *obmc_edged, &best_rd); | 3407 check_block(s, mb_x, mb_y, color0, 1, *obmc_edged, &best_rd); |
3408 }else | 3408 }else |
3409 check_block_inter(s, mb_x, mb_y, block->mx, block->my, 0, *obmc_edged, &best_rd); | 3409 check_block_inter(s, mb_x, mb_y, block->mx, block->my, *obmc_edged, &best_rd); |
3410 | 3410 |
3411 check_block_inter(s, mb_x, mb_y, 0, 0, 0, *obmc_edged, &best_rd); | 3411 check_block_inter(s, mb_x, mb_y, 0, 0, *obmc_edged, &best_rd); |
3412 check_block_inter(s, mb_x, mb_y, tb->mx, tb->my, 0, *obmc_edged, &best_rd); | 3412 check_block_inter(s, mb_x, mb_y, tb->mx, tb->my, *obmc_edged, &best_rd); |
3413 check_block_inter(s, mb_x, mb_y, lb->mx, lb->my, 0, *obmc_edged, &best_rd); | 3413 check_block_inter(s, mb_x, mb_y, lb->mx, lb->my, *obmc_edged, &best_rd); |
3414 check_block_inter(s, mb_x, mb_y, rb->mx, rb->my, 0, *obmc_edged, &best_rd); | 3414 check_block_inter(s, mb_x, mb_y, rb->mx, rb->my, *obmc_edged, &best_rd); |
3415 check_block_inter(s, mb_x, mb_y, bb->mx, bb->my, 0, *obmc_edged, &best_rd); | 3415 check_block_inter(s, mb_x, mb_y, bb->mx, bb->my, *obmc_edged, &best_rd); |
3416 | 3416 |
3417 /* fullpel ME */ | 3417 /* fullpel ME */ |
3418 //FIXME avoid subpel interpol / round to nearest integer | 3418 //FIXME avoid subpel interpol / round to nearest integer |
3419 do{ | 3419 do{ |
3420 dia_change=0; | 3420 dia_change=0; |
3421 for(i=0; i<FFMAX(s->avctx->dia_size, 1); i++){ | 3421 for(i=0; i<FFMAX(s->avctx->dia_size, 1); i++){ |
3422 for(j=0; j<i; j++){ | 3422 for(j=0; j<i; j++){ |
3423 dia_change |= check_block_inter(s, mb_x, mb_y, block->mx+4*(i-j), block->my+(4*j), 0, *obmc_edged, &best_rd); | 3423 dia_change |= check_block_inter(s, mb_x, mb_y, block->mx+4*(i-j), block->my+(4*j), *obmc_edged, &best_rd); |
3424 dia_change |= check_block_inter(s, mb_x, mb_y, block->mx-4*(i-j), block->my-(4*j), 0, *obmc_edged, &best_rd); | 3424 dia_change |= check_block_inter(s, mb_x, mb_y, block->mx-4*(i-j), block->my-(4*j), *obmc_edged, &best_rd); |
3425 dia_change |= check_block_inter(s, mb_x, mb_y, block->mx+4*(i-j), block->my-(4*j), 0, *obmc_edged, &best_rd); | 3425 dia_change |= check_block_inter(s, mb_x, mb_y, block->mx+4*(i-j), block->my-(4*j), *obmc_edged, &best_rd); |
3426 dia_change |= check_block_inter(s, mb_x, mb_y, block->mx-4*(i-j), block->my+(4*j), 0, *obmc_edged, &best_rd); | 3426 dia_change |= check_block_inter(s, mb_x, mb_y, block->mx-4*(i-j), block->my+(4*j), *obmc_edged, &best_rd); |
3427 } | 3427 } |
3428 } | 3428 } |
3429 }while(dia_change); | 3429 }while(dia_change); |
3430 /* subpel ME */ | 3430 /* subpel ME */ |
3431 do{ | 3431 do{ |
3432 static const int square[8][2]= {{+1, 0},{-1, 0},{ 0,+1},{ 0,-1},{+1,+1},{-1,-1},{+1,-1},{-1,+1},}; | 3432 static const int square[8][2]= {{+1, 0},{-1, 0},{ 0,+1},{ 0,-1},{+1,+1},{-1,-1},{+1,-1},{-1,+1},}; |
3433 dia_change=0; | 3433 dia_change=0; |
3434 for(i=0; i<8; i++) | 3434 for(i=0; i<8; i++) |
3435 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); | 3435 dia_change |= check_block_inter(s, mb_x, mb_y, block->mx+square[i][0], block->my+square[i][1], *obmc_edged, &best_rd); |
3436 }while(dia_change); | 3436 }while(dia_change); |
3437 //FIXME or try the standard 2 pass qpel or similar | 3437 //FIXME or try the standard 2 pass qpel or similar |
3438 #if 1 | 3438 #if 1 |
3439 check_block(s, mb_x, mb_y, color, 1, *obmc_edged, &best_rd); | 3439 check_block(s, mb_x, mb_y, color, 1, *obmc_edged, &best_rd); |
3440 //FIXME RD style color selection | 3440 //FIXME RD style color selection |