mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-26 19:01:44 +02:00
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:
parent
a7e0380497
commit
cf1e0786ed
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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",
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user