int t2_encode_packets(opj_t2_t* t2, int tileno, opj_tcd_tile_t *tile, int maxlayers, unsigned char *dest, int len, opj_volume_info_t *volume_info) { unsigned char *c = dest; int e = 0; opj_pi_iterator_t *pi = NULL; int pino; opj_volume_t *volume = t2->volume; opj_cp_t *cp = t2->cp; /* create a packet iterator */ pi = pi_create(volume, cp, tileno); if(!pi) { fprintf(stdout,"[ERROR] Failed to create a pi structure\n"); return -999; } if(volume_info) { volume_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, volume_info, tileno, cp); /*opj_event_msg(t2->cinfo, EVT_INFO, " t2_encode_packet: %d bytes coded\n",e);*/ if (e == -999) { break; } else { c += e; } /* INDEX >> */ if(volume_info && volume_info->index_on) { if(volume_info->index_write) { opj_tile_info_t *info_TL = &volume_info->tile[tileno]; opj_packet_info_t *info_PK = &info_TL->packet[volume_info->num]; if (!volume_info->num) { info_PK->start_pos = info_TL->end_header + 1; } else { info_PK->start_pos = info_TL->packet[volume_info->num - 1].end_pos + 1; } info_PK->end_pos = info_PK->start_pos + e - 1; } volume_info->num++; } /* << INDEX */ } } } /* don't forget to release pi */ pi_destroy(pi, cp, tileno); if (e == -999) { return e; } return (c - dest); }
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) { 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(!pi) { /* TODO: throw an error */ return -999; } 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++; } /* << INDEX */ } } } /* don't forget to release pi */ pi_destroy(pi, cp, tileno); if (e == -999) { return e; } return (c - dest); }
int t2_decode_packets(unsigned char *src, int len, j2k_image_t *img, j2k_cp_t *cp, int tileno, tcd_tile_t *tile) { unsigned char *c=src; pi_iterator_t *pi; pi=pi_create(img, cp, tileno); while (pi_next(pi)) { //fprintf(stderr, "compno=%d, resno=%d, precno=%d, layno=%d\n", pi->compno, pi->resno, pi->precno, pi->layno); c+=t2_decode_packet(c, src+len-c, tile, &cp->tcps[tileno], pi->compno, pi->resno, pi->precno, pi->layno); } pi_destroy(pi); return c-src; }
int t2_encode_packets(j2k_image_t *img, j2k_cp_t *cp, int tileno, tcd_tile_t *tile, int maxlayers, unsigned char *dest, int len) { unsigned char *c=dest; pi_iterator_t *pi; pi=pi_create(img, cp, tileno); while (pi_next(pi)) { if (pi->layno<maxlayers) { //fprintf(stderr, "compno=%d, resno=%d, precno=%d, layno=%d\n", pi->compno, pi->resno, pi->precno, pi->layno); c+=t2_encode_packet(tile, &cp->tcps[tileno], pi->compno, pi->resno, pi->precno, pi->layno, c, dest+len-c); } } pi_destroy(pi); return c-dest; }
int t2_decode_packets(opj_t2_t *t2, unsigned char *src, int len, int tileno, opj_tcd_tile_t *tile) { unsigned char *c = src; opj_pi_iterator_t *pi; int pino, e = 0; int n = 0; opj_image_t *image = t2->image; opj_cp_t *cp = t2->cp; /* create a packet iterator */ pi = pi_create(image, cp, tileno); if(!pi) { /* TODO: throw an error */ return -999; } for (pino = 0; pino <= cp->tcps[tileno].numpocs; pino++) { while (pi_next(&pi[pino])) { if ((cp->layer==0) || (cp->layer>=((pi[pino].layno)+1))) { e = t2_decode_packet(t2, c, src + len - c, tile, &cp->tcps[tileno], &pi[pino]); } else { e = 0; } /* progression in resolution */ image->comps[pi[pino].compno].resno_decoded = (e > 0) ? int_max(pi[pino].resno, image->comps[pi[pino].compno].resno_decoded) : image->comps[pi[pino].compno].resno_decoded; n++; if (e == -999) { /* ADD */ break; } else { c += e; } } } /* don't forget to release pi */ pi_destroy(pi, cp, tileno); if (e == -999) { return e; } return (c - src); }
int t2_decode_packets(opj_t2_t *t2, unsigned char *src, int len, int tileno, opj_tcd_tile_t *tile) { unsigned char *c = src; opj_pi_iterator_t *pi; int pino, e = 0; int n = 0,i; opj_volume_t *volume = t2->volume; opj_cp_t *cp = t2->cp; /* create a packet iterator */ pi = pi_create(volume, cp, tileno); if(!pi) { /* TODO: throw an error */ return -999; } for (pino = 0; pino <= cp->tcps[tileno].numpocs; pino++) { while (pi_next(&pi[pino])) { if ((cp->layer==0) || (cp->layer>=((pi[pino].layno)+1))) { e = t2_decode_packet(t2, c, src + len - c, tile, &cp->tcps[tileno], &pi[pino]); } else { e = 0; } /* progression in resolution */ for (i = 0; i < 3; i++){ volume->comps[pi[pino].compno].resno_decoded[i] = (e > 0) ? int_max(pi[pino].resno, volume->comps[pi[pino].compno].resno_decoded[i]) : volume->comps[pi[pino].compno].resno_decoded[i]; } n++; if (e == -999) { /* ADD */ break; } else { opj_event_msg(t2->cinfo, EVT_INFO, " t2_decode_packet: %d bytes decoded\n",e); c += e; } } } /* don't forget to release pi */ pi_destroy(pi, cp, tileno); if (e == -999) { return e; } return (c - src); }