|
@@ -23,6 +23,7 @@
|
|
|
|
|
|
#include "libavformat/avformat.h"
|
|
|
#include "libavcodec/avcodec.h"
|
|
|
+#include "libavutil/avstring.h"
|
|
|
#include "libavutil/opt.h"
|
|
|
#include "libavutil/pixdesc.h"
|
|
|
#include "libavutil/dict.h"
|
|
@@ -737,23 +738,34 @@ static int probe_file(const char *filename)
|
|
|
AVFormatContext *fmt_ctx;
|
|
|
int ret;
|
|
|
Writer *w;
|
|
|
+ const char *buf = print_format;
|
|
|
+ char *w_str = NULL, *w_args = NULL;
|
|
|
WriterContext *wctx;
|
|
|
|
|
|
writer_register_all();
|
|
|
|
|
|
- if (!print_format)
|
|
|
- print_format = av_strdup("default");
|
|
|
- w = writer_get_by_name(print_format);
|
|
|
- if (!w) {
|
|
|
- fprintf(stderr, "Invalid output format '%s'\n", print_format);
|
|
|
- return AVERROR(EINVAL);
|
|
|
+ if (buf) {
|
|
|
+ w_str = av_get_token(&buf, "=");
|
|
|
+ if (*buf == '=') {
|
|
|
+ buf++;
|
|
|
+ w_args = av_get_token(&buf, "");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- if ((ret = writer_open(&wctx, w, NULL, NULL)) < 0)
|
|
|
- return ret;
|
|
|
+ if (!w_str)
|
|
|
+ w_str = av_strdup("default");
|
|
|
|
|
|
+ w = writer_get_by_name(w_str);
|
|
|
+ if (!w) {
|
|
|
+ av_log(NULL, AV_LOG_ERROR, "Invalid output format '%s'\n", w_str);
|
|
|
+ ret = AVERROR(EINVAL);
|
|
|
+ goto end;
|
|
|
+ }
|
|
|
+
|
|
|
+ if ((ret = writer_open(&wctx, w, w_args, NULL)) < 0)
|
|
|
+ goto end;
|
|
|
if ((ret = open_input_file(&fmt_ctx, filename)))
|
|
|
- return ret;
|
|
|
+ goto end;
|
|
|
|
|
|
writer_print_header(wctx);
|
|
|
PRINT_CHAPTER(packets);
|
|
@@ -764,7 +776,11 @@ static int probe_file(const char *filename)
|
|
|
av_close_input_file(fmt_ctx);
|
|
|
writer_close(&wctx);
|
|
|
|
|
|
- return 0;
|
|
|
+end:
|
|
|
+ av_free(w_str);
|
|
|
+ av_free(w_args);
|
|
|
+
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
static void show_usage(void)
|