|
|
@@ -785,6 +785,82 @@ fail: |
|
|
|
return AVERROR(ENOMEM); |
|
|
|
} |
|
|
|
|
|
|
|
static void clear_context(MpegEncContext *s) |
|
|
|
{ |
|
|
|
int i, j, k; |
|
|
|
|
|
|
|
memset(&s->next_picture, 0, sizeof(s->next_picture)); |
|
|
|
memset(&s->last_picture, 0, sizeof(s->last_picture)); |
|
|
|
memset(&s->current_picture, 0, sizeof(s->current_picture)); |
|
|
|
memset(&s->new_picture, 0, sizeof(s->new_picture)); |
|
|
|
|
|
|
|
memset(s->thread_context, 0, sizeof(s->thread_context)); |
|
|
|
|
|
|
|
s->me.map = NULL; |
|
|
|
s->me.score_map = NULL; |
|
|
|
s->dct_error_sum = NULL; |
|
|
|
s->block = NULL; |
|
|
|
s->blocks = NULL; |
|
|
|
memset(s->pblocks, 0, sizeof(s->pblocks)); |
|
|
|
s->ac_val_base = NULL; |
|
|
|
s->ac_val[0] = |
|
|
|
s->ac_val[1] = |
|
|
|
s->ac_val[2] =NULL; |
|
|
|
s->sc.edge_emu_buffer = NULL; |
|
|
|
s->me.scratchpad = NULL; |
|
|
|
s->me.temp = |
|
|
|
s->sc.rd_scratchpad = |
|
|
|
s->sc.b_scratchpad = |
|
|
|
s->sc.obmc_scratchpad = NULL; |
|
|
|
|
|
|
|
s->parse_context.buffer = NULL; |
|
|
|
s->parse_context.buffer_size = 0; |
|
|
|
s->bitstream_buffer = NULL; |
|
|
|
s->allocated_bitstream_buffer_size = 0; |
|
|
|
s->picture = NULL; |
|
|
|
s->mb_type = NULL; |
|
|
|
s->p_mv_table_base = NULL; |
|
|
|
s->b_forw_mv_table_base = NULL; |
|
|
|
s->b_back_mv_table_base = NULL; |
|
|
|
s->b_bidir_forw_mv_table_base = NULL; |
|
|
|
s->b_bidir_back_mv_table_base = NULL; |
|
|
|
s->b_direct_mv_table_base = NULL; |
|
|
|
s->p_mv_table = NULL; |
|
|
|
s->b_forw_mv_table = NULL; |
|
|
|
s->b_back_mv_table = NULL; |
|
|
|
s->b_bidir_forw_mv_table = NULL; |
|
|
|
s->b_bidir_back_mv_table = NULL; |
|
|
|
s->b_direct_mv_table = NULL; |
|
|
|
for (i = 0; i < 2; i++) { |
|
|
|
for (j = 0; j < 2; j++) { |
|
|
|
for (k = 0; k < 2; k++) { |
|
|
|
s->b_field_mv_table_base[i][j][k] = NULL; |
|
|
|
s->b_field_mv_table[i][j][k] = NULL; |
|
|
|
} |
|
|
|
s->b_field_select_table[i][j] = NULL; |
|
|
|
s->p_field_mv_table_base[i][j] = NULL; |
|
|
|
s->p_field_mv_table[i][j] = NULL; |
|
|
|
} |
|
|
|
s->p_field_select_table[i] = NULL; |
|
|
|
} |
|
|
|
|
|
|
|
s->dc_val_base = NULL; |
|
|
|
s->coded_block_base = NULL; |
|
|
|
s->mbintra_table = NULL; |
|
|
|
s->cbp_table = NULL; |
|
|
|
s->pred_dir_table = NULL; |
|
|
|
|
|
|
|
s->mbskip_table = NULL; |
|
|
|
|
|
|
|
s->er.error_status_table = NULL; |
|
|
|
s->er.er_temp_buffer = NULL; |
|
|
|
s->mb_index2xy = NULL; |
|
|
|
s->lambda_table = NULL; |
|
|
|
|
|
|
|
s->cplx_tab = NULL; |
|
|
|
s->bits_tab = NULL; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* init common structure for both encoder and decoder. |
|
|
|
* this assumes that some variables like width/height are already set |
|
|
@@ -796,6 +872,8 @@ av_cold int ff_mpv_common_init(MpegEncContext *s) |
|
|
|
s->avctx->active_thread_type & FF_THREAD_SLICE) ? |
|
|
|
s->avctx->thread_count : 1; |
|
|
|
|
|
|
|
clear_context(s); |
|
|
|
|
|
|
|
if (s->encoding && s->avctx->slices) |
|
|
|
nb_slices = s->avctx->slices; |
|
|
|
|
|
|
@@ -840,10 +918,6 @@ av_cold int ff_mpv_common_init(MpegEncContext *s) |
|
|
|
if (!s->picture[i].f) |
|
|
|
goto fail; |
|
|
|
} |
|
|
|
memset(&s->next_picture, 0, sizeof(s->next_picture)); |
|
|
|
memset(&s->last_picture, 0, sizeof(s->last_picture)); |
|
|
|
memset(&s->current_picture, 0, sizeof(s->current_picture)); |
|
|
|
memset(&s->new_picture, 0, sizeof(s->new_picture)); |
|
|
|
s->next_picture.f = av_frame_alloc(); |
|
|
|
if (!s->next_picture.f) |
|
|
|
goto fail; |
|
|
|