avcodec/error_resilience: Only keep what is needed from MECmpContext

ERContext currently has an embedded MECmpContext, despite only
needing exactly one function from it. This is wasteful because
MECmpContext is pretty large (135 pointers, 1080 B for eight byte
pointers). So keep only what is needed.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
release/5.1
Andreas Rheinhardt 3 years ago
parent 94968dbc11
commit 6e5acb6c88
  1. 14
      libavcodec/error_resilience.c
  2. 3
      libavcodec/error_resilience.h

@ -766,12 +766,12 @@ static int is_intra_more_likely(ERContext *s)
} else {
ff_thread_await_progress(s->last_pic.tf, mb_y, 0);
}
is_intra_likely += s->mecc.sad[0](NULL, last_mb_ptr, mb_ptr,
linesize[0], 16);
is_intra_likely += s->sad(NULL, last_mb_ptr, mb_ptr,
linesize[0], 16);
// FIXME need await_progress() here
is_intra_likely -= s->mecc.sad[0](NULL, last_mb_ptr,
last_mb_ptr + linesize[0] * 16,
linesize[0], 16);
is_intra_likely -= s->sad(NULL, last_mb_ptr,
last_mb_ptr + linesize[0] * 16,
linesize[0], 16);
} else {
if (IS_INTRA(s->cur_pic.mb_type[mb_xy]))
is_intra_likely++;
@ -790,7 +790,9 @@ void ff_er_frame_start(ERContext *s)
return;
if (!s->mecc_inited) {
ff_me_cmp_init(&s->mecc, s->avctx);
MECmpContext mecc;
ff_me_cmp_init(&mecc, s->avctx);
s->sad = mecc.sad[0];
s->mecc_inited = 1;
}

@ -52,7 +52,8 @@ typedef struct ERPicture {
typedef struct ERContext {
AVCodecContext *avctx;
MECmpContext mecc;
me_cmp_func sad;
int mecc_inited;
int *mb_index2xy;

Loading…
Cancel
Save