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>
This commit is contained in:
Andreas Rheinhardt 2022-03-25 18:39:16 +01:00
parent 94968dbc11
commit 6e5acb6c88
2 changed files with 10 additions and 7 deletions

View File

@ -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;
}

View File

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