annotate opts.c @ 1003:c2c116876fd7 libavcodec

better padding/stuffing bug autodetection
author michaelni
date Mon, 13 Jan 2003 12:57:39 +0000
parents c5aef83c6a3f
children ef905ded19fe
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
962
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
1 /*
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
2 * LGPL
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
3 */
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
4
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
5 /*
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
6 * typical parsed command line:
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
7 * msmpeg4:bitrate=720000:qmax=16
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
8 *
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
9 */
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
10
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
11 #include "avcodec.h"
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
12
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
13 /*
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
14 * possible extension - use for decoder options
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
15 * - for given codec names filter only correct
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
16 * options given (could be passed with 'str')
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
17 */
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
18
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
19 /**
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
20 * \param avctx where to store parsed results
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
21 * \param str string with options for parsing
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
22 * \param config allocated avc_config_t for external parsing
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
23 * i.e. external program might learn about all available
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
24 * options for given codec
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
25 **/
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
26 void avcodec_getopt(AVCodecContext* avctx, char* str, avc_config_t** config)
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
27 {
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
28 AVCodecContext avctx_tmp;
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
29 AVCodecContext* ctx = (avctx) ? avctx : &avctx_tmp;
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
30 static const char* class_h263 = ",msmpeg4,";
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
31 //"huffyuv,wmv1,msmpeg4v2,msmpeg4,mpeg4,mpeg1,mpeg1video,mjpeg,rv10,h263,h263p"
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
32
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
33 avc_config_t cnf[] =
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
34 {
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
35 // FIXME: sorted by importance!!!
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
36 // expert option should follow more common ones
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
37 {
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
38 "bitrate", "desired video bitrate",
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
39 FF_CONF_TYPE_INT, &ctx->bit_rate, 4, 240000000, 800000, NULL, class_h263
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
40 }, {
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
41 "vhq", "very high quality",
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
42 FF_CONF_TYPE_FLAG, &ctx->flags, 0, CODEC_FLAG_HQ, 0, NULL, class_h263
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
43 }, {
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
44 "ratetol", "number of bits the bitstream is allowed to diverge from the reference"
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
45 "the reference can be CBR (for CBR pass1) or VBR (for pass2)",
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
46 FF_CONF_TYPE_INT, &ctx->bit_rate_tolerance, 4, 240000000, 8000, NULL, class_h263
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
47 }, {
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
48 "qmin", "minimum quantizer", FF_CONF_TYPE_INT, &ctx->qmin, 1, 31, 2, NULL, class_h263
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
49 }, {
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
50 "qmax", "maximum qunatizer", FF_CONF_TYPE_INT, &ctx->qmax, 1, 31, 31, NULL, class_h263
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
51 }, {
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
52 "rc_eq", "rate control equation",
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
53 FF_CONF_TYPE_STRING, &ctx->rc_eq, 0, 0, 0, "tex^qComp" /* FILLME options */, class_h263
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
54 }, {
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
55 "rc_minrate", "rate control minimum bitrate",
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
56 FF_CONF_TYPE_INT, &ctx->rc_min_rate, 4, 24000000, 0, NULL, class_h263
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
57 }, {
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
58 "rc_maxrate", "rate control maximum bitrate",
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
59 FF_CONF_TYPE_INT, &ctx->rc_max_rate, 4, 24000000, 0, NULL, class_h263
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
60 }, {
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
61 "psnr", "calculate PSNR of compressed frames",
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
62 FF_CONF_TYPE_FLAG, &ctx->flags, 0, CODEC_FLAG_PSNR, 0, NULL, class_h263
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
63 }, {
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
64 "rc_override", "ratecontrol override (=startframe,endframe,qscale,quality_factor)",
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
65 FF_CONF_TYPE_RCOVERIDE, &ctx->rc_override, 0, 0, 0, NULL, class_h263
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
66 },
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
67
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
68 { NULL, NULL, 0, NULL, 0, 0, 0, NULL, NULL }
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
69 };
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
70
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
71 if (config)
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
72 {
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
73 *config = malloc(sizeof(cnf));
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
74 if (*config)
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
75 memcpy(*config, cnf, sizeof(cnf));
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
76 }
c5aef83c6a3f * first shot for generaly usable option parser for codecs
kabi
parents:
diff changeset
77 }