[FFmpeg-devel] [PATCH 2/3 v2] doc/examples: Enchance argument parsing in fffuzz
Pawel Golinski
golpaw1 at gmail.com
Sat Apr 16 00:12:42 CEST 2016
Now any combination of arguments is allowed.
---
doc/examples/fffuzz.c | 64 ++++++++++++++++++++++++++++++++++++++++-----------
1 file changed, 51 insertions(+), 13 deletions(-)
diff --git a/doc/examples/fffuzz.c b/doc/examples/fffuzz.c
index 6672f42..fdf97e7 100644
--- a/doc/examples/fffuzz.c
+++ b/doc/examples/fffuzz.c
@@ -29,6 +29,8 @@
* @example ddcf.c
*/
+#include <getopt.h>
+
#include <libavutil/avstring.h>
#include <libavutil/imgutils.h>
#include <libavutil/samplefmt.h>
@@ -207,27 +209,63 @@ static int open_codec_context(AVCodecContext **dec_ctx, AVFormatContext *fmt_ctx
return ret;
}
+static void exit_with_usage_msg(char* prog_name)
+{
+ fprintf(stderr, "\n"
+ "usage: %s [options] -i input_file -o output_file\n\n"
+ "API example program to show how to read frames from an input file.\n"
+ "This program reads frames from a file, decodes them, and writes decoded\n"
+ "frames to a rawvideo/rawaudio file named output_file.\n"
+ "Optionally format and codec can be specified.\n\n"
+ "Options:\n"
+ "-i input_file, -input input_file\n"
+ "\tSets input_file as input\n"
+ "-o output_file, -output output_file\n"
+ "\tSets output_file as output\n"
+ "-f format_name, -format format_name\n"
+ "\tSets the decode format to format_name\n"
+ "-c codec_name, -codec codec_name\n"
+ "\tSets the decode codec to codec_name\n\n", prog_name);
+ exit(1);
+}
+
int main (int argc, char **argv)
{
- int ret = 0;
+ int ret = 0, opt;
const char *src_filename = NULL;
const char *dst_filename = NULL;
char* format = NULL;
char* codec = NULL;
- if (argc != 5 && argc != 3) {
- fprintf(stderr, "usage: %s input_file output_file [format codec]\n"
- "API example program to show how to read frames from an input file.\n"
- "This program reads frames from a file, decodes them, and writes decoded\n"
- "frames to a rawvideo/rawaudio file named output_file.\n"
- "Optionally format and codec can be specified.\n\n", argv[0]);
- exit(1);
+ static struct option long_options[] =
+ {
+ {"input", required_argument, NULL, 'i'},
+ {"output", required_argument, NULL, 'o'},
+ {"format", required_argument, NULL, 'f'},
+ {"codec", required_argument, NULL, 'c'},
+ {0, 0, 0, 0}
+ };
+
+ while ((opt = getopt_long_only(argc, argv, "", long_options, NULL)) != -1) {
+ switch (opt) {
+ case 'i':
+ src_filename = optarg;
+ break;
+ case 'o':
+ dst_filename = optarg;
+ break;
+ case 'f':
+ format = optarg;
+ break;
+ case 'c':
+ codec = optarg;
+ break;
+ }
}
- src_filename = argv[1];
- dst_filename = argv[2];
- if (argc == 5) {
- format = argv[3];
- codec = argv[4];
+
+ if (src_filename == NULL || dst_filename == NULL) {
+ fprintf(stderr, "%s: No input_file and/or output_file passed\n", argv[0]);
+ exit_with_usage_msg(argv[0]);
}
/* log all debug messages */
--
2.6.4 (Apple Git-63)
More information about the ffmpeg-devel
mailing list