/*
+ * Copyright (c) 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium
+ * Copyright (c) 2002-2007, Professor Benoit Macq
* Copyright (c) 2001-2003, David Janssens
* Copyright (c) 2002-2003, Yannick Verschueren
- * Copyright (c) 2003-2005, Francois Devaux and Antonin Descampe
- * Copyright (c) 2005, Herv� Drolon, FreeImage Team
- * Copyright (c) 2002-2005, Communications and remote sensing Laboratory, Universite catholique de Louvain, Belgium
+ * Copyright (c) 2003-2007, Francois-Olivier Devaux and Antonin Descampe
+ * Copyright (c) 2005, Herve Drolon, FreeImage Team
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
if (!layer->numpasses) {
continue;
}
- if (c + layer->len > dest + len) {
+ if (c + layer->len > dest + length) {
return -999;
}
if (c + seg->newlen > src + len) {
return -999;
}
+
+/* UniPG>> */
+#ifdef USE_JPWL
+ /* we need here a j2k handle to verify if making a check to
+ the validity of cblocks parameters is selected from user (-W) */
+
+ /* let's check that we are not exceeding */
+ if ((cblk->len + seg->newlen) > 8192) {
+ fprintf(stderr, "JPWL: segment too long (%d) for codeblock %d (p=%d, b=%d, r=%d, c=%d)\n",
+ seg->newlen, cblkno, precno, bandno, resno, compno);
+ if (!JPWL_ASSUME)
+ exit(-1);
+ seg->newlen = 8192 - cblk->len;
+ fprintf(stderr, " - truncating segment to %d\n", seg->newlen);
+ break;
+ };
+
+#endif /* USE_JPWL */
+/* <<UniPG */
memcpy(cblk->data + cblk->len, c, seg->newlen);
if (seg->numpasses == 0) {
/* ----------------------------------------------------------------------- */
-int t2_encode_packets(opj_t2_t* t2, int tileno, opj_tcd_tile_t *tile, int maxlayers, unsigned char *dest, int len, opj_image_info_t *image_info) {
+int t2_encode_packets(opj_t2_t* t2,int tileno, opj_tcd_tile_t *tile, int maxlayers, unsigned char *dest, int len, opj_image_info_t *image_info,opj_pi_iterator_t *tcd_pi,int tpnum, int tppos,int pino, char final_encoding){
unsigned char *c = dest;
int e = 0;
opj_pi_iterator_t *pi = NULL;
- int pino;
opj_image_t *image = t2->image;
opj_cp_t *cp = t2->cp;
-
- /* create a packet iterator */
- pi = pi_create(image, cp, tileno);
+
+ if(final_encoding == 0){
+ pi = pi_initialise_encode(image, cp, tileno,pino);
+ }else{
+ pi = tcd_pi;
+ }
if(!pi) {
/* TODO: throw an error */
return -999;
}
+ pi_create_encode(pi, cp,tileno,pino,tpnum,tppos,final_encoding);
+
if(image_info) {
image_info->num = 0;
}
-
- for (pino = 0; pino <= cp->tcps[tileno].numpocs; pino++) {
- while (pi_next(&pi[pino])) {
- if (pi[pino].layno < maxlayers) {
- e = t2_encode_packet(tile, &cp->tcps[tileno], &pi[pino], c, dest + len - c, image_info, tileno);
- if (e == -999) {
- break;
- } else {
- c += e;
- }
-
- /* INDEX >> */
- if(image_info && image_info->index_on) {
- if(image_info->index_write) {
- opj_tile_info_t *info_TL = &image_info->tile[tileno];
- opj_packet_info_t *info_PK = &info_TL->packet[image_info->num];
- if (!image_info->num) {
- info_PK->start_pos = info_TL->end_header + 1;
- } else {
- info_PK->start_pos = info_TL->packet[image_info->num - 1].end_pos + 1;
- }
- info_PK->end_pos = info_PK->start_pos + e - 1;
- }
- image_info->num++;
+ while (pi_next(&pi[pino])) {
+ if (pi[pino].layno < maxlayers) {
+ e = t2_encode_packet(tile, &cp->tcps[tileno], &pi[pino], c, dest + len - c, image_info, tileno);
+ if (e == -999) {
+ break;
+ } else {
+ c += e;
+ }
+ /* INDEX >> */
+ if(image_info && image_info->index_on) {
+ if(image_info->index_write) {
+ opj_tile_info_t *info_TL = &image_info->tile[tileno];
+ opj_packet_info_t *info_PK = &info_TL->packet[image_info->num];
+ if (!image_info->num) {
+ info_PK->start_pos = info_TL->end_header + 1;
+ } else {
+ info_PK->start_pos = info_TL->packet[image_info->num - 1].end_pos + 1;
+ }
+ info_PK->end_pos = info_PK->start_pos + e - 1;
}
- /* << INDEX */
+
+ image_info->num++;
}
+ /* << INDEX */
}
}
-
- /* don't forget to release pi */
- pi_destroy(pi, cp, tileno);
-
+ if(final_encoding == 0){
+ pi_destroy(pi, cp, tileno);
+ }
if (e == -999) {
return e;
}
opj_cp_t *cp = t2->cp;
/* create a packet iterator */
- pi = pi_create(image, cp, tileno);
+ pi = pi_create_decode(image, cp, tileno);
if(!pi) {
/* TODO: throw an error */
return -999;