@ -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 ;