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

📄 utils.c

📁 ffmpeg源码分析
💻 C
📖 第 1 页 / 共 4 页
字号:
{"mb_threshold", NULL, OFFSET(mb_threshold), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX},{"dc", NULL, OFFSET(intra_dc_precision), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E},{"nssew", "nsse weight", OFFSET(nsse_weight), FF_OPT_TYPE_INT, 8, INT_MIN, INT_MAX, V|E},{"skip_top", NULL, OFFSET(skip_top), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|D},{"skip_bottom", NULL, OFFSET(skip_bottom), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|D},{"profile", NULL, OFFSET(profile), FF_OPT_TYPE_INT, FF_PROFILE_UNKNOWN, INT_MIN, INT_MAX, V|A|E, "profile"},{"unknown", NULL, 0, FF_OPT_TYPE_CONST, FF_PROFILE_UNKNOWN, INT_MIN, INT_MAX, V|A|E, "profile"},{"level", NULL, OFFSET(level), FF_OPT_TYPE_INT, FF_LEVEL_UNKNOWN, INT_MIN, INT_MAX, V|A|E, "level"},{"unknown", NULL, 0, FF_OPT_TYPE_CONST, FF_LEVEL_UNKNOWN, INT_MIN, INT_MAX, V|A|E, "level"},{"lowres", NULL, OFFSET(lowres), FF_OPT_TYPE_INT, 0, 0, INT_MAX, V|D},{"frame_skip_threshold", NULL, OFFSET(frame_skip_threshold), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E},{"frame_skip_factor", NULL, OFFSET(frame_skip_factor), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E},{"frame_skip_exp", NULL, OFFSET(frame_skip_exp), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E},{"skipcmp", "frame skip compare function", OFFSET(frame_skip_cmp), FF_OPT_TYPE_INT, FF_CMP_DCTMAX, INT_MIN, INT_MAX, V|E, "cmp_func"},{"border_mask", NULL, OFFSET(border_masking), FF_OPT_TYPE_FLOAT, DEFAULT, FLT_MIN, FLT_MAX, V|E},{"mb_lmin", NULL, OFFSET(mb_lmin), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E},{"mb_lmax", NULL, OFFSET(mb_lmax), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E},{"me_penalty_compensation", NULL, OFFSET(me_penalty_compensation), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E},{"bidir_refine", NULL, OFFSET(bidir_refine), FF_OPT_TYPE_INT, DEFAULT, 0, 4, V|E},{"brd_scale", NULL, OFFSET(brd_scale), FF_OPT_TYPE_INT, DEFAULT, 0, 10, V|E},{"crf", NULL, OFFSET(crf), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E},{"cqp", NULL, OFFSET(cqp), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E},{"keyint_min", NULL, OFFSET(keyint_min), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E},{"refs", NULL, OFFSET(refs), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E},{"chromaoffset", NULL, OFFSET(chromaoffset), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E},{"bframebias", NULL, OFFSET(bframebias), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E},{"trellis", NULL, OFFSET(trellis), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E},{"directpred", NULL, OFFSET(directpred), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E},{"bpyramid", NULL, 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_BPYRAMID, INT_MIN, INT_MAX, V|E, "flags2"},{"wpred", NULL, 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_WPRED, INT_MIN, INT_MAX, V|E, "flags2"},{"mixed_refs", NULL, 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_MIXED_REFS, INT_MIN, INT_MAX, V|E, "flags2"},{"8x8dct", NULL, 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_8X8DCT, INT_MIN, INT_MAX, V|E, "flags2"},{"fastpskip", NULL, 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_FASTPSKIP, INT_MIN, INT_MAX, V|E, "flags2"},{"aud", NULL, 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_AUD, INT_MIN, INT_MAX, V|E, "flags2"},{"brdo", NULL, 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_BRDO, INT_MIN, INT_MAX, V|E, "flags2"},{"complexityblur", NULL, OFFSET(complexityblur), FF_OPT_TYPE_FLOAT, DEFAULT, FLT_MIN, FLT_MAX, V|E},{"deblockalpha", NULL, OFFSET(deblockalpha), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E},{"deblockbeta", NULL, OFFSET(deblockbeta), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E},{"partitions", NULL, OFFSET(partitions), FF_OPT_TYPE_FLAGS, DEFAULT, INT_MIN, INT_MAX, V|E, "partitions"},{"parti4x4", NULL, 0, FF_OPT_TYPE_CONST, X264_PART_I4X4, INT_MIN, INT_MAX, V|E, "partitions"},{"parti8x8", NULL, 0, FF_OPT_TYPE_CONST, X264_PART_I8X8, INT_MIN, INT_MAX, V|E, "partitions"},{"partp4x4", NULL, 0, FF_OPT_TYPE_CONST, X264_PART_P4X4, INT_MIN, INT_MAX, V|E, "partitions"},{"partp8x8", NULL, 0, FF_OPT_TYPE_CONST, X264_PART_P8X8, INT_MIN, INT_MAX, V|E, "partitions"},{"partb8x8", NULL, 0, FF_OPT_TYPE_CONST, X264_PART_B8X8, INT_MIN, INT_MAX, V|E, "partitions"},{"sc_factor", NULL, OFFSET(scenechange_factor), FF_OPT_TYPE_INT, 6, 0, INT_MAX, V|E},{NULL},};#undef A#undef Vstatic AVClass av_codec_context_class = { "AVCodecContext", context_to_name, options };void avcodec_get_context_defaults(AVCodecContext *s){    memset(s, 0, sizeof(AVCodecContext));    s->av_class= &av_codec_context_class;    s->bit_rate= 800*1000;    s->bit_rate_tolerance= s->bit_rate*10;    s->qmin= 2;    s->qmax= 31;    s->mb_lmin= FF_QP2LAMBDA * 2;    s->mb_lmax= FF_QP2LAMBDA * 31;    s->rc_eq= "tex^qComp";    s->cqp = -1;    s->refs = 1;    s->directpred = 2;    s->qcompress= 0.5;    s->complexityblur = 20.0;    s->keyint_min = 25;    s->flags2 = CODEC_FLAG2_FASTPSKIP;    s->max_qdiff= 3;    s->b_quant_factor=1.25;    s->b_quant_offset=1.25;    s->i_quant_factor=-0.8;    s->i_quant_offset=0.0;    s->error_concealment= 3;    s->error_resilience= 1;    s->workaround_bugs= FF_BUG_AUTODETECT;    s->time_base= (AVRational){0,1};    s->gop_size= 50;    s->me_method= ME_EPZS;    s->get_buffer= avcodec_default_get_buffer;    s->release_buffer= avcodec_default_release_buffer;    s->get_format= avcodec_default_get_format;    s->execute= avcodec_default_execute;    s->thread_count=1;    s->me_subpel_quality=8;    s->lmin= FF_QP2LAMBDA * s->qmin;    s->lmax= FF_QP2LAMBDA * s->qmax;    s->sample_aspect_ratio= (AVRational){0,1};    s->ildct_cmp= FF_CMP_VSAD;    s->profile= FF_PROFILE_UNKNOWN;    s->level= FF_LEVEL_UNKNOWN;    s->me_penalty_compensation= 256;    s->pix_fmt= PIX_FMT_NONE;    s->frame_skip_cmp= FF_CMP_DCTMAX;    s->nsse_weight= 8;    s->sample_fmt= SAMPLE_FMT_S16; // FIXME: set to NONE    s->intra_quant_bias= FF_DEFAULT_QUANT_BIAS;    s->inter_quant_bias= FF_DEFAULT_QUANT_BIAS;    s->palctrl = NULL;    s->reget_buffer= avcodec_default_reget_buffer;}/** * allocates a AVCodecContext and set it to defaults. * this can be deallocated by simply calling free() */AVCodecContext *avcodec_alloc_context(void){    AVCodecContext *avctx= av_malloc(sizeof(AVCodecContext));    if(avctx==NULL) return NULL;    avcodec_get_context_defaults(avctx);    return avctx;}void avcodec_get_frame_defaults(AVFrame *pic){    memset(pic, 0, sizeof(AVFrame));    pic->pts= AV_NOPTS_VALUE;    pic->key_frame= 1;}/** * allocates a AVPFrame and set it to defaults. * this can be deallocated by simply calling free() */AVFrame *avcodec_alloc_frame(void){    AVFrame *pic= av_malloc(sizeof(AVFrame));    if(pic==NULL) return NULL;    avcodec_get_frame_defaults(pic);    return pic;}int avcodec_open(AVCodecContext *avctx, AVCodec *codec){    int ret= -1;    entangled_thread_counter++;    if(entangled_thread_counter != 1){        av_log(avctx, AV_LOG_ERROR, "insufficient thread locking around avcodec_open/close()\n");        goto end;    }    if(avctx->codec)        goto end;    if (codec->priv_data_size > 0) {        avctx->priv_data = av_mallocz(codec->priv_data_size);        if (!avctx->priv_data)            goto end;    } else {        avctx->priv_data = NULL;    }    if(avctx->coded_width && avctx->coded_height)        avcodec_set_dimensions(avctx, avctx->coded_width, avctx->coded_height);    else if(avctx->width && avctx->height)        avcodec_set_dimensions(avctx, avctx->width, avctx->height);    if((avctx->coded_width||avctx->coded_height) && avcodec_check_dimensions(avctx,avctx->coded_width,avctx->coded_height)){        av_freep(&avctx->priv_data);        goto end;    }    avctx->codec = codec;    avctx->codec_id = codec->id;    avctx->frame_number = 0;    ret = avctx->codec->init(avctx);    if (ret < 0) {        av_freep(&avctx->priv_data);        avctx->codec= NULL;        goto end;    }    ret=0;end:    entangled_thread_counter--;    return ret;}int avcodec_encode_audio(AVCodecContext *avctx, uint8_t *buf, int buf_size,                         const short *samples){    if(buf_size < FF_MIN_BUFFER_SIZE && 0){        av_log(avctx, AV_LOG_ERROR, "buffer smaller then minimum size\n");        return -1;    }    if((avctx->codec->capabilities & CODEC_CAP_DELAY) || samples){        int ret = avctx->codec->encode(avctx, buf, buf_size, (void *)samples);        avctx->frame_number++;        return ret;    }else        return 0;}int avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size,                         const AVFrame *pict){    if(buf_size < FF_MIN_BUFFER_SIZE){        av_log(avctx, AV_LOG_ERROR, "buffer smaller then minimum size\n");        return -1;    }    if(avcodec_check_dimensions(avctx,avctx->width,avctx->height))        return -1;    if((avctx->codec->capabilities & CODEC_CAP_DELAY) || pict){        int ret = avctx->codec->encode(avctx, buf, buf_size, (void *)pict);        avctx->frame_number++;        emms_c(); //needed to avoid an emms_c() call before every return;        return ret;    }else        return 0;}int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size,                            const AVSubtitle *sub){    int ret;    ret = avctx->codec->encode(avctx, buf, buf_size, (void *)sub);    avctx->frame_number++;    return ret;}/** * decode a frame. * @param buf bitstream buffer, must be FF_INPUT_BUFFER_PADDING_SIZE larger then the actual read bytes * because some optimized bitstream readers read 32 or 64 bit at once and could read over the end * @param buf_size the size of the buffer in bytes * @param got_picture_ptr zero if no frame could be decompressed, Otherwise, it is non zero * @return -1 if error, otherwise return the number of * bytes used. */int avcodec_decode_video(AVCodecContext *avctx, AVFrame *picture,                         int *got_picture_ptr,                         uint8_t *buf, int buf_size){    int ret;    *got_picture_ptr= 0;    if((avctx->coded_width||avctx->coded_height) && avcodec_check_dimensions(avctx,avctx->coded_width,avctx->coded_height))        return -1;    if((avctx->codec->capabilities & CODEC_CAP_DELAY) || buf_size){        ret = avctx->codec->decode(avctx, picture, got_picture_ptr,                                buf, buf_size);        emms_c(); //needed to avoid an emms_c() call before every return;        if (*got_picture_ptr)            avctx->frame_number++;    }else        ret= 0;    return ret;}/* decode an audio frame. return -1 if error, otherwise return the   *number of bytes used. If no frame could be decompressed,   *frame_size_ptr is zero. Otherwise, it is the decompressed frame   *size in BYTES. */int avcodec_decode_audio(AVCodecContext *avctx, int16_t *samples,                         int *frame_size_ptr,                         uint8_t *buf, int buf_size){    int ret;    *frame_size_ptr= 0;    if((avctx->codec->capabilities & CODEC_CAP_DELAY) || buf_size){        ret = avctx->codec->decode(avctx, samples, frame_size_ptr,                                buf, buf_size);        avctx->frame_number++;    }else        ret= 0;    return ret;}/* decode a subtitle message. return -1 if error, otherwise return the   *number of bytes used. If no subtitle could be decompressed,   *got_sub_ptr is zero. Otherwise, the subtitle is stored in *sub. */int avcodec_decode_subtitle(AVCodecContext *avctx, AVSubtitle *sub,                            int *got_sub_ptr,                            const uint8_t *buf, int buf_size){    int ret;    *got_sub_ptr = 0;    ret = avctx->codec->decode(avctx, sub, got_sub_ptr,                               (uint8_t *)buf, buf_size);    if (*got_sub_ptr)        avctx->frame_number++;    return ret;}int avcodec_close(AVCodecContext *avctx){    entangled_thread_counter++;    if(entangled_thread_counter != 1){        av_log(avctx, AV_LOG_ERROR, "insufficient thread locking around avcodec_open/close()\n");        entangled_thread_counter--;        return -1;    }    if (avctx->codec->close)        avctx->codec->close(avctx);    avcodec_default_free_buffers(avctx);    av_freep(&avctx->priv_data);    avctx->codec = NULL;    entangled_thread_counter--;    return 0;}AVCodec *avcodec_find_encoder(enum CodecID id){    AVCodec *p;    p = first_avcodec;    while (p) {        if (p->encode != NULL && p->id == id)            return p;        p = p->next;    }    return NULL;}AVCodec *avcodec_find_encoder_by_name(const char *name){    AVCodec *p;    p = first_avcodec;    while (p) {        if (p->encode != NULL && strcmp(name,p->name) == 0)            return p;        p = p->next;    }    return NULL;}AVCodec *avcodec_find_decoder(enum CodecID id){    AVCodec *p;    p = first_avcodec;    while (p) {        if (p->decode != NULL && p->id == id)            return p;

⌨️ 快捷键说明

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