tools/probetest: support testing a single specified input format

This reduces the time the test takes significantly when only one
formats needs to be tested

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
Michael Niedermayer 2014-12-21 20:20:29 +01:00
parent 1ffcf6ac90
commit 13306dde22
1 changed files with 30 additions and 5 deletions

View File

@ -29,6 +29,7 @@
static int score_array[MAX_FORMATS]; static int score_array[MAX_FORMATS];
static int64_t time_array[MAX_FORMATS]; static int64_t time_array[MAX_FORMATS];
static int failures = 0; static int failures = 0;
static const char *single_format;
#ifndef AV_READ_TIME #ifndef AV_READ_TIME
#define AV_READ_TIME(x) 0 #define AV_READ_TIME(x) 0
@ -42,7 +43,9 @@ static void probe(AVProbeData *pd, int type, int p, int size)
while ((fmt = av_iformat_next(fmt))) { while ((fmt = av_iformat_next(fmt))) {
if (fmt->flags & AVFMT_NOFILE) if (fmt->flags & AVFMT_NOFILE)
continue; continue;
if (fmt->read_probe) { if (fmt->read_probe &&
(!single_format || !strcmp(single_format, fmt->name))
) {
int score; int score;
int64_t start = AV_READ_TIME(); int64_t start = AV_READ_TIME();
score = fmt->read_probe(pd); score = fmt->read_probe(pd);
@ -75,6 +78,17 @@ static void print_times(void)
} }
} }
static int read_int(char *arg) {
int ret;
if (!arg || !*arg)
return -1;
ret = strtol(arg, &arg, 0);
if (*arg)
return -1;
return ret;
}
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
unsigned int p, i, type, size, retry; unsigned int p, i, type, size, retry;
@ -83,11 +97,22 @@ int main(int argc, char **argv)
PutBitContext pb; PutBitContext pb;
int retry_count= 4097; int retry_count= 4097;
int max_size = 65537; int max_size = 65537;
int j;
if(argc >= 2) for (j = i = 1; i<argc; i++) {
retry_count = atoi(argv[1]); if (!strcmp(argv[i], "-f") && i+1<argc && !single_format) {
if(argc >= 3) single_format = argv[++i];
max_size = atoi(argv[2]); } else if (read_int(argv[i])>0 && j == 1) {
retry_count = read_int(argv[i]);
j++;
} else if (read_int(argv[i])>0 && j == 2) {
max_size = read_int(argv[i]);
j++;
} else {
fprintf(stderr, "probetest [-f <input format>] [<retry_count> [<max_size>]]\n");
return 1;
}
}
if (max_size > 1000000000U/8) { if (max_size > 1000000000U/8) {
fprintf(stderr, "max_size out of bounds\n"); fprintf(stderr, "max_size out of bounds\n");