error_resilience: do not require mbintra/skip tables
h264dec does not use them at all and only allocates them for ER.
This commit is contained in:
parent
c377e04d8a
commit
5bc69f38c1
@ -934,7 +934,7 @@ void ff_er_frame_end(ERContext *s)
|
|||||||
const int mb_xy = s->mb_index2xy[i];
|
const int mb_xy = s->mb_index2xy[i];
|
||||||
int error = s->error_status_table[mb_xy];
|
int error = s->error_status_table[mb_xy];
|
||||||
|
|
||||||
if (!s->mbskip_table[mb_xy]) // FIXME partition specific
|
if (s->mbskip_table && !s->mbskip_table[mb_xy]) // FIXME partition specific
|
||||||
distance++;
|
distance++;
|
||||||
if (error & (1 << error_type))
|
if (error & (1 << error_type))
|
||||||
distance = 0;
|
distance = 0;
|
||||||
@ -1205,10 +1205,11 @@ ec_clean:
|
|||||||
const int mb_xy = s->mb_index2xy[i];
|
const int mb_xy = s->mb_index2xy[i];
|
||||||
int error = s->error_status_table[mb_xy];
|
int error = s->error_status_table[mb_xy];
|
||||||
|
|
||||||
if (s->cur_pic.f->pict_type != AV_PICTURE_TYPE_B &&
|
if (s->mbskip_table && s->cur_pic.f->pict_type != AV_PICTURE_TYPE_B &&
|
||||||
(error & (ER_DC_ERROR | ER_MV_ERROR | ER_AC_ERROR))) {
|
(error & (ER_DC_ERROR | ER_MV_ERROR | ER_AC_ERROR))) {
|
||||||
s->mbskip_table[mb_xy] = 0;
|
s->mbskip_table[mb_xy] = 0;
|
||||||
}
|
}
|
||||||
|
if (s->mbintra_table)
|
||||||
s->mbintra_table[mb_xy] = 1;
|
s->mbintra_table[mb_xy] = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -383,8 +383,6 @@ void ff_h264_free_tables(H264Context *h, int free_rbsp)
|
|||||||
av_freep(&hx->er.mb_index2xy);
|
av_freep(&hx->er.mb_index2xy);
|
||||||
av_freep(&hx->er.error_status_table);
|
av_freep(&hx->er.error_status_table);
|
||||||
av_freep(&hx->er.er_temp_buffer);
|
av_freep(&hx->er.er_temp_buffer);
|
||||||
av_freep(&hx->er.mbintra_table);
|
|
||||||
av_freep(&hx->er.mbskip_table);
|
|
||||||
|
|
||||||
if (free_rbsp) {
|
if (free_rbsp) {
|
||||||
av_freep(&hx->rbsp_buffer);
|
av_freep(&hx->rbsp_buffer);
|
||||||
@ -524,11 +522,6 @@ int ff_h264_context_init(H264Context *h)
|
|||||||
FF_ALLOCZ_OR_GOTO(h->avctx, er->error_status_table,
|
FF_ALLOCZ_OR_GOTO(h->avctx, er->error_status_table,
|
||||||
mb_array_size * sizeof(uint8_t), fail);
|
mb_array_size * sizeof(uint8_t), fail);
|
||||||
|
|
||||||
FF_ALLOC_OR_GOTO(h->avctx, er->mbintra_table, mb_array_size, fail);
|
|
||||||
memset(er->mbintra_table, 1, mb_array_size);
|
|
||||||
|
|
||||||
FF_ALLOCZ_OR_GOTO(h->avctx, er->mbskip_table, mb_array_size + 2, fail);
|
|
||||||
|
|
||||||
FF_ALLOC_OR_GOTO(h->avctx, er->er_temp_buffer,
|
FF_ALLOC_OR_GOTO(h->avctx, er->er_temp_buffer,
|
||||||
h->mb_height * h->mb_stride, fail);
|
h->mb_height * h->mb_stride, fail);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user