From 6b320d6ad6943c14cf8685a49e36963adce0ddeb Mon Sep 17 00:00:00 2001 From: Matthias Vogelgesang Date: Thu, 26 Jul 2012 10:40:17 +0200 Subject: Add -f and --print-frame-rate option --- test/ipedec.c | 80 +++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 58 insertions(+), 22 deletions(-) diff --git a/test/ipedec.c b/test/ipedec.c index af0b304..63ff648 100644 --- a/test/ipedec.c +++ b/test/ipedec.c @@ -13,6 +13,8 @@ typedef struct { int dry_run; int verbose; int rows; + int print_frame_rate; + int print_num_rows; } Options; static int @@ -47,11 +49,13 @@ usage(void) { printf("usage: ipedec [OPTION]... FILE [FILE ...]\n\ Options:\n\ - -h, --help Show this help message and exit\n\ - -v, --verbose Print additional information on STDOUT\n\ - -r, --num-rows=N N rows that are contained in the file\n\ - -c, --clear-frame Clear the frame for each iteration\n\ - -d, --dry-run Do not save the frames\n"); + -h, --help Show this help message and exit\n\ + -v, --verbose Print additional information on STDOUT\n\ + -r, --num-rows=N N rows that are contained in the file\n\ + -c, --clear-frame Clear the frame for each iteration\n\ + -d, --dry-run Do not save the frames\n\ + -f, --print-frame-rate Print frame rate on STDOUT\n\ + --print-num-rows Print number of rows on STDOUT\n"); } static void @@ -139,7 +143,7 @@ process_file(const char *filename, Options *opts) size_t num_bytes; uint16_t *pixels; uint32_t time_stamp, old_time_stamp; - int n_frames = 0; + int n_frames; int error = 0; FILE *fp; char output_name[256]; @@ -172,6 +176,7 @@ process_file(const char *filename, Options *opts) timer = timer_new (); pixels = (uint16_t *) malloc(2048 * 1088 * sizeof(uint16_t)); n_frames = 0; + old_time_stamp = 0; while (error != EIO) { if (opts->clear_frame) @@ -187,6 +192,16 @@ process_file(const char *filename, Options *opts) print_meta_data (&meta); } + if (opts->print_frame_rate && old_time_stamp != 0) { + uint32_t diff = 80 * (meta.time_stamp - old_time_stamp); + + printf("%d", 1000000000 / diff); + old_time_stamp = meta.time_stamp; + } + + if (opts->print_frame_rate || opts->print_num_rows) + printf("\n"); + n_frames++; if (!opts->dry_run) @@ -201,8 +216,10 @@ process_file(const char *filename, Options *opts) if (!opts->dry_run) fclose(fp); - mtime = timer->seconds * 1000.0 + timer->useconds / 1000.0; - printf("Decoded %i frames in %.5fms\n", n_frames, mtime); + if (opts->verbose) { + mtime = timer->seconds * 1000.0 + timer->useconds / 1000.0; + printf("Decoded %i frames in %.5fms\n", n_frames, mtime); + } free(pixels); free(buffer); @@ -216,39 +233,58 @@ int main(int argc, char const* argv[]) { int getopt_ret, index; + enum { + CLEAR_FRAME = 'c', + DRY_RUN = 'd', + FRAME_RATE = 'f', + HELP = 'h', + SET_NUM_ROWS = 'r', + VERBOSE = 'v', + NUM_ROWS + }; + static struct option long_options[] = { - { "num-rows", required_argument, 0, 'r' }, - { "clear-frame", no_argument, 0, 'c' }, - { "verbose", no_argument, 0, 'v' }, - { "help", no_argument, 0, 'h' }, - { "dry-run", no_argument, 0, 'd' }, + { "num-rows", required_argument, 0, SET_NUM_ROWS }, + { "clear-frame", no_argument, 0, CLEAR_FRAME }, + { "verbose", no_argument, 0, VERBOSE }, + { "help", no_argument, 0, HELP }, + { "dry-run", no_argument, 0, DRY_RUN }, + { "print-frame-rate", no_argument, 0, FRAME_RATE }, + { "print-num-rows", no_argument, 0, NUM_ROWS }, { 0, 0, 0, 0 } }; static Options opts = { - .clear_frame = 0, - .dry_run = 0, + .rows = 1088, .verbose = 0, - .rows = 1088 + .dry_run = 0, + .clear_frame = 0, + .print_frame_rate = 0, + .print_num_rows = 0 }; - while ((getopt_ret = getopt_long(argc, (char *const *) argv, "r:cvhd", long_options, &index)) != -1) { + while ((getopt_ret = getopt_long(argc, (char *const *) argv, "r:cvhdf", long_options, &index)) != -1) { switch (getopt_ret) { - case 'r': + case SET_NUM_ROWS: opts.rows = atoi(optarg); break; - case 'c': + case CLEAR_FRAME: opts.clear_frame = 1; break; - case 'v': + case VERBOSE: opts.verbose = 1; break; - case 'h': + case HELP: usage(); return 0; - case 'd': + case DRY_RUN: opts.dry_run = 1; break; + case FRAME_RATE: + opts.print_frame_rate = 1; + break; + case NUM_ROWS: + opts.print_num_rows = 1; default: break; } -- cgit v1.2.1