h264dec does not use them at all and only allocates them for ER.tags/n2.7
@@ -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,11 +1205,12 @@ 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; | ||||
} | } | ||||
s->mbintra_table[mb_xy] = 1; | |||||
if (s->mbintra_table) | |||||
s->mbintra_table[mb_xy] = 1; | |||||
} | } | ||||
memset(&s->cur_pic, 0, sizeof(ERPicture)); | memset(&s->cur_pic, 0, sizeof(ERPicture)); | ||||
@@ -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); | ||||