summaryrefslogtreecommitdiff
path: root/indexer_JPIP/t2.c
diff options
context:
space:
mode:
Diffstat (limited to 'indexer_JPIP/t2.c')
-rw-r--r--indexer_JPIP/t2.c389
1 files changed, 0 insertions, 389 deletions
diff --git a/indexer_JPIP/t2.c b/indexer_JPIP/t2.c
deleted file mode 100644
index 14a44bea..00000000
--- a/indexer_JPIP/t2.c
+++ /dev/null
@@ -1,389 +0,0 @@
-/*
- * Copyright (c) 2001-2002, David Janssens
- * Copyright (c) 2003, Yannick Verschueren
- * Copyright (c) 2003, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "t2.h"
-#include "tcd.h"
-#include "bio.h"
-#include "j2k.h"
-#include "pi.h"
-#include "tgt.h"
-#include "int.h"
-#include "cio.h"
-#include <stdio.h>
-#include <setjmp.h>
-#include <string.h>
-#include <stdlib.h>
-
-#define RESTART 0x04
-
-extern jmp_buf j2k_error;
-
-int t2_getcommacode() {
- int n;
- for (n=0; bio_read(1); n++) {}
- return n;
-}
-
-int t2_getnumpasses()
-{
- int n;
- if (!bio_read(1)) return 1;
- if (!bio_read(1)) return 2;
- if ((n=bio_read(2))!=3) return 3+n;
- if ((n=bio_read(5))!=31) return 6+n;
- return 37+bio_read(7);
-}
-
-void t2_init_seg(tcd_seg_t *seg, int cblksty) {
- seg->numpasses=0;
- seg->len=0;
- seg->maxpasses=cblksty&J2K_CCP_CBLKSTY_TERMALL?1:100;
-}
-
-int t2_decode_packet(unsigned char *src, int len, tcd_tile_t *tile, j2k_cp_t * cp, j2k_tcp_t *tcp, int compno, int resno, int precno, int layno, info_layer_t *layer_Idx) {
- int bandno, cblkno;
- tcd_tilecomp_t *tilec = &tile->comps[compno];
- tcd_resolution_t *res = &tilec->resolutions[resno];
- unsigned char *c = src;
- unsigned char *d = c;
- int e;
- int present;
-
- if (layno == 0) {
- for (bandno = 0; bandno < res->numbands; bandno++) {
- tcd_band_t *band = &res->bands[bandno];
- tcd_precinct_t *prc = &band->precincts[precno];
- tgt_reset(prc->incltree);
- tgt_reset(prc->imsbtree);
- for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
- tcd_cblk_t *cblk = &prc->cblks[cblkno];
- cblk->numsegs = 0;
- }
- }
- }
- /* INDEX */
- layer_Idx->len_header = 0;
-
- /* When the marker PPT/PPM is used the packet header are store in PPT/PPM marker
- This part deal with this caracteristic
- step 1: Read packet header in the saved structure
- step 2: (futher) return to codestream for decoding */
- if (cp->ppm == 1) /* PPM */
- {
- c = cp->ppm_data;
- d = c;
- bio_init_dec(c, 1000);
- } else
- {
- if (tcp->ppt == 1) /* PPT */
- {
- c = tcp->ppt_data;
- d = c;
- bio_init_dec(c, 1000);
- } else /* Normal Case */
- {
- if (tcp->csty & J2K_CP_CSTY_SOP)
- {
- if ((*c) != 255 || (*(c+1) != 145)) {printf("Error : expected SOP marker [1]!!!\n");}
- c += 6;
- }
- bio_init_dec(c, src + len - c);
- layer_Idx->len_header = -6;
- }
- }
-
- present = bio_read(1);
-
- if (!present)
- {
- bio_inalign();
- /* Normal case */
- c += bio_numbytes();
- if (tcp->csty & J2K_CP_CSTY_EPH)
- {
- if ((*c) != 255 || (*(c+1) != 146)) {printf("Error : expected EPH marker [1]!!!\n");}
- c += 2;
- }
- /* INDEX */
- layer_Idx->len_header += (c-d);
-
- /* PPT and PPM dealing */
- if (cp->ppm == 1) /* PPM */
- {
- cp->ppm_data = c;
- return 0;
- }
- if (tcp->ppt == 1) /* PPT */
- {
- tcp->ppt_data = c;
- return 0;
- }
- return c - src;
- }
-
- for (bandno=0; bandno<res->numbands; bandno++) {
- tcd_band_t *band = &res->bands[bandno];
- tcd_precinct_t *prc = &band->precincts[precno];
- for (cblkno = 0; cblkno < prc->cw * prc->ch; cblkno++) {
- int included, increment, n;
- tcd_cblk_t *cblk = &prc->cblks[cblkno];
- tcd_seg_t *seg;
- if (!cblk->numsegs) {
- included = tgt_decode(prc->incltree, cblkno, layno+1);
- } else {
- included = bio_read(1);
- }
- if (!included) {
- cblk->numnewpasses = 0;
- continue;
- }
- if (!cblk->numsegs) {
- int i, numimsbs;
- for (i = 0; !tgt_decode(prc->imsbtree, cblkno, i); i++) {}
- numimsbs = i-1;
- cblk->numbps = band->numbps - numimsbs;
- cblk->numlenbits = 3;
- }
- cblk->numnewpasses = t2_getnumpasses();
- increment = t2_getcommacode();
- cblk->numlenbits += increment;
- if (!cblk->numsegs) {
- seg = &cblk->segs[0];
- t2_init_seg(seg, tcp->tccps[compno].cblksty);
- } else {
- seg = &cblk->segs[cblk->numsegs - 1];
- if (seg->numpasses == seg->maxpasses) {
- t2_init_seg(++seg, tcp->tccps[compno].cblksty);
- }
- }
- n = cblk->numnewpasses;
- do {
- seg->numnewpasses = int_min(seg->maxpasses-seg->numpasses, n);
- seg->newlen = bio_read(cblk->numlenbits + int_floorlog2(seg->numnewpasses));
- n -= seg->numnewpasses;
- if (n > 0) {
- t2_init_seg(++seg, tcp->tccps[compno].cblksty);
- }
- } while (n > 0);
- }
- }
- if(bio_inalign()) return -999;
- c += bio_numbytes();
-
- if (tcp->csty & J2K_CP_CSTY_EPH) { /* EPH marker */
- if ((*c) != 255 || (*(c+1) != 146)) {printf("Error : expected EPH marker [2]!!!\n"); }
- c += 2;
- }
-
- /* INDEX */
- layer_Idx->len_header += (c-d);
-
- /* PPT Step 2 : see above for details */
- if (cp->ppm == 1)
- {
- cp->ppm_data = c; /* Update pointer */
-
- /* INDEX */
- layer_Idx->len_header = c-d;
-
- c = src;
- d = c;
- if (tcp->csty & J2K_CP_CSTY_SOP)
- {
- if ((*c) != 255 || (*(c+1) != 145)) {printf("Error : expected SOP marker [2] !!!\n"); }
- c += 6;
- }
- bio_init_dec(c, src + len - c);
- } else
- {
- if (tcp->ppt == 1)
- {
- tcp->ppt_data = c; /* Update pointer */
- /* INDEX */
- layer_Idx->len_header = c-d;
-
- c = src;
- d = c;
- if (tcp->csty & J2K_CP_CSTY_SOP) /* SOP marker */
- {
- if ((*c) != 255 || (*(c+1) != 145)) {printf("Error : expected SOP marker [2] !!!\n"); }
- c += 6;
- }
- bio_init_dec(c, src + len - c);
-
- }
- }
-
- for (bandno = 0; bandno < res->numbands; bandno++) {
- tcd_band_t *band = &res->bands[bandno];
- tcd_precinct_t *prc = &band->precincts[precno];
- for (cblkno = 0; cblkno < prc->cw*prc->ch; cblkno++) {
- tcd_cblk_t *cblk = &prc->cblks[cblkno];
- tcd_seg_t *seg;
- if (!cblk->numnewpasses) continue;
- if (!cblk->numsegs) {
- seg = &cblk->segs[cblk->numsegs++];
- cblk->len = 0;
- } else {
- seg = &cblk->segs[cblk->numsegs-1];
- if (seg->numpasses == seg->maxpasses) {
- seg++;
- cblk->numsegs++;
- }
- }
- do {
- if (c + seg->newlen > src + len) return -999;
- memcpy(cblk->data + cblk->len, c, seg->newlen);
- if (seg->numpasses == 0) {
- seg->data = cblk->data + cblk->len;
- }
- c += seg->newlen;
- cblk->len += seg->newlen;
- seg->len += seg->newlen;
- seg->numpasses += seg->numnewpasses;
- cblk->numnewpasses -= seg->numnewpasses;
- if (cblk->numnewpasses > 0) {
- seg++;
- cblk->numsegs++;
- }
- } while (cblk->numnewpasses > 0);
- }
- }
- /* <INDEX> */
- e = c-d;
- layer_Idx->len = e;
- /* </INDEX> */
-
- return c-src;
-}
-
-void t2_init_info_packets(info_image_t *img, j2k_cp_t *cp)
-{
- int compno, tileno, resno, precno, layno;
-
- for(compno = 0; compno < img->Comp; compno++)
- {
- for(tileno = 0; tileno < img->tw*img->th; tileno++)
- {
- info_tile_t *tile_Idx = &img->tile[tileno];
- info_compo_t *compo_Idx = &tile_Idx->compo[compno];
- for(resno = 0; resno < img->Decomposition + 1 ; resno++)
- {
- info_reso_t *reso_Idx = &compo_Idx->reso[resno];
- for (precno = 0; precno < img->tile[tileno].pw * img->tile[tileno].ph; precno++)
- {
- info_prec_t *prec_Idx = &reso_Idx->prec[precno];
- for(layno = 0; layno < img->Layer ; layno++)
- {
- info_layer_t *layer_Idx = &prec_Idx->layer[layno];
- layer_Idx->offset = 0; /* start position */
- layer_Idx->len_header = 0; /* length */
- }
- }
- }
- }
- }
-}
-
-int t2_decode_packets(unsigned char *src, int len, j2k_image_t *img, j2k_cp_t *cp, int tileno, tcd_tile_t *tile, info_image_t *imgg) {
- unsigned char *c = src;
- pi_iterator_t *pi;
- int pino, compno,e;
- int partno;
- info_tile_part_t *tile_part;
- int position;
- int length_read;
- info_tile_t *tile_Idx;
- info_compo_t *compo_Idx;
- info_reso_t *reso_Idx;
- info_prec_t *prec_Idx;
- info_layer_t *layer_Idx;
-
- t2_init_info_packets(imgg, cp); /* Initialize the packets information : LEN and OFFSET to 0 */
-
- tile_Idx = &imgg->tile[tileno];
- tile_Idx->num_packet = 0;
- pi = pi_create(img, cp, tileno);
- partno = 0;
- tile_part = &tile_Idx->tile_parts[partno];
- position = tile_part->end_header + 1;
- length_read = 0;
-
- for (pino = 0; pino <= cp->tcps[tileno].numpocs; pino++)
- {
- while (pi_next(&pi[pino]))
- {
- compo_Idx = &tile_Idx->compo[pi[pino].compno];
- reso_Idx = &compo_Idx->reso[pi[pino].resno];
- prec_Idx = &reso_Idx->prec[pi[pino].precno];
- layer_Idx = &prec_Idx->layer[pi[pino].layno];
-
- layer_Idx->offset = position;
- layer_Idx->offset_header = position;
-
- e = t2_decode_packet(c, src+len-c, tile, cp, &cp->tcps[tileno], pi[pino].compno, pi[pino].resno, pi[pino].precno, pi[pino].layno,layer_Idx);
- if (e == -999)
- {
- break;
- } else
- c += e;
- position += e;
-
- /* Update position in case of multiple tile-parts for a tile >> */
- length_read += e;
- if (length_read >= (tile_part->end_pos - tile_part->end_header))
- {
- partno++;
- tile_part = &tile_Idx->tile_parts[partno];
- position = tile_part->end_header + 1;
- length_read = 0;
- }
- /* << end_update */
-
- tile_Idx->num_packet++;
- }
-
- // FREE space memory taken by pi
- for (compno = 0; compno < pi[pino].numcomps; compno++)
- {
- free(pi[pino].comps[compno].resolutions);
- }
- free(pi[pino].comps);
- }
-
- free(pi[0].include);
- free(pi);
-
- if (e==-999)
- return e;
- else
- {
- imgg->num_packet_max=int_max(imgg->num_packet_max,tile_Idx->num_packet);
- return c-src;
- }
-}