diff options
author | Zdenek Kabelac <kabi@informatics.muni.cz> | 2003-02-10 09:40:23 +0000 |
---|---|---|
committer | Zdenek Kabelac <kabi@informatics.muni.cz> | 2003-02-10 09:40:23 +0000 |
commit | fe1b62fb3e8757e9db791bd4c4f647ca50834f40 (patch) | |
tree | edba7bf5442057133631466d9286698143a4a661 /libavcodec/apiexample.c | |
parent | 97d96aaa76e11661967b7bd67cc7ef49d0212a8b (diff) | |
download | ffmpeg-fe1b62fb3e8757e9db791bd4c4f647ca50834f40.tar.gz |
* still unfinished code for Options
* demo code - awating more comments
Originally committed as revision 1569 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/apiexample.c')
-rw-r--r-- | libavcodec/apiexample.c | 84 |
1 files changed, 83 insertions, 1 deletions
diff --git a/libavcodec/apiexample.c b/libavcodec/apiexample.c index 0f730d4f54..51304e4cef 100644 --- a/libavcodec/apiexample.c +++ b/libavcodec/apiexample.c @@ -9,6 +9,10 @@ #include <string.h> #include <math.h> +#ifdef HAVE_AV_CONFIG_H +#undef HAVE_AV_CONFIG_H +#endif + #include "avcodec.h" #define INBUF_SIZE 4096 @@ -385,6 +389,80 @@ void video_decode_example(const char *outfilename, const char *filename) printf("\n"); } +// simple example how the options could be used +int options_example(int argc, char* argv[]) +{ + AVCodec* codec = avcodec_find_encoder_by_name((argc > 1) ? argv[2] : "mpeg4"); + const AVOption* c; + AVCodecContext* avctx; + char* def = av_malloc(5000); + const char* col = ""; + int i = 0; + + if (!codec) + return -1; + c = codec->options; + avctx = avcodec_alloc_context(); + *def = 0; + + if (c) { + const AVOption *stack[FF_OPT_MAX_DEPTH]; + int depth = 0; + for (;;) { + if (!c->name) { + if (c->sub) { + stack[depth++] = c; + c = c->sub; + } else { + if (depth == 0) + break; // finished + c = stack[--depth]; + c++; + } + } else { + int t = c->type & FF_OPT_TYPE_MASK; + printf("Config %s %s\n", + t == FF_OPT_TYPE_BOOL ? "bool " : + t == FF_OPT_TYPE_DOUBLE ? "double " : + t == FF_OPT_TYPE_INT ? "integer" : + t == FF_OPT_TYPE_STRING ? "string " : + "unknown??", c->name); + switch (t) { + case FF_OPT_TYPE_BOOL: + i += sprintf(def + i, "%s%s=%s", + col, c->name, + c->defval != 0. ? "on" : "off"); + break; + case FF_OPT_TYPE_DOUBLE: + i += sprintf(def + i, "%s%s=%f", + col, c->name, c->defval); + break; + case FF_OPT_TYPE_INT: + i += sprintf(def + i, "%s%s=%d", + col, c->name, (int) c->defval); + break; + case FF_OPT_TYPE_STRING: + if (c->defstr) { + char* d = av_strdup(c->defstr); + char* f = strchr(d, ','); + if (f) + *f = 0; + i += sprintf(def + i, "%s%s=%s", + col, c->name, d); + av_free(d); + } + break; + } + col = ":"; + c++; + } + } + } + printf("Default Options: %s\n", def); + av_free(def); + return 0; +} + int main(int argc, char **argv) { @@ -396,7 +474,10 @@ int main(int argc, char **argv) /* register all the codecs (you can also register only the codec you wish to have smaller code */ avcodec_register_all(); - + +#ifdef OPT_TEST + options_example(argc, argv); +#else if (argc <= 1) { audio_encode_example("/tmp/test.mp2"); audio_decode_example("/tmp/test.sw", "/tmp/test.mp2"); @@ -409,6 +490,7 @@ int main(int argc, char **argv) // audio_decode_example("/tmp/test.sw", filename); video_decode_example("/tmp/test%d.pgm", filename); +#endif return 0; } |