⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mpegvideo.c

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.7平台上编译为嵌入式图形界面操作系统。
💻 C
📖 第 1 页 / 共 5 页
字号:
                    s->picture_buffer[j][i] = pict;                }            }        }        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);    }            CHECKED_ALLOCZ(s->error_status_table, s->mb_num*sizeof(UINT8))        if (s->out_format == FMT_H263 || s->encoding) {        int size;        /* Allocate MB type table */        CHECKED_ALLOCZ(s->mb_type  , s->mb_num * sizeof(UINT8))        /* MV prediction */        size = (2 * s->mb_width + 2) * (2 * s->mb_height + 2);        CHECKED_ALLOCZ(s->motion_val, size * 2 * sizeof(INT16));    }    if(s->codec_id==CODEC_ID_MPEG4){        /* interlaced direct mode decoding tables */        CHECKED_ALLOCZ(s->field_mv_table, s->mb_num*2*2 * sizeof(INT16))        CHECKED_ALLOCZ(s->field_select_table, s->mb_num*2* sizeof(INT8))    }    /* 4mv b frame decoding table */    //note this is needed for h263 without b frames too (segfault on damaged streams otherwise)    CHECKED_ALLOCZ(s->co_located_type_table, s->mb_num * sizeof(UINT8))    if (s->out_format == FMT_H263) {        /* ac values */        CHECKED_ALLOCZ(s->ac_val[0], yc_size * sizeof(INT16) * 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  , s->mb_num * sizeof(UINT8))        CHECKED_ALLOCZ(s->pred_dir_table, s->mb_num * sizeof(UINT8))    }        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));        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;    }    CHECKED_ALLOCZ(s->next_qscale_table  , s->mb_num * sizeof(UINT8))    CHECKED_ALLOCZ(s->last_qscale_table  , s->mb_num * sizeof(UINT8))    CHECKED_ALLOCZ(s->aux_qscale_table   , s->mb_num * sizeof(UINT8))    s->qscale_table= s->next_qscale_table;    s->avctx->qstride= s->mb_width;        /* which mb is a intra block */    CHECKED_ALLOCZ(s->mbintra_table, s->mb_num);    memset(s->mbintra_table, 1, s->mb_num);        /* default structure is frame */    s->picture_structure = PICT_FRAME;        /* init macroblock skip table */    CHECKED_ALLOCZ(s->mbskip_table, s->mb_num+1);    //Note the +1 is for a quicker mpeg4 slice_end detection        s->block= s->blocks[0];    s->parse_context.state= -1;    s->context_initialized = 1;    return 0; fail:    MPV_common_end(s);    return -1;}//extern int sads;/* init common structure for both encoder and decoder */void MPV_common_end(MpegEncContext *s){    int i;    av_freep(&s->mb_type);    av_freep(&s->mb_var);    av_freep(&s->mc_mb_var);    av_freep(&s->mb_mean);    av_freep(&s->p_mv_table);    av_freep(&s->b_forw_mv_table);    av_freep(&s->b_back_mv_table);    av_freep(&s->b_bidir_forw_mv_table);    av_freep(&s->b_bidir_back_mv_table);    av_freep(&s->b_direct_forw_mv_table);    av_freep(&s->b_direct_back_mv_table);    av_freep(&s->b_direct_mv_table);    av_freep(&s->motion_val);    av_freep(&s->dc_val[0]);    av_freep(&s->ac_val[0]);    av_freep(&s->coded_block);    av_freep(&s->mbintra_table);    av_freep(&s->cbp_table);    av_freep(&s->pred_dir_table);    av_freep(&s->next_qscale_table);    av_freep(&s->last_qscale_table);    av_freep(&s->aux_qscale_table);    av_freep(&s->me_scratchpad);    av_freep(&s->me_map);    av_freep(&s->me_score_map);        av_freep(&s->mbskip_table);    av_freep(&s->bitstream_buffer);    av_freep(&s->tex_pb_buffer);    av_freep(&s->pb2_buffer);    av_freep(&s->edge_emu_buffer);    av_freep(&s->co_located_type_table);    av_freep(&s->field_mv_table);    av_freep(&s->field_select_table);    av_freep(&s->avctx->stats_out);    av_freep(&s->ac_stats);    av_freep(&s->error_status_table);        for(i=0;i<3;i++) {        int j;        if(!(s->flags&CODEC_FLAG_DR1)){            av_freep(&s->last_picture_base[i]);            av_freep(&s->next_picture_base[i]);            av_freep(&s->aux_picture_base[i]);        }        s->last_picture_base[i]=        s->next_picture_base[i]=        s->aux_picture_base [i] = NULL;        s->last_picture[i]=        s->next_picture[i]=        s->aux_picture [i] = NULL;        for(j=0; j<REORDER_BUFFER_SIZE; j++){            av_freep(&s->picture_buffer[j][i]);        }    }    s->context_initialized = 0;}/* init video encoder */int MPV_encode_init(AVCodecContext *avctx){    MpegEncContext *s = avctx->priv_data;    int i;    avctx->pix_fmt = PIX_FMT_YUV420P;    s->bit_rate = avctx->bit_rate;    s->bit_rate_tolerance = avctx->bit_rate_tolerance;    s->frame_rate = avctx->frame_rate;    s->width = avctx->width;    s->height = avctx->height;    if(avctx->gop_size > 600){        fprintf(stderr, "Warning keyframe interval too large! reducing it ...\n");        avctx->gop_size=600;    }    s->gop_size = avctx->gop_size;    s->rtp_mode = avctx->rtp_mode;    s->rtp_payload_size = avctx->rtp_payload_size;    if (avctx->rtp_callback)        s->rtp_callback = avctx->rtp_callback;    s->qmin= avctx->qmin;    s->qmax= avctx->qmax;    s->max_qdiff= avctx->max_qdiff;    s->qcompress= avctx->qcompress;    s->qblur= avctx->qblur;    s->avctx = avctx;    s->flags= avctx->flags;    s->max_b_frames= avctx->max_b_frames;    s->b_frame_strategy= avctx->b_frame_strategy;    s->codec_id= avctx->codec->id;    s->luma_elim_threshold  = avctx->luma_elim_threshold;    s->chroma_elim_threshold= avctx->chroma_elim_threshold;    s->strict_std_compliance= avctx->strict_std_compliance;    s->data_partitioning= avctx->flags & CODEC_FLAG_PART;    s->mpeg_quant= avctx->mpeg_quant;    if (s->gop_size <= 1) {        s->intra_only = 1;        s->gop_size = 12;    } else {        s->intra_only = 0;    }    /* ME algorithm */    if (avctx->me_method == 0)        /* For compatibility */        s->me_method = motion_estimation_method;    else        s->me_method = avctx->me_method;    /* Fixed QSCALE */    s->fixed_qscale = (avctx->flags & CODEC_FLAG_QSCALE);        s->adaptive_quant= (   s->avctx->lumi_masking                        || s->avctx->dark_masking                        || s->avctx->temporal_cplx_masking                         || s->avctx->spatial_cplx_masking                        || s->avctx->p_masking)                       && !s->fixed_qscale;        s->progressive_sequence= !(avctx->flags & CODEC_FLAG_INTERLACED_DCT);    switch(avctx->codec->id) {    case CODEC_ID_MPEG1VIDEO:        s->out_format = FMT_MPEG1;        avctx->delay=0; //FIXME not sure, should check the spec        break;    case CODEC_ID_MJPEG:        s->out_format = FMT_MJPEG;        s->intra_only = 1; /* force intra only for jpeg */        s->mjpeg_write_tables = 1; /* write all tables */	s->mjpeg_data_only_frames = 0; /* write all the needed headers */        s->mjpeg_vsample[0] = 2; /* set up default sampling factors */        s->mjpeg_vsample[1] = 1; /* the only currently supported values */        s->mjpeg_vsample[2] = 1;         s->mjpeg_hsample[0] = 2;        s->mjpeg_hsample[1] = 1;         s->mjpeg_hsample[2] = 1;         if (mjpeg_init(s) < 0)            return -1;        avctx->delay=0;        break;    case CODEC_ID_H263:        if (h263_get_picture_format(s->width, s->height) == 7) {            printf("Input picture size isn't suitable for h263 codec! try h263+\n");            return -1;        }        s->out_format = FMT_H263;        avctx->delay=0;        break;    case CODEC_ID_H263P:        s->out_format = FMT_H263;        s->h263_plus = 1;        s->unrestricted_mv = 1;        s->h263_aic = 1;                /* These are just to be sure */        s->umvplus = 0;        s->umvplus_dec = 0;        avctx->delay=0;        break;    case CODEC_ID_RV10:        s->out_format = FMT_H263;        s->h263_rv10 = 1;        avctx->delay=0;        break;    case CODEC_ID_MPEG4:        s->out_format = FMT_H263;        s->h263_pred = 1;        s->unrestricted_mv = 1;        s->has_b_frames= s->max_b_frames ? 1 : 0;        s->low_delay= !s->has_b_frames;        avctx->delay= s->low_delay ? 0 : (s->max_b_frames + 1);        break;    case CODEC_ID_MSMPEG4V1:        s->out_format = FMT_H263;        s->h263_msmpeg4 = 1;        s->h263_pred = 1;        s->unrestricted_mv = 1;        s->msmpeg4_version= 1;        avctx->delay=0;        break;    case CODEC_ID_MSMPEG4V2:        s->out_format = FMT_H263;        s->h263_msmpeg4 = 1;        s->h263_pred = 1;        s->unrestricted_mv = 1;        s->msmpeg4_version= 2;        avctx->delay=0;        break;    case CODEC_ID_MSMPEG4V3:        s->out_format = FMT_H263;        s->h263_msmpeg4 = 1;        s->h263_pred = 1;        s->unrestricted_mv = 1;        s->msmpeg4_version= 3;        avctx->delay=0;        break;    case CODEC_ID_WMV1:        s->out_format = FMT_H263;        s->h263_msmpeg4 = 1;        s->h263_pred = 1;        s->unrestricted_mv = 1;        s->msmpeg4_version= 4;        avctx->delay=0;        break;    case CODEC_ID_WMV2:        s->out_format = FMT_H263;        s->h263_msmpeg4 = 1;        s->h263_pred = 1;        s->unrestricted_mv = 1;        s->msmpeg4_version= 5;        avctx->delay=0;        break;    default:        return -1;    }        { /* set up some save defaults, some codecs might override them later */        static int done=0;        if(!done){            int i;            done=1;            default_mv_penalty= av_mallocz( sizeof(UINT16)*(MAX_FCODE+1)*(2*MAX_MV+1) );            memset(default_mv_penalty, 0, sizeof(UINT16)*(MAX_FCODE+1)*(2*MAX_MV+1));            memset(default_fcode_tab , 0, sizeof(UINT8)*(2*MAX_MV+1));            for(i=-16; i<16; i++){                default_fcode_tab[i + MAX_MV]= 1;            }        }    }    s->mv_penalty= default_mv_penalty;    s->fcode_tab= default_fcode_tab;    s->y_dc_scale_table=    s->c_dc_scale_table= ff_mpeg1_dc_scale_table;     /* dont use mv_penalty table for crap MV as it would be confused */    if (s->me_method < ME_EPZS) s->mv_penalty = default_mv_penalty;    s->encoding = 1;    /* init */    if (MPV_common_init(s) < 0)        return -1;    #ifdef CONFIG_ENCODERS    if (s->out_format == FMT_H263)        h263_encode_init(s);    else if (s->out_format == FMT_MPEG1)        ff_mpeg1_encode_init(s);    if(s->msmpeg4_version)        ff_msmpeg4_encode_init(s);#endif    /* init default q matrix */    for(i=0;i<64;i++) {        int j= s->idct_permutation[i];        if(s->codec_id==CODEC_ID_MPEG4 && s->mpeg_quant){            s->intra_matrix[j] = ff_mpeg4_default_intra_matrix[i];            s->inter_matrix[j] = ff_mpeg4_default_non_intra_matrix[i];        }else if(s->out_format == FMT_H263){            s->intra_matrix[j] =            s->inter_matrix[j] = ff_mpeg1_default_non_intra_matrix[i];        }else{ /* mpeg1 */            s->intra_matrix[j] = ff_mpeg1_default_intra_matrix[i];            s->inter_matrix[j] = ff_mpeg1_default_non_intra_matrix[i];        }    }    /* precompute matrix */    /* for mjpeg, we do include qscale in the matrix */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -