diff options
| author | Francois-Olivier Devaux <fodevaux@users.noreply.github.com> | 2004-11-26 16:33:18 +0000 |
|---|---|---|
| committer | Francois-Olivier Devaux <fodevaux@users.noreply.github.com> | 2004-11-26 16:33:18 +0000 |
| commit | 0ddef9b2dbd7d61233350ccc7477fa46b2438385 (patch) | |
| tree | ee7681546c64f8bc5268ca03dfde0a3df0b5447a /libopenjpeg/jp2.c | |
| parent | 1bdb07cefed67bb661f835d5165eb931c583c02d (diff) | |
Modifications to increase modularity of jp2 coding/decoding
Diffstat (limited to 'libopenjpeg/jp2.c')
| -rw-r--r-- | libopenjpeg/jp2.c | 41 |
1 files changed, 19 insertions, 22 deletions
diff --git a/libopenjpeg/jp2.c b/libopenjpeg/jp2.c index 31794dee..ab69212d 100644 --- a/libopenjpeg/jp2.c +++ b/libopenjpeg/jp2.c @@ -65,6 +65,11 @@ int jp2_read_boxhdr(jp2_box_t * box) return 1; }; box->length = cio_read(4); + if (box->length == 0) + box->length = cio_numbytesleft() + 12; + } + else if (box->length == 0) { + box->length = cio_numbytesleft() + 8; } return 0; } @@ -418,34 +423,33 @@ int jp2_read_ftyp(jp2_struct_t * jp2_struct) jp2_struct->cl[i] = cio_read(4); /* CLi */ if (cio_tell() - box.init_pos != box.length) { - fprintf(stderr, "Error with FTYP Box\n"); + fprintf(stderr, "Error with FTYP Box\n"); return 1; } return 0; } -int jp2_write_jp2c(j2k_image_t * img, j2k_cp_t * cp, char *jp2_buffer, - char *index) +int jp2_write_jp2c(jp2_struct_t * jp2_struct, char *j2k_codestream) { - int len; jp2_box_t box; box.init_pos = cio_tell(); cio_skip(4); cio_write(JP2_JP2C, 4); // JP2C - len = j2k_encode(img, cp, jp2_buffer, cp->tdx * cp->tdy * cp->th * cp->tw * 2, index); + jp2_struct->j2k_codestream_offset = cio_tell(); + memcpy(cio_getbp(),j2k_codestream, jp2_struct->j2k_codestream_len); - box.length = cio_tell() - box.init_pos; + box.length = 8 + jp2_struct->j2k_codestream_len; cio_seek(box.init_pos); cio_write(box.length, 4); /* L */ cio_seek(box.init_pos + box.length); + return box.length; } -int jp2_read_jp2c(unsigned char *src, int len, jp2_struct_t * jp2_struct, - j2k_cp_t * cp) +int jp2_read_jp2c(unsigned char *src, jp2_struct_t * jp2_struct) { jp2_box_t box; @@ -455,12 +459,8 @@ int jp2_read_jp2c(unsigned char *src, int len, jp2_struct_t * jp2_struct, return 1; } - src += cio_tell(); - - if (j2k_decode(src, len, jp2_struct->image, cp) == 0) { - fprintf(stderr, "JP2F box: failed to decode J2K bitstream image!\n"); - return 1; - } + jp2_struct->j2k_codestream_offset = cio_tell(); + jp2_struct->j2k_codestream_len = box.length - 8; return 0; } @@ -508,8 +508,8 @@ int jp2_read_jp() } -int jp2_decode(unsigned char *src, int len, jp2_struct_t * jp2_struct, - j2k_cp_t * cp) + +int jp2_read_struct(unsigned char *src, jp2_struct_t * jp2_struct, int len) { cio_init(src, len); @@ -519,20 +519,17 @@ int jp2_decode(unsigned char *src, int len, jp2_struct_t * jp2_struct, return 1; if (jp2_read_jp2h(jp2_struct)) return 1; - if (jp2_read_jp2c(src, len, jp2_struct, cp)) + if (jp2_read_jp2c(src, jp2_struct)) return 1; return 0; } -int jp2_encode(jp2_struct_t * jp2_struct, j2k_cp_t * cp, char *output, - char *index) +int jp2_wrap_j2k(jp2_struct_t * jp2_struct, char *j2k_codestream, char *output) { - int len; - jp2_write_jp(); jp2_write_ftyp(jp2_struct); jp2_write_jp2h(jp2_struct); - len = jp2_write_jp2c(jp2_struct->image, cp, output, index); + jp2_write_jp2c(jp2_struct, j2k_codestream); return cio_tell(); } |
