From 0039da6ed82e3e9f365f8c79ea7a25b65d57e6da Mon Sep 17 00:00:00 2001 From: Peter Schlaile Date: Sun, 8 Feb 2009 09:07:36 +0000 Subject: == REDCODE == * Fixed ntohl dependency (and hopefully 64bit issues) * Video length detection fixed (tests for picture presence) --- extern/libredcode/codec.c | 2 +- extern/libredcode/format.c | 28 ++++++++++++++++++---------- 2 files changed, 19 insertions(+), 11 deletions(-) (limited to 'extern') diff --git a/extern/libredcode/codec.c b/extern/libredcode/codec.c index e0b79119e80..f47a85cbb13 100644 --- a/extern/libredcode/codec.c +++ b/extern/libredcode/codec.c @@ -64,7 +64,7 @@ struct redcode_frame_raw * redcode_decode_video_raw( /* setup the decoder decoding parameters using the current image and user parameters */ opj_setup_decoder(dinfo, ¶meters); - + /* open a byte stream */ cio = opj_cio_open((opj_common_ptr)dinfo, frame->data + frame->offset, frame->length); diff --git a/extern/libredcode/format.c b/extern/libredcode/format.c index 4677c49b8a5..2406f3bb2c7 100644 --- a/extern/libredcode/format.c +++ b/extern/libredcode/format.c @@ -1,9 +1,3 @@ -#ifdef _WIN32 -#include -#else -#include -#endif - #include #include #include @@ -11,7 +5,7 @@ struct red_reob { unsigned long len; - char head[4]; + unsigned long head; unsigned long rdvo; unsigned long rdvs; @@ -38,8 +32,15 @@ struct redcode_handle { unsigned long * rdao; unsigned long * rdas; long cfra; + long length; }; +unsigned long read_be32(unsigned long val) +{ + unsigned char * v = (unsigned char*) & val; + + return (v[0] << 24) | (v[1] << 16) | (v[2] << 8) | v[3]; +} static unsigned char* read_packet(FILE * fp, char * expect) { @@ -52,7 +53,7 @@ static unsigned char* read_packet(FILE * fp, char * expect) head[4] = 0; - len = ntohl(len); + len = read_be32(len); if (strcmp(expect, head) != 0) { fprintf(stderr, "Read: %s, expect: %s\n", head, expect); @@ -79,7 +80,7 @@ static unsigned long * read_index_packet(FILE * fp, char * expect) } for (i = 2; i < rv[0]/4; i++) { - rv[i] = ntohl(rv[i]); + rv[i] = read_be32(rv[i]); } return rv; } @@ -109,6 +110,7 @@ struct redcode_handle * redcode_open(const char * fname) { struct redcode_handle * rv = NULL; struct red_reob * reob = NULL; + int i; FILE * fp = fopen(fname, "rb"); @@ -136,6 +138,12 @@ struct redcode_handle * redcode_open(const char * fname) return NULL; } + for (i = 0; i < (rv->rdvo[0] - 8)/4; i++) { + if (rv->rdvo[i + 2]) { + rv->length = i; + } + } + return rv; } @@ -162,7 +170,7 @@ void redcode_close(struct redcode_handle * handle) long redcode_get_length(struct redcode_handle * handle) { - return handle->rdvo[0]/4; + return handle->length; } struct redcode_frame * redcode_read_video_frame( -- cgit v1.2.3