int y_size, c_size, yc_size, i, mb_array_size, x, y;
int y_size, c_size, yc_size, i, mb_array_size, mv_table_size, x, y;
int MPV_common_init(MpegEncContext *s){    int y_size, c_size, yc_size, i, mb_array_size, x, y;    dsputil_init(&s->dsp, s->avctx);    DCT_common_init(s);    s->flags= s->avctx->flags;    s->mb_width  = (s->width  + 15) / 16;    s->mb_height = (s->height + 15) / 16;    s->mb_stride = s->mb_width + 1;    s->b8_stride = s->mb_width*2 + 1;    s->b4_stride = s->mb_width*4 + 1;    mb_array_size= s->mb_height * s->mb_stride;    /* set default edge pos, will be overriden in decode_header if needed */    s->h_edge_pos= s->mb_width*16;    s->v_edge_pos= s->mb_height*16;    s->mb_num = s->mb_width * s->mb_height;        s->block_wrap[0]=    s->block_wrap[1]=    s->block_wrap[2]=    s->block_wrap[3]= s->mb_width*2 + 2;    s->block_wrap[4]=    s->block_wrap[5]= s->mb_width + 2;    s->y_dc_scale_table=    s->c_dc_scale_table= ff_mpeg1_dc_scale_table;    s->chroma_qscale_table= ff_default_chroma_qscale_table;    if (!s->encoding)        s->progressive_sequence= 1;    s->progressive_frame= 1;    s->coded_picture_number = 0;    y_size = (2 * s->mb_width + 2) * (2 * s->mb_height + 2);    c_size = (s->mb_width + 2) * (s->mb_height + 2);    yc_size = y_size + 2 * c_size;    /* convert fourcc to upper case */    s->avctx->codec_tag=   toupper( s->avctx->codec_tag     &0xFF)                                  + (toupper((s->avctx->codec_tag>>8 )&0xFF)<<8 )                        + (toupper((s->avctx->codec_tag>>16)&0xFF)<<16)                         + (toupper((s->avctx->codec_tag>>24)&0xFF)<<24);    s->avctx->stream_codec_tag=   toupper( s->avctx->stream_codec_tag     &0xFF)                                         + (toupper((s->avctx->stream_codec_tag>>8 )&0xFF)<<8 )                               + (toupper((s->avctx->stream_codec_tag>>16)&0xFF)<<16)                                + (toupper((s->avctx->stream_codec_tag>>24)&0xFF)<<24);    CHECKED_ALLOCZ(s->allocated_edge_emu_buffer, (s->width+64)*2*17*2); //(width + edge + align)*interlaced*MBsize*tolerance    s->edge_emu_buffer= s->allocated_edge_emu_buffer + (s->width+64)*2*17;    s->avctx->coded_frame= (AVFrame*)&s->current_picture;    CHECKED_ALLOCZ(s->mb_index2xy, (s->mb_num+1)*sizeof(int)) //error ressilience code looks cleaner with this    for(y=0; y<s->mb_height; y++){        for(x=0; x<s->mb_width; x++){            s->mb_index2xy[ x + y*s->mb_width ] = x + y*s->mb_stride;        }    }    s->mb_index2xy[ s->mb_height*s->mb_width ] = (s->mb_height-1)*s->mb_stride + s->mb_width; //FIXME really needed?        if (s->encoding) {        int mv_table_size= s->mb_stride * (s->mb_height+2) + 1;        /* Allocate MV tables */        CHECKED_ALLOCZ(s->p_mv_table_base            , mv_table_size * 2 * sizeof(int16_t))        CHECKED_ALLOCZ(s->b_forw_mv_table_base       , mv_table_size * 2 * sizeof(int16_t))        CHECKED_ALLOCZ(s->b_back_mv_table_base       , mv_table_size * 2 * sizeof(int16_t))        CHECKED_ALLOCZ(s->b_bidir_forw_mv_table_base , mv_table_size * 2 * sizeof(int16_t))        CHECKED_ALLOCZ(s->b_bidir_back_mv_table_base , mv_table_size * 2 * sizeof(int16_t))        CHECKED_ALLOCZ(s->b_direct_mv_table_base     , mv_table_size * 2 * sizeof(int16_t))        s->p_mv_table           = s->p_mv_table_base            + s->mb_stride + 1;        s->b_forw_mv_table      = s->b_forw_mv_table_base       + s->mb_stride + 1;        s->b_back_mv_table      = s->b_back_mv_table_base       + s->mb_stride + 1;        s->b_bidir_forw_mv_table= s->b_bidir_forw_mv_table_base + s->mb_stride + 1;        s->b_bidir_back_mv_table= s->b_bidir_back_mv_table_base + s->mb_stride + 1;        s->b_direct_mv_table    = s->b_direct_mv_table_base     + s->mb_stride + 1;        //FIXME should be linesize instead of s->width*2 but that isnt known before get_buffer()        CHECKED_ALLOCZ(s->me.scratchpad,  s->width*2*16*3*sizeof(uint8_t))                 CHECKED_ALLOCZ(s->me.map      , ME_MAP_SIZE*sizeof(uint32_t))        CHECKED_ALLOCZ(s->me.score_map, ME_MAP_SIZE*sizeof(uint32_t))        if(s->codec_id==CODEC_ID_MPEG4){            CHECKED_ALLOCZ(s->tex_pb_buffer, PB_BUFFER_SIZE);            CHECKED_ALLOCZ(   s->pb2_buffer, PB_BUFFER_SIZE);        }                if(s->msmpeg4_version){            CHECKED_ALLOCZ(s->ac_stats, 2*2*(MAX_LEVEL+1)*(MAX_RUN+1)*2*sizeof(int));        }        CHECKED_ALLOCZ(s->avctx->stats_out, 256);        /* Allocate MB type table */        CHECKED_ALLOCZ(s->mb_type  , mb_array_size * sizeof(uint8_t)) //needed for encoding                CHECKED_ALLOCZ(s->lambda_table, mb_array_size * sizeof(int))                CHECKED_ALLOCZ(s->q_intra_matrix, 64*32 * sizeof(int))        CHECKED_ALLOCZ(s->q_inter_matrix, 64*32 * sizeof(int))        CHECKED_ALLOCZ(s->q_intra_matrix16, 64*32*2 * sizeof(uint16_t))        CHECKED_ALLOCZ(s->q_inter_matrix16, 64*32*2 * sizeof(uint16_t))        CHECKED_ALLOCZ(s->input_picture, MAX_PICTURE_COUNT * sizeof(Picture*))        CHECKED_ALLOCZ(s->reordered_input_picture, MAX_PICTURE_COUNT * sizeof(Picture*))                if(s->avctx->noise_reduction){            CHECKED_ALLOCZ(s->dct_error_sum, 2 * 64 * sizeof(int))            CHECKED_ALLOCZ(s->dct_offset, 2 * 64 * sizeof(uint16_t))        }    }    CHECKED_ALLOCZ(s->blocks, 64*6*2 * sizeof(DCTELEM))            CHECKED_ALLOCZ(s->picture, MAX_PICTURE_COUNT * sizeof(Picture))    CHECKED_ALLOCZ(s->error_status_table, mb_array_size*sizeof(uint8_t))        if(s->codec_id==CODEC_ID_MPEG4){        /* interlaced direct mode decoding tables */        CHECKED_ALLOCZ(s->field_mv_table, mb_array_size*2*2 * sizeof(int16_t))        CHECKED_ALLOCZ(s->field_select_table, mb_array_size*2* sizeof(int8_t))    }    if (s->out_format == FMT_H263) {        /* ac values */        CHECKED_ALLOCZ(s->ac_val[0], yc_size * sizeof(int16_t) * 16);        s->ac_val[1] = s->ac_val[0] + y_size;        s->ac_val[2] = s->ac_val[1] + c_size;                /* cbp values */        CHECKED_ALLOCZ(s->coded_block, y_size);                /* divx501 bitstream reorder buffer */        CHECKED_ALLOCZ(s->bitstream_buffer, BITSTREAM_BUFFER_SIZE);        /* cbp, ac_pred, pred_dir */        CHECKED_ALLOCZ(s->cbp_table  , mb_array_size * sizeof(uint8_t))        CHECKED_ALLOCZ(s->pred_dir_table, mb_array_size * sizeof(uint8_t))    }        if (s->h263_pred || s->h263_plus || !s->encoding) {        /* dc values */        //MN: we need these for error resilience of intra-frames        CHECKED_ALLOCZ(s->dc_val[0], yc_size * sizeof(int16_t));        s->dc_val[1] = s->dc_val[0] + y_size;        s->dc_val[2] = s->dc_val[1] + c_size;        for(i=0;i<yc_size;i++)            s->dc_val[0][i] = 1024;    }    /* which mb is a intra block */    CHECKED_ALLOCZ(s->mbintra_table, mb_array_size);    memset(s->mbintra_table, 1, mb_array_size);        /* default structure is frame */    s->picture_structure = PICT_FRAME;        /* init macroblock skip table */    CHECKED_ALLOCZ(s->mbskip_table, mb_array_size+2);    //Note the +1 is for a quicker mpeg4 slice_end detection    CHECKED_ALLOCZ(s->prev_pict_types, PREV_PICT_TYPES_BUFFER_SIZE);        s->block= s->blocks[0];    for(i=0;i<12;i++){        s->pblocks[i] = (short *)(&s->block[i]);    }    s->parse_context.state= -1;    if((s->avctx->debug&(FF_DEBUG_VIS_QP|FF_DEBUG_VIS_MB_TYPE)) || (s->avctx->debug_mv)){       s->visualization_buffer[0] = av_malloc((s->mb_width*16 + 2*EDGE_WIDTH) * s->mb_height*16 + 2*EDGE_WIDTH);       s->visualization_buffer[1] = av_malloc((s->mb_width*8 + EDGE_WIDTH) * s->mb_height*8 + EDGE_WIDTH);       s->visualization_buffer[2] = av_malloc((s->mb_width*8 + EDGE_WIDTH) * s->mb_height*8 + EDGE_WIDTH);    }    s->context_initialized = 1;    return 0; fail:    MPV_common_end(s);    return -1;}