Mercurial > libavcodec.hg
diff opts.c @ 962:c5aef83c6a3f libavcodec
* first shot for generaly usable option parser for codecs
author | kabi |
---|---|
date | Mon, 06 Jan 2003 18:06:51 +0000 |
parents | |
children | ef905ded19fe |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/opts.c Mon Jan 06 18:06:51 2003 +0000 @@ -0,0 +1,77 @@ +/* + * LGPL + */ + +/* + * typical parsed command line: + * msmpeg4:bitrate=720000:qmax=16 + * + */ + +#include "avcodec.h" + +/* + * possible extension - use for decoder options + * - for given codec names filter only correct + * options given (could be passed with 'str') + */ + +/** + * \param avctx where to store parsed results + * \param str string with options for parsing + * \param config allocated avc_config_t for external parsing + * i.e. external program might learn about all available + * options for given codec + **/ +void avcodec_getopt(AVCodecContext* avctx, char* str, avc_config_t** config) +{ + AVCodecContext avctx_tmp; + AVCodecContext* ctx = (avctx) ? avctx : &avctx_tmp; + static const char* class_h263 = ",msmpeg4,"; + //"huffyuv,wmv1,msmpeg4v2,msmpeg4,mpeg4,mpeg1,mpeg1video,mjpeg,rv10,h263,h263p" + + avc_config_t cnf[] = + { + // FIXME: sorted by importance!!! + // expert option should follow more common ones + { + "bitrate", "desired video bitrate", + FF_CONF_TYPE_INT, &ctx->bit_rate, 4, 240000000, 800000, NULL, class_h263 + }, { + "vhq", "very high quality", + FF_CONF_TYPE_FLAG, &ctx->flags, 0, CODEC_FLAG_HQ, 0, NULL, class_h263 + }, { + "ratetol", "number of bits the bitstream is allowed to diverge from the reference" + "the reference can be CBR (for CBR pass1) or VBR (for pass2)", + FF_CONF_TYPE_INT, &ctx->bit_rate_tolerance, 4, 240000000, 8000, NULL, class_h263 + }, { + "qmin", "minimum quantizer", FF_CONF_TYPE_INT, &ctx->qmin, 1, 31, 2, NULL, class_h263 + }, { + "qmax", "maximum qunatizer", FF_CONF_TYPE_INT, &ctx->qmax, 1, 31, 31, NULL, class_h263 + }, { + "rc_eq", "rate control equation", + FF_CONF_TYPE_STRING, &ctx->rc_eq, 0, 0, 0, "tex^qComp" /* FILLME options */, class_h263 + }, { + "rc_minrate", "rate control minimum bitrate", + FF_CONF_TYPE_INT, &ctx->rc_min_rate, 4, 24000000, 0, NULL, class_h263 + }, { + "rc_maxrate", "rate control maximum bitrate", + FF_CONF_TYPE_INT, &ctx->rc_max_rate, 4, 24000000, 0, NULL, class_h263 + }, { + "psnr", "calculate PSNR of compressed frames", + FF_CONF_TYPE_FLAG, &ctx->flags, 0, CODEC_FLAG_PSNR, 0, NULL, class_h263 + }, { + "rc_override", "ratecontrol override (=startframe,endframe,qscale,quality_factor)", + FF_CONF_TYPE_RCOVERIDE, &ctx->rc_override, 0, 0, 0, NULL, class_h263 + }, + + { NULL, NULL, 0, NULL, 0, 0, 0, NULL, NULL } + }; + + if (config) + { + *config = malloc(sizeof(cnf)); + if (*config) + memcpy(*config, cnf, sizeof(cnf)); + } +}