avcodec/me_cmp, motion_est: Move me_(pre_)?_cmp etc. to MotionEstContext
MECmpContext has several arrays of function pointers that are not set by ff_me_cmp_init(), but that are set by users to one of the other arrays via ff_set_cmp(). One of these other users is the motion estimation API. It uses MECmpContext.(me_pre|me|me_sub|mb)_cmp. It is basically the only user of these arrays. This commit therefore moves these arrays to MotionEstContext; this has the additional advantage of making motion_est.c more independent from MpegEncContext. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
parent
1367ef198a
commit
182e647a64
@ -70,10 +70,6 @@ typedef struct MECmpContext {
|
|||||||
me_cmp_func dct_max[6];
|
me_cmp_func dct_max[6];
|
||||||
me_cmp_func dct264_sad[6];
|
me_cmp_func dct264_sad[6];
|
||||||
|
|
||||||
me_cmp_func me_pre_cmp[6];
|
|
||||||
me_cmp_func me_cmp[6];
|
|
||||||
me_cmp_func me_sub_cmp[6];
|
|
||||||
me_cmp_func mb_cmp[6];
|
|
||||||
me_cmp_func ildct_cmp[6]; // only width 16 used
|
me_cmp_func ildct_cmp[6]; // only width 16 used
|
||||||
me_cmp_func frame_skip_cmp[6]; // only width 8 used
|
me_cmp_func frame_skip_cmp[6]; // only width 8 used
|
||||||
|
|
||||||
|
@ -305,7 +305,7 @@ static int zero_cmp(MpegEncContext *s, const uint8_t *a, const uint8_t *b,
|
|||||||
static void zero_hpel(uint8_t *a, const uint8_t *b, ptrdiff_t stride, int h){
|
static void zero_hpel(uint8_t *a, const uint8_t *b, ptrdiff_t stride, int h){
|
||||||
}
|
}
|
||||||
|
|
||||||
av_cold int ff_me_init(MotionEstContext *c, AVCodecContext *avctx, MECmpContext *mecc)
|
av_cold int ff_me_init(MotionEstContext *c, AVCodecContext *avctx, const MECmpContext *mecc)
|
||||||
{
|
{
|
||||||
int cache_size = FFMIN(ME_MAP_SIZE>>ME_MAP_SHIFT, 1<<ME_MAP_SHIFT);
|
int cache_size = FFMIN(ME_MAP_SIZE>>ME_MAP_SHIFT, 1<<ME_MAP_SHIFT);
|
||||||
int dia_size = FFMAX(FFABS(avctx->dia_size) & 255, FFABS(avctx->pre_dia_size) & 255);
|
int dia_size = FFMAX(FFABS(avctx->dia_size) & 255, FFABS(avctx->pre_dia_size) & 255);
|
||||||
@ -324,10 +324,10 @@ av_cold int ff_me_init(MotionEstContext *c, AVCodecContext *avctx, MECmpContext
|
|||||||
if (cache_size < 2 * dia_size)
|
if (cache_size < 2 * dia_size)
|
||||||
av_log(avctx, AV_LOG_INFO, "ME_MAP size may be a little small for the selected diamond size\n");
|
av_log(avctx, AV_LOG_INFO, "ME_MAP size may be a little small for the selected diamond size\n");
|
||||||
|
|
||||||
ret = ff_set_cmp(mecc, mecc->me_pre_cmp, avctx->me_pre_cmp);
|
ret = ff_set_cmp(mecc, c->me_pre_cmp, avctx->me_pre_cmp);
|
||||||
ret |= ff_set_cmp(mecc, mecc->me_cmp, avctx->me_cmp);
|
ret |= ff_set_cmp(mecc, c->me_cmp, avctx->me_cmp);
|
||||||
ret |= ff_set_cmp(mecc, mecc->me_sub_cmp, avctx->me_sub_cmp);
|
ret |= ff_set_cmp(mecc, c->me_sub_cmp, avctx->me_sub_cmp);
|
||||||
ret |= ff_set_cmp(mecc, mecc->mb_cmp, avctx->mb_cmp);
|
ret |= ff_set_cmp(mecc, c->mb_cmp, avctx->mb_cmp);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@ -354,10 +354,10 @@ av_cold int ff_me_init(MotionEstContext *c, AVCodecContext *avctx, MECmpContext
|
|||||||
* not have yet, and even if we had, the motion estimation code
|
* not have yet, and even if we had, the motion estimation code
|
||||||
* does not expect it. */
|
* does not expect it. */
|
||||||
if (avctx->codec_id != AV_CODEC_ID_SNOW) {
|
if (avctx->codec_id != AV_CODEC_ID_SNOW) {
|
||||||
if ((avctx->me_cmp & FF_CMP_CHROMA) /* && !s->mecc.me_cmp[2] */)
|
if ((avctx->me_cmp & FF_CMP_CHROMA) /* && !c->me_cmp[2] */)
|
||||||
mecc->me_cmp[2] = zero_cmp;
|
c->me_cmp[2] = zero_cmp;
|
||||||
if ((avctx->me_sub_cmp & FF_CMP_CHROMA) && !mecc->me_sub_cmp[2])
|
if ((avctx->me_sub_cmp & FF_CMP_CHROMA) && !c->me_sub_cmp[2])
|
||||||
mecc->me_sub_cmp[2] = zero_cmp;
|
c->me_sub_cmp[2] = zero_cmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -649,7 +649,7 @@ static inline int h263_mv4_search(MpegEncContext *s, int mx, int my, int shift)
|
|||||||
|
|
||||||
dmin4= c->sub_motion_search(s, &mx4, &my4, dmin4, block, block, size, h);
|
dmin4= c->sub_motion_search(s, &mx4, &my4, dmin4, block, block, size, h);
|
||||||
|
|
||||||
if (s->mecc.me_sub_cmp[0] != s->mecc.mb_cmp[0]) {
|
if (c->me_sub_cmp[0] != c->mb_cmp[0]) {
|
||||||
int dxy;
|
int dxy;
|
||||||
const int offset= ((block&1) + (block>>1)*stride)*8;
|
const int offset= ((block&1) + (block>>1)*stride)*8;
|
||||||
uint8_t *dest_y = c->scratchpad + offset;
|
uint8_t *dest_y = c->scratchpad + offset;
|
||||||
@ -691,8 +691,8 @@ static inline int h263_mv4_search(MpegEncContext *s, int mx, int my, int shift)
|
|||||||
if(same)
|
if(same)
|
||||||
return INT_MAX;
|
return INT_MAX;
|
||||||
|
|
||||||
if (s->mecc.me_sub_cmp[0] != s->mecc.mb_cmp[0]) {
|
if (c->me_sub_cmp[0] != c->mb_cmp[0]) {
|
||||||
dmin_sum += s->mecc.mb_cmp[0](s,
|
dmin_sum += c->mb_cmp[0](s,
|
||||||
s->new_pic->data[0] +
|
s->new_pic->data[0] +
|
||||||
s->mb_x * 16 + s->mb_y * 16 * stride,
|
s->mb_x * 16 + s->mb_y * 16 * stride,
|
||||||
c->scratchpad, stride, 16);
|
c->scratchpad, stride, 16);
|
||||||
@ -717,8 +717,8 @@ static inline int h263_mv4_search(MpegEncContext *s, int mx, int my, int shift)
|
|||||||
s->hdsp.put_pixels_tab [1][dxy](c->scratchpad + 8, s->last_pic.data[2] + offset, s->uvlinesize, 8);
|
s->hdsp.put_pixels_tab [1][dxy](c->scratchpad + 8, s->last_pic.data[2] + offset, s->uvlinesize, 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
dmin_sum += s->mecc.mb_cmp[1](s, s->new_pic->data[1] + s->mb_x * 8 + s->mb_y * 8 * s->uvlinesize, c->scratchpad, s->uvlinesize, 8);
|
dmin_sum += c->mb_cmp[1](s, s->new_pic->data[1] + s->mb_x * 8 + s->mb_y * 8 * s->uvlinesize, c->scratchpad, s->uvlinesize, 8);
|
||||||
dmin_sum += s->mecc.mb_cmp[1](s, s->new_pic->data[2] + s->mb_x * 8 + s->mb_y * 8 * s->uvlinesize, c->scratchpad + 8, s->uvlinesize, 8);
|
dmin_sum += c->mb_cmp[1](s, s->new_pic->data[2] + s->mb_x * 8 + s->mb_y * 8 * s->uvlinesize, c->scratchpad + 8, s->uvlinesize, 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
c->pred_x= mx;
|
c->pred_x= mx;
|
||||||
@ -814,7 +814,7 @@ static int interlaced_search(MpegEncContext *s, int ref_index,
|
|||||||
mv_table[xy][0]= mx_i;
|
mv_table[xy][0]= mx_i;
|
||||||
mv_table[xy][1]= my_i;
|
mv_table[xy][1]= my_i;
|
||||||
|
|
||||||
if (s->mecc.me_sub_cmp[0] != s->mecc.mb_cmp[0]) {
|
if (c->me_sub_cmp[0] != c->mb_cmp[0]) {
|
||||||
int dxy;
|
int dxy;
|
||||||
|
|
||||||
//FIXME chroma ME
|
//FIXME chroma ME
|
||||||
@ -826,7 +826,7 @@ static int interlaced_search(MpegEncContext *s, int ref_index,
|
|||||||
}else{
|
}else{
|
||||||
s->hdsp.put_pixels_tab [size][dxy](c->scratchpad, ref , stride, h);
|
s->hdsp.put_pixels_tab [size][dxy](c->scratchpad, ref , stride, h);
|
||||||
}
|
}
|
||||||
dmin = s->mecc.mb_cmp[size](s, c->src[block][0], c->scratchpad, stride, h);
|
dmin = c->mb_cmp[size](s, c->src[block][0], c->scratchpad, stride, h);
|
||||||
dmin+= (mv_penalty[mx_i-c->pred_x] + mv_penalty[my_i-c->pred_y] + 1)*c->mb_penalty_factor;
|
dmin+= (mv_penalty[mx_i-c->pred_x] + mv_penalty[my_i-c->pred_y] + 1)*c->mb_penalty_factor;
|
||||||
}else
|
}else
|
||||||
dmin+= c->mb_penalty_factor; //field_select bits
|
dmin+= c->mb_penalty_factor; //field_select bits
|
||||||
@ -1049,7 +1049,7 @@ void ff_estimate_p_frame_motion(MpegEncContext * s,
|
|||||||
*(uint32_t*)(&c->scratchpad[i*s->linesize+12]) = mean;
|
*(uint32_t*)(&c->scratchpad[i*s->linesize+12]) = mean;
|
||||||
}
|
}
|
||||||
|
|
||||||
intra_score= s->mecc.mb_cmp[0](s, c->scratchpad, pix, s->linesize, 16);
|
intra_score= c->mb_cmp[0](s, c->scratchpad, pix, s->linesize, 16);
|
||||||
}
|
}
|
||||||
intra_score += c->mb_penalty_factor*16 + s->intra_penalty;
|
intra_score += c->mb_penalty_factor*16 + s->intra_penalty;
|
||||||
|
|
||||||
@ -1236,7 +1236,7 @@ static inline int check_bidir_mv(MpegEncContext * s,
|
|||||||
|
|
||||||
fbmin = (mv_penalty_f[motion_fx-pred_fx] + mv_penalty_f[motion_fy-pred_fy])*c->mb_penalty_factor
|
fbmin = (mv_penalty_f[motion_fx-pred_fx] + mv_penalty_f[motion_fy-pred_fy])*c->mb_penalty_factor
|
||||||
+(mv_penalty_b[motion_bx-pred_bx] + mv_penalty_b[motion_by-pred_by])*c->mb_penalty_factor
|
+(mv_penalty_b[motion_bx-pred_bx] + mv_penalty_b[motion_by-pred_by])*c->mb_penalty_factor
|
||||||
+ s->mecc.mb_cmp[size](s, src_data[0], dest_y, stride, h); // FIXME new_pic
|
+ c->mb_cmp[size](s, src_data[0], dest_y, stride, h); // FIXME new_pic
|
||||||
|
|
||||||
if(c->avctx->mb_cmp&FF_CMP_CHROMA){
|
if(c->avctx->mb_cmp&FF_CMP_CHROMA){
|
||||||
}
|
}
|
||||||
|
@ -84,6 +84,11 @@ typedef struct MotionEstContext {
|
|||||||
int64_t mb_var_sum_temp;
|
int64_t mb_var_sum_temp;
|
||||||
int scene_change_score;
|
int scene_change_score;
|
||||||
|
|
||||||
|
me_cmp_func me_pre_cmp[6];
|
||||||
|
me_cmp_func me_cmp[6];
|
||||||
|
me_cmp_func me_sub_cmp[6];
|
||||||
|
me_cmp_func mb_cmp[6];
|
||||||
|
|
||||||
op_pixels_func(*hpel_put)[4];
|
op_pixels_func(*hpel_put)[4];
|
||||||
op_pixels_func(*hpel_avg)[4];
|
op_pixels_func(*hpel_avg)[4];
|
||||||
qpel_mc_func(*qpel_put)[16];
|
qpel_mc_func(*qpel_put)[16];
|
||||||
@ -110,7 +115,7 @@ static inline int ff_h263_round_chroma(int x)
|
|||||||
* Performs one-time initialization of the MotionEstContext.
|
* Performs one-time initialization of the MotionEstContext.
|
||||||
*/
|
*/
|
||||||
int ff_me_init(MotionEstContext *c, struct AVCodecContext *avctx,
|
int ff_me_init(MotionEstContext *c, struct AVCodecContext *avctx,
|
||||||
struct MECmpContext *mecc);
|
const struct MECmpContext *mecc);
|
||||||
|
|
||||||
void ff_me_init_pic(struct MpegEncContext *s);
|
void ff_me_init_pic(struct MpegEncContext *s);
|
||||||
|
|
||||||
|
@ -64,8 +64,8 @@ static int hpel_motion_search(MpegEncContext * s,
|
|||||||
|
|
||||||
//FIXME factorize
|
//FIXME factorize
|
||||||
|
|
||||||
cmp_sub = s->mecc.me_sub_cmp[size];
|
cmp_sub = c->me_sub_cmp[size];
|
||||||
chroma_cmp_sub = s->mecc.me_sub_cmp[size + 1];
|
chroma_cmp_sub = c->me_sub_cmp[size + 1];
|
||||||
|
|
||||||
if(c->skip){ //FIXME move out of hpel?
|
if(c->skip){ //FIXME move out of hpel?
|
||||||
*mx_ptr = 0;
|
*mx_ptr = 0;
|
||||||
@ -178,8 +178,8 @@ static inline int get_mb_score(MpegEncContext *s, int mx, int my,
|
|||||||
|
|
||||||
//FIXME factorize
|
//FIXME factorize
|
||||||
|
|
||||||
cmp_sub = s->mecc.mb_cmp[size];
|
cmp_sub = c->mb_cmp[size];
|
||||||
chroma_cmp_sub = s->mecc.mb_cmp[size + 1];
|
chroma_cmp_sub = c->mb_cmp[size + 1];
|
||||||
|
|
||||||
d= cmp(s, mx>>(qpel+1), my>>(qpel+1), mx&mask, my&mask, size, h, ref_index, src_index, cmp_sub, chroma_cmp_sub, flags);
|
d= cmp(s, mx>>(qpel+1), my>>(qpel+1), mx&mask, my&mask, size, h, ref_index, src_index, cmp_sub, chroma_cmp_sub, flags);
|
||||||
//FIXME check cbp before adding penalty for (0,0) vector
|
//FIXME check cbp before adding penalty for (0,0) vector
|
||||||
@ -222,12 +222,12 @@ static int qpel_motion_search(MpegEncContext * s,
|
|||||||
LOAD_COMMON
|
LOAD_COMMON
|
||||||
int flags= c->sub_flags;
|
int flags= c->sub_flags;
|
||||||
|
|
||||||
cmpf = s->mecc.me_cmp[size];
|
cmpf = c->me_cmp[size];
|
||||||
chroma_cmpf = s->mecc.me_cmp[size + 1]; // FIXME: factorize
|
chroma_cmpf = c->me_cmp[size + 1]; // FIXME: factorize
|
||||||
//FIXME factorize
|
//FIXME factorize
|
||||||
|
|
||||||
cmp_sub = s->mecc.me_sub_cmp[size];
|
cmp_sub = c->me_sub_cmp[size];
|
||||||
chroma_cmp_sub = s->mecc.me_sub_cmp[size + 1];
|
chroma_cmp_sub = c->me_sub_cmp[size + 1];
|
||||||
|
|
||||||
if(c->skip){ //FIXME somehow move up (benchmark)
|
if(c->skip){ //FIXME somehow move up (benchmark)
|
||||||
*mx_ptr = 0;
|
*mx_ptr = 0;
|
||||||
@ -424,8 +424,8 @@ static av_always_inline int small_diamond_search(MpegEncContext * s, int *best,
|
|||||||
LOAD_COMMON2
|
LOAD_COMMON2
|
||||||
unsigned map_generation = c->map_generation;
|
unsigned map_generation = c->map_generation;
|
||||||
|
|
||||||
cmpf = s->mecc.me_cmp[size];
|
cmpf = c->me_cmp[size];
|
||||||
chroma_cmpf = s->mecc.me_cmp[size + 1];
|
chroma_cmpf = c->me_cmp[size + 1];
|
||||||
|
|
||||||
{ /* ensure that the best point is in the MAP as h/qpel refinement needs it */
|
{ /* ensure that the best point is in the MAP as h/qpel refinement needs it */
|
||||||
const unsigned key = ((unsigned)best[1]<<ME_MAP_MV_BITS) + best[0] + map_generation;
|
const unsigned key = ((unsigned)best[1]<<ME_MAP_MV_BITS) + best[0] + map_generation;
|
||||||
@ -465,8 +465,8 @@ static int funny_diamond_search(MpegEncContext * s, int *best, int dmin,
|
|||||||
LOAD_COMMON2
|
LOAD_COMMON2
|
||||||
unsigned map_generation = c->map_generation;
|
unsigned map_generation = c->map_generation;
|
||||||
|
|
||||||
cmpf = s->mecc.me_cmp[size];
|
cmpf = c->me_cmp[size];
|
||||||
chroma_cmpf = s->mecc.me_cmp[size + 1];
|
chroma_cmpf = c->me_cmp[size + 1];
|
||||||
|
|
||||||
for(dia_size=1; dia_size<=4; dia_size++){
|
for(dia_size=1; dia_size<=4; dia_size++){
|
||||||
int dir;
|
int dir;
|
||||||
@ -508,8 +508,8 @@ static int hex_search(MpegEncContext * s, int *best, int dmin,
|
|||||||
int x,y,d;
|
int x,y,d;
|
||||||
const int dec= dia_size & (dia_size-1);
|
const int dec= dia_size & (dia_size-1);
|
||||||
|
|
||||||
cmpf = s->mecc.me_cmp[size];
|
cmpf = c->me_cmp[size];
|
||||||
chroma_cmpf = s->mecc.me_cmp[size + 1];
|
chroma_cmpf = c->me_cmp[size + 1];
|
||||||
|
|
||||||
for(;dia_size; dia_size= dec ? dia_size-1 : dia_size>>1){
|
for(;dia_size; dia_size= dec ? dia_size-1 : dia_size>>1){
|
||||||
do{
|
do{
|
||||||
@ -545,8 +545,8 @@ static int l2s_dia_search(MpegEncContext * s, int *best, int dmin,
|
|||||||
static const int hex[8][2]={{-2, 0}, {-1,-1}, { 0,-2}, { 1,-1},
|
static const int hex[8][2]={{-2, 0}, {-1,-1}, { 0,-2}, { 1,-1},
|
||||||
{ 2, 0}, { 1, 1}, { 0, 2}, {-1, 1}};
|
{ 2, 0}, { 1, 1}, { 0, 2}, {-1, 1}};
|
||||||
|
|
||||||
cmpf = s->mecc.me_cmp[size];
|
cmpf = c->me_cmp[size];
|
||||||
chroma_cmpf = s->mecc.me_cmp[size + 1];
|
chroma_cmpf = c->me_cmp[size + 1];
|
||||||
|
|
||||||
for(; dia_size; dia_size= dec ? dia_size-1 : dia_size>>1){
|
for(; dia_size; dia_size= dec ? dia_size-1 : dia_size>>1){
|
||||||
do{
|
do{
|
||||||
@ -584,8 +584,8 @@ static int umh_search(MpegEncContext * s, int *best, int dmin,
|
|||||||
{-2, 3}, { 0, 4}, { 2, 3},
|
{-2, 3}, { 0, 4}, { 2, 3},
|
||||||
{-2,-3}, { 0,-4}, { 2,-3},};
|
{-2,-3}, { 0,-4}, { 2,-3},};
|
||||||
|
|
||||||
cmpf = s->mecc.me_cmp[size];
|
cmpf = c->me_cmp[size];
|
||||||
chroma_cmpf = s->mecc.me_cmp[size + 1];
|
chroma_cmpf = c->me_cmp[size + 1];
|
||||||
|
|
||||||
x= best[0];
|
x= best[0];
|
||||||
y= best[1];
|
y= best[1];
|
||||||
@ -627,8 +627,8 @@ static int full_search(MpegEncContext * s, int *best, int dmin,
|
|||||||
int x,y, d;
|
int x,y, d;
|
||||||
const int dia_size= c->dia_size&0xFF;
|
const int dia_size= c->dia_size&0xFF;
|
||||||
|
|
||||||
cmpf = s->mecc.me_cmp[size];
|
cmpf = c->me_cmp[size];
|
||||||
chroma_cmpf = s->mecc.me_cmp[size + 1];
|
chroma_cmpf = c->me_cmp[size + 1];
|
||||||
|
|
||||||
for(y=FFMAX(-dia_size, ymin); y<=FFMIN(dia_size,ymax); y++){
|
for(y=FFMAX(-dia_size, ymin); y<=FFMIN(dia_size,ymax); y++){
|
||||||
for(x=FFMAX(-dia_size, xmin); x<=FFMIN(dia_size,xmax); x++){
|
for(x=FFMAX(-dia_size, xmin); x<=FFMIN(dia_size,xmax); x++){
|
||||||
@ -693,8 +693,8 @@ static int sab_diamond_search(MpegEncContext * s, int *best, int dmin,
|
|||||||
|
|
||||||
av_assert1(minima_count <= MAX_SAB_SIZE);
|
av_assert1(minima_count <= MAX_SAB_SIZE);
|
||||||
|
|
||||||
cmpf = s->mecc.me_cmp[size];
|
cmpf = c->me_cmp[size];
|
||||||
chroma_cmpf = s->mecc.me_cmp[size + 1];
|
chroma_cmpf = c->me_cmp[size + 1];
|
||||||
|
|
||||||
/*Note j<MAX_SAB_SIZE is needed if MAX_SAB_SIZE < ME_MAP_SIZE as j can
|
/*Note j<MAX_SAB_SIZE is needed if MAX_SAB_SIZE < ME_MAP_SIZE as j can
|
||||||
become larger due to MVs overflowing their ME_MAP_MV_BITS bits space in map
|
become larger due to MVs overflowing their ME_MAP_MV_BITS bits space in map
|
||||||
@ -779,8 +779,8 @@ static int var_diamond_search(MpegEncContext * s, int *best, int dmin,
|
|||||||
LOAD_COMMON2
|
LOAD_COMMON2
|
||||||
unsigned map_generation = c->map_generation;
|
unsigned map_generation = c->map_generation;
|
||||||
|
|
||||||
cmpf = s->mecc.me_cmp[size];
|
cmpf = c->me_cmp[size];
|
||||||
chroma_cmpf = s->mecc.me_cmp[size + 1];
|
chroma_cmpf = c->me_cmp[size + 1];
|
||||||
|
|
||||||
for(dia_size=1; dia_size<=c->dia_size; dia_size++){
|
for(dia_size=1; dia_size<=c->dia_size; dia_size++){
|
||||||
int dir, start, end;
|
int dir, start, end;
|
||||||
@ -880,12 +880,12 @@ static av_always_inline int epzs_motion_search_internal(MpegEncContext * s, int
|
|||||||
|
|
||||||
if(c->pre_pass){
|
if(c->pre_pass){
|
||||||
penalty_factor= c->pre_penalty_factor;
|
penalty_factor= c->pre_penalty_factor;
|
||||||
cmpf = s->mecc.me_pre_cmp[size];
|
cmpf = c->me_pre_cmp[size];
|
||||||
chroma_cmpf = s->mecc.me_pre_cmp[size + 1];
|
chroma_cmpf = c->me_pre_cmp[size + 1];
|
||||||
}else{
|
}else{
|
||||||
penalty_factor= c->penalty_factor;
|
penalty_factor= c->penalty_factor;
|
||||||
cmpf = s->mecc.me_cmp[size];
|
cmpf = c->me_cmp[size];
|
||||||
chroma_cmpf = s->mecc.me_cmp[size + 1];
|
chroma_cmpf = c->me_cmp[size + 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
map_generation= update_map_generation(c);
|
map_generation= update_map_generation(c);
|
||||||
@ -1008,8 +1008,8 @@ static int epzs_motion_search2(MpegEncContext * s,
|
|||||||
int flags= c->flags;
|
int flags= c->flags;
|
||||||
LOAD_COMMON2
|
LOAD_COMMON2
|
||||||
|
|
||||||
cmpf = s->mecc.me_cmp[size];
|
cmpf = c->me_cmp[size];
|
||||||
chroma_cmpf = s->mecc.me_cmp[size + 1];
|
chroma_cmpf = c->me_cmp[size + 1];
|
||||||
|
|
||||||
map_generation= update_map_generation(c);
|
map_generation= update_map_generation(c);
|
||||||
|
|
||||||
|
@ -832,12 +832,12 @@ static int get_block_rd(SnowEncContext *enc, int mb_x, int mb_y,
|
|||||||
distortion = 0;
|
distortion = 0;
|
||||||
for(i=0; i<4; i++){
|
for(i=0; i<4; i++){
|
||||||
int off = sx+16*(i&1) + (sy+16*(i>>1))*ref_stride;
|
int off = sx+16*(i&1) + (sy+16*(i>>1))*ref_stride;
|
||||||
distortion += enc->mecc.me_cmp[0](&enc->m, src + off, dst + off, ref_stride, 16);
|
distortion += enc->m.me.me_cmp[0](&enc->m, src + off, dst + off, ref_stride, 16);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
av_assert2(block_w==8);
|
av_assert2(block_w==8);
|
||||||
distortion = enc->mecc.me_cmp[0](&enc->m, src + sx + sy*ref_stride, dst + sx + sy*ref_stride, ref_stride, block_w*2);
|
distortion = enc->m.me.me_cmp[0](&enc->m, src + sx + sy*ref_stride, dst + sx + sy*ref_stride, ref_stride, block_w*2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(plane_index==0){
|
if(plane_index==0){
|
||||||
@ -903,7 +903,7 @@ static int get_4block_rd(SnowEncContext *enc, int mb_x, int mb_y, int plane_inde
|
|||||||
}
|
}
|
||||||
|
|
||||||
av_assert1(block_w== 8 || block_w==16);
|
av_assert1(block_w== 8 || block_w==16);
|
||||||
distortion += enc->mecc.me_cmp[block_w==8](&enc->m, src + x + y*ref_stride, dst + x + y*ref_stride, ref_stride, block_h);
|
distortion += enc->m.me.me_cmp[block_w==8](&enc->m, src + x + y*ref_stride, dst + x + y*ref_stride, ref_stride, block_h);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(plane_index==0){
|
if(plane_index==0){
|
||||||
|
@ -94,10 +94,6 @@ static void test_motion(const char *name, me_cmp_func test_func)
|
|||||||
XX(vsad) \
|
XX(vsad) \
|
||||||
XX(vsse) \
|
XX(vsse) \
|
||||||
XX(nsse) \
|
XX(nsse) \
|
||||||
XX(me_pre_cmp) \
|
|
||||||
XX(me_cmp) \
|
|
||||||
XX(me_sub_cmp) \
|
|
||||||
XX(mb_cmp) \
|
|
||||||
XX(ildct_cmp) \
|
XX(ildct_cmp) \
|
||||||
XX(frame_skip_cmp) \
|
XX(frame_skip_cmp) \
|
||||||
XX(median_sad)
|
XX(median_sad)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user