summaryrefslogtreecommitdiff
path: root/fftools
diff options
context:
space:
mode:
authorMartin Storsjö <martin@martin.st>2019-12-02 11:16:25 +0200
committerMartin Storsjö <martin@martin.st>2019-12-18 15:15:12 +0200
commite10654de2b0db0f3b4828a3cc066d6fa21d02516 (patch)
tree665e89bb3d24ade3e4f683ed2f654bf5785ce08a /fftools
parentbd831912712e32b8e78d409bfa7ea7e668ce4b42 (diff)
ffprobe: Fix fate tests for ffprobe in cases where TARGET_PATH differs from the current path
In these cases, we must pass the full path of the file to ffprobe (as the current working dir on the remote system, e.g. when invoked with "ssh remote ffprobe ..." isn't the wanted one). The input filename passed to ffprobe is also included in the output, which is part of the reference test data. Add a new option to ffprobe to allow overriding what path is printed, to keep the original relative path in the tests. An alternative approach could be an option to allow requesting omitting the file name from the dumped data, and updating the test references accordingly. Signed-off-by: Martin Storsjö <martin@martin.st>
Diffstat (limited to 'fftools')
-rw-r--r--fftools/ffprobe.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/fftools/ffprobe.c b/fftools/ffprobe.c
index a95d74346d..b619c1f34e 100644
--- a/fftools/ffprobe.c
+++ b/fftools/ffprobe.c
@@ -254,6 +254,7 @@ static const OptionDef *options;
/* FFprobe context */
static const char *input_filename;
+static const char *print_input_filename;
static AVInputFormat *iformat = NULL;
static struct AVHashContext *hash;
@@ -2836,7 +2837,8 @@ static void show_error(WriterContext *w, int err)
writer_print_section_footer(w);
}
-static int open_input_file(InputFile *ifile, const char *filename)
+static int open_input_file(InputFile *ifile, const char *filename,
+ const char *print_filename)
{
int err, i;
AVFormatContext *fmt_ctx = NULL;
@@ -2858,6 +2860,10 @@ static int open_input_file(InputFile *ifile, const char *filename)
print_error(filename, err);
return err;
}
+ if (print_filename) {
+ av_freep(&fmt_ctx->url);
+ fmt_ctx->url = av_strdup(print_filename);
+ }
ifile->fmt_ctx = fmt_ctx;
if (scan_all_pmts_set)
av_dict_set(&format_opts, "scan_all_pmts", NULL, AV_DICT_MATCH_CASE);
@@ -2971,7 +2977,8 @@ static void close_input_file(InputFile *ifile)
avformat_close_input(&ifile->fmt_ctx);
}
-static int probe_file(WriterContext *wctx, const char *filename)
+static int probe_file(WriterContext *wctx, const char *filename,
+ const char *print_filename)
{
InputFile ifile = { 0 };
int ret, i;
@@ -2980,7 +2987,7 @@ static int probe_file(WriterContext *wctx, const char *filename)
do_read_frames = do_show_frames || do_count_frames;
do_read_packets = do_show_packets || do_count_packets;
- ret = open_input_file(&ifile, filename);
+ ret = open_input_file(&ifile, filename, print_filename);
if (ret < 0)
goto end;
@@ -3286,6 +3293,12 @@ static int opt_input_file_i(void *optctx, const char *opt, const char *arg)
return 0;
}
+static int opt_print_filename(void *optctx, const char *opt, const char *arg)
+{
+ print_input_filename = arg;
+ return 0;
+}
+
void show_help_default(const char *opt, const char *arg)
{
av_log_set_callback(log_callback_help);
@@ -3544,6 +3557,7 @@ static const OptionDef real_options[] = {
{ "read_intervals", HAS_ARG, {.func_arg = opt_read_intervals}, "set read intervals", "read_intervals" },
{ "default", HAS_ARG | OPT_AUDIO | OPT_VIDEO | OPT_EXPERT, {.func_arg = opt_default}, "generic catch all option", "" },
{ "i", HAS_ARG, {.func_arg = opt_input_file_i}, "read specified file", "input_file"},
+ { "print_filename", HAS_ARG, {.func_arg = opt_print_filename}, "override the printed input filename", "print_file"},
{ "find_stream_info", OPT_BOOL | OPT_INPUT | OPT_EXPERT, { &find_stream_info },
"read and decode the streams to fill missing information with heuristics" },
{ NULL, },
@@ -3692,7 +3706,7 @@ int main(int argc, char **argv)
av_log(NULL, AV_LOG_ERROR, "Use -h to get full help or, even better, run 'man %s'.\n", program_name);
ret = AVERROR(EINVAL);
} else if (input_filename) {
- ret = probe_file(wctx, input_filename);
+ ret = probe_file(wctx, input_filename, print_input_filename);
if (ret < 0 && do_show_error)
show_error(wctx, ret);
}