error_resilience: move the MECmpContext initialization into ER code

Currently, it needs to be initialized by the ER caller (which is
currently either a mpegvideo decoder or h264dec). However, since none of
those decoders use MECmpContext for anything except ER, it makes more
sense to handle it purely inside ER.
This commit is contained in:
Anton Khirnov 2015-01-17 17:16:20 +01:00
parent a7e0380497
commit cf1e0786ed
6 changed files with 13 additions and 16 deletions

View File

@ -30,6 +30,7 @@
#include "libavutil/internal.h"
#include "avcodec.h"
#include "error_resilience.h"
#include "me_cmp.h"
#include "mpegutils.h"
#include "mpegvideo.h"
#include "rectangle.h"
@ -713,11 +714,11 @@ FF_ENABLE_DEPRECATION_WARNINGS
} 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->mecc->sad[0](NULL, last_mb_ptr,
last_mb_ptr + linesize[0] * 16,
linesize[0], 16);
is_intra_likely += s->mecc.sad[0](NULL, last_mb_ptr, mb_ptr,
linesize[0], 16);
is_intra_likely -= s->mecc.sad[0](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++;
@ -734,6 +735,11 @@ void ff_er_frame_start(ERContext *s)
if (!s->avctx->error_concealment)
return;
if (!s->mecc_inited) {
ff_me_cmp_init(&s->mecc, s->avctx);
s->mecc_inited = 1;
}
memset(s->error_status_table, ER_MB_ERROR | VP_START | ER_MB_END,
s->mb_stride * s->mb_height * sizeof(uint8_t));
s->error_count = 3 * s->mb_num;

View File

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

View File

@ -490,7 +490,6 @@ int ff_h264_context_init(H264Context *h)
if (CONFIG_ERROR_RESILIENCE) {
/* init ER */
er->avctx = h->avctx;
er->mecc = &h->mecc;
er->decode_mb = h264_er_decode_mb;
er->opaque = h;
er->quarter_sample = 1;
@ -619,8 +618,6 @@ av_cold int ff_h264_decode_init(AVCodecContext *avctx)
h->dequant_coeff_pps = -1;
/* needed so that IDCT permutation is known early */
if (CONFIG_ERROR_RESILIENCE)
ff_me_cmp_init(&h->mecc, h->avctx);
ff_videodsp_init(&h->vdsp, 8);
memset(h->pps.scaling_matrix4, 16, 6 * 16 * sizeof(uint8_t));
@ -1231,8 +1228,6 @@ int ff_h264_set_parameter_from_sps(H264Context *h)
ff_h264qpel_init(&h->h264qpel, h->sps.bit_depth_luma);
ff_h264_pred_init(&h->hpc, h->avctx->codec_id, h->sps.bit_depth_luma,
h->sps.chroma_format_idc);
if (CONFIG_ERROR_RESILIENCE)
ff_me_cmp_init(&h->mecc, h->avctx);
ff_videodsp_init(&h->vdsp, h->sps.bit_depth_luma);
} else {
av_log(h->avctx, AV_LOG_ERROR, "Unsupported bit depth %d\n",

View File

@ -36,7 +36,6 @@
#include "h264dsp.h"
#include "h264pred.h"
#include "h264qpel.h"
#include "me_cmp.h"
#include "mpegutils.h"
#include "parser.h"
#include "qpeldsp.h"
@ -302,7 +301,6 @@ typedef struct H264Picture {
*/
typedef struct H264Context {
AVCodecContext *avctx;
MECmpContext mecc;
VideoDSPContext vdsp;
H264DSPContext h264dsp;
H264ChromaContext h264chroma;

View File

@ -1112,7 +1112,6 @@ static int h264_slice_header_init(H264Context *h, int reinit)
if (!c)
return AVERROR(ENOMEM);
c->avctx = h->avctx;
c->mecc = h->mecc;
c->vdsp = h->vdsp;
c->h264dsp = h->h264dsp;
c->h264qpel = h->h264qpel;

View File

@ -381,7 +381,6 @@ static av_cold int dct_init(MpegEncContext *s)
{
ff_blockdsp_init(&s->bdsp, s->avctx);
ff_hpeldsp_init(&s->hdsp, s->avctx->flags);
ff_me_cmp_init(&s->mecc, s->avctx);
ff_mpegvideodsp_init(&s->mdsp);
ff_videodsp_init(&s->vdsp, s->avctx->bits_per_raw_sample);
@ -1068,7 +1067,6 @@ static int init_er(MpegEncContext *s)
int i;
er->avctx = s->avctx;
er->mecc = &s->mecc;
er->mb_index2xy = s->mb_index2xy;
er->mb_num = s->mb_num;