summaryrefslogtreecommitdiffstats
path: root/test/ipedec.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/ipedec.c')
-rw-r--r--test/ipedec.c83
1 files changed, 83 insertions, 0 deletions
diff --git a/test/ipedec.c b/test/ipedec.c
new file mode 100644
index 0000000..1aef1d6
--- /dev/null
+++ b/test/ipedec.c
@@ -0,0 +1,83 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <unistd.h>
+#include <sys/time.h>
+#include <errno.h>
+#include <libipe.h>
+
+
+int read_raw_file(const char *filename, char **buffer, size_t *length)
+{
+ FILE *fp = fopen(filename, "rb");
+ if (fp == NULL)
+ return ENOENT;
+
+ fseek(fp, 0, SEEK_END);
+ *length = ftell(fp);
+ rewind(fp);
+
+ *buffer = (char *) malloc(*length);
+ if (*buffer == NULL) {
+ fclose(fp);
+ return ENOMEM;
+ }
+
+ size_t buffer_length = fread(*buffer, 1, *length, fp);
+ fclose(fp);
+ if (buffer_length != *length) {
+ free(buffer);
+ return ERANGE;
+ }
+ return 0;
+}
+
+
+int main(int argc, char const* argv[])
+{
+ if (argc < 3) {
+ fprintf(stderr, "Usage: ipedec <filename> <number of lines per frame>\n");
+ return EXIT_FAILURE;
+ }
+
+ char *buffer = NULL;
+ size_t num_bytes = 0;
+ if (read_raw_file(argv[1], &buffer, &num_bytes))
+ return EXIT_FAILURE;
+
+ const int rows = atoi(argv[2]);
+
+ ipe_decoder decoder = ipe_decoder_new(rows, (uint32_t *) buffer, num_bytes);
+ int err = 0;
+ uint16_t *pixels = (uint16_t *) malloc(2048 * rows * sizeof(uint16_t));
+ uint32_t frame_number, time_stamp;
+ int num_frames = 0;
+ struct timeval start, end;
+ long seconds = 0L, useconds = 0L;
+
+ /* FILE *fp = fopen("test.raw", "wb"); */
+
+ while (!err) {
+ gettimeofday(&start, NULL);
+ err = ipe_decoder_get_next_frame(decoder, &pixels, &frame_number, &time_stamp);
+ gettimeofday(&end, NULL);
+
+ if (!err) {
+ num_frames++;
+ seconds += end.tv_sec - start.tv_sec;
+ useconds += end.tv_usec - start.tv_usec;
+ /* fwrite(pixels, sizeof(uint16_t), 2048 * 1088, fp); */
+ }
+ }
+ /* fclose(fp); */
+
+ float mtime = seconds * 1000.0 + useconds / 1000.0;
+ printf("Decoded %i frames in %.5fms\n", num_frames, mtime);
+
+ free(pixels);
+ ipe_decoder_free(decoder);
+ free(buffer);
+
+ return 0;
+}
+