From adaf0ef2f4e046a8f0a16ca8f2f7ffd933306a39 Mon Sep 17 00:00:00 2001 From: Matthias Vogelgesang Date: Wed, 19 Jun 2013 14:25:29 +0200 Subject: Try to use number of rows from header data --- src/ufodecode.c | 5 +++-- test/ipedec.c | 15 +++++++++------ 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/ufodecode.c b/src/ufodecode.c index 635f397..8a6b53a 100644 --- a/src/ufodecode.c +++ b/src/ufodecode.c @@ -558,6 +558,7 @@ size_t ufo_decoder_decode_frame(UfoDecoder *decoder, meta->frame_number = raw[pos++] & 0xFFFFFFF; CHECK_VALUE(raw[pos] >> 28, 0x5); meta->time_stamp = raw[pos++] & 0xFFFFFFF; + meta->n_rows = 1088; break; case 4: @@ -576,9 +577,7 @@ size_t ufo_decoder_decode_frame(UfoDecoder *decoder, pos++; if ((meta->output_mode != IPECAMERA_MODE_4_CHAN_IO) && (meta->output_mode != IPECAMERA_MODE_16_CHAN_IO)) { -#ifdef DEBUG fprintf(stderr, "Output mode 0x%x is not supported\n", meta->output_mode); -#endif return EILSEQ; } break; @@ -593,11 +592,13 @@ size_t ufo_decoder_decode_frame(UfoDecoder *decoder, #else switch (version) { case 0: + meta->n_rows = 1088; meta->frame_number = raw[pos + 6] & 0xFFFFFFF; meta->time_stamp = raw[pos + 7] & 0xFFFFFFF; break; case 4: case 5: + meta->n_rows = rows_per_frame = raw[pos] & 0x7FF; meta->frame_number = raw[pos + 6] & 0x1FFFFFF; meta->time_stamp = raw[pos + 7] & 0xFFFFFF; meta->output_mode = (raw[pos + 7] >> 24) & 0x3; diff --git a/test/ipedec.c b/test/ipedec.c index 04d3d98..fe3ba07 100644 --- a/test/ipedec.c +++ b/test/ipedec.c @@ -183,16 +183,16 @@ process_file(const char *filename, Options *opts) old_time_stamp = 0; while (error != EIO) { - if (opts->clear_frame) - memset(pixels, 0, 2048 * opts->rows * sizeof(uint16_t)); - timer_start (timer); error = ufo_decoder_get_next_frame(decoder, &pixels, &meta); + + if (meta.n_rows == 0) + meta.n_rows = opts->rows; + timer_stop (timer); n_frames++; if (!error) { - if (opts->verbose) { printf("Status for frame %i\n", n_frames); print_meta_data (&meta); @@ -211,8 +211,11 @@ process_file(const char *filename, Options *opts) if (opts->print_frame_rate || opts->print_num_rows) printf("\n"); + if (opts->clear_frame) + memset(pixels, 0, 2048 * meta.n_rows * sizeof(uint16_t)); + if (!opts->dry_run) - fwrite(pixels, sizeof(uint16_t), 2048 * opts->rows , fp); + fwrite(pixels, sizeof(uint16_t), 2048 * meta.n_rows , fp); } else if (error != EIO) { fprintf(stderr, "Failed to decode frame %i\n", n_frames); @@ -220,7 +223,7 @@ process_file(const char *filename, Options *opts) if (opts->cont) { /* Save the frame even though we know it is corrupted */ if (!opts->dry_run) - fwrite(pixels, sizeof(uint16_t), 2048 * opts->rows, fp); + fwrite(pixels, sizeof(uint16_t), 2048 * meta.n_rows, fp); } else break; -- cgit v1.2.3