mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
10l: bidir_refine didn't save the new mvs. also improve speed.
Originally committed as revision 4832 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
62e60aed8d
commit
8bf755d4ff
@ -1636,6 +1636,12 @@ static inline int bidir_refine(MpegEncContext * s, int mb_x, int mb_y)
|
|||||||
const int ymin= c->ymin<<shift;
|
const int ymin= c->ymin<<shift;
|
||||||
const int xmax= c->xmax<<shift;
|
const int xmax= c->xmax<<shift;
|
||||||
const int ymax= c->ymax<<shift;
|
const int ymax= c->ymax<<shift;
|
||||||
|
uint8_t map[8][8][8][8];
|
||||||
|
|
||||||
|
memset(map,0,sizeof(map));
|
||||||
|
#define BIDIR_MAP(fx,fy,bx,by) \
|
||||||
|
map[(motion_fx+fx)&7][(motion_fy+fy)&7][(motion_bx+bx)&7][(motion_by+by)&7]
|
||||||
|
BIDIR_MAP(0,0,0,0) = 1;
|
||||||
|
|
||||||
fbmin= check_bidir_mv(s, motion_fx, motion_fy,
|
fbmin= check_bidir_mv(s, motion_fx, motion_fy,
|
||||||
motion_bx, motion_by,
|
motion_bx, motion_by,
|
||||||
@ -1646,8 +1652,10 @@ static inline int bidir_refine(MpegEncContext * s, int mb_x, int mb_y)
|
|||||||
if(s->avctx->bidir_refine){
|
if(s->avctx->bidir_refine){
|
||||||
int score, end;
|
int score, end;
|
||||||
#define CHECK_BIDIR(fx,fy,bx,by)\
|
#define CHECK_BIDIR(fx,fy,bx,by)\
|
||||||
if( (fx<=0 || motion_fx+fx<=xmax) && (fy<=0 || motion_fy+fy<=ymax) && (bx<=0 || motion_bx+bx<=xmax) && (by<=0 || motion_by+by<=ymax)\
|
if( !BIDIR_MAP(fx,fy,bx,by)\
|
||||||
|
&&(fx<=0 || motion_fx+fx<=xmax) && (fy<=0 || motion_fy+fy<=ymax) && (bx<=0 || motion_bx+bx<=xmax) && (by<=0 || motion_by+by<=ymax)\
|
||||||
&&(fx>=0 || motion_fx+fx>=xmin) && (fy>=0 || motion_fy+fy>=ymin) && (bx>=0 || motion_bx+bx>=xmin) && (by>=0 || motion_by+by>=ymin)){\
|
&&(fx>=0 || motion_fx+fx>=xmin) && (fy>=0 || motion_fy+fy>=ymin) && (bx>=0 || motion_bx+bx>=xmin) && (by>=0 || motion_by+by>=ymin)){\
|
||||||
|
BIDIR_MAP(fx,fy,bx,by) = 1;\
|
||||||
score= check_bidir_mv(s, motion_fx+fx, motion_fy+fy, motion_bx+bx, motion_by+by, pred_fx, pred_fy, pred_bx, pred_by, 0, 16);\
|
score= check_bidir_mv(s, motion_fx+fx, motion_fy+fy, motion_bx+bx, motion_by+by, pred_fx, pred_fy, pred_bx, pred_by, 0, 16);\
|
||||||
if(score < fbmin){\
|
if(score < fbmin){\
|
||||||
fbmin= score;\
|
fbmin= score;\
|
||||||
@ -1696,6 +1704,11 @@ CHECK_BIDIR2(d,a,b,c)
|
|||||||
}while(!end);
|
}while(!end);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
s->b_bidir_forw_mv_table[xy][0]= motion_fx;
|
||||||
|
s->b_bidir_forw_mv_table[xy][1]= motion_fy;
|
||||||
|
s->b_bidir_back_mv_table[xy][0]= motion_bx;
|
||||||
|
s->b_bidir_back_mv_table[xy][1]= motion_by;
|
||||||
|
|
||||||
return fbmin;
|
return fbmin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user