}
for (tileno = 0; tileno < cstr_info->tw * cstr_info->th; tileno++) {
- int start_pos, end_pos;
+ int start_pos, end_ph_pos, end_pos;
double disto = 0;
pack_nb = 0;
fprintf(stream, "\nTILE %d DETAILS\n", tileno);
if (cstr_info->prog == LRCP) { /* LRCP */
- fprintf(stream, "pack_nb tileno layno resno compno precno start_pos end_pos disto\n");
+ fprintf(stream, "LRCP\npack_nb tileno layno resno compno precno start_pos end_ph_pos end_pos disto\n");
for (layno = 0; layno < cstr_info->layer; layno++) {
for (resno = 0; resno < cstr_info->decomposition + 1; resno++) {
int prec_max = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno];
for (precno = 0; precno < prec_max; precno++) {
start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
+ end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
disto = cstr_info->tile[tileno].packet[pack_nb].disto;
- fprintf(stream, "%4d %6d %7d %5d %6d %6d %9d %9d %8e\n",
- pack_nb, tileno, layno, resno, compno, precno, start_pos, end_pos, disto);
+ fprintf(stream, "%4d %6d %7d %5d %6d %6d %6d %6d %7d %8e\n",
+ pack_nb, tileno, layno, resno, compno, precno, start_pos, end_ph_pos, end_pos, disto);
total_disto += disto;
pack_nb++;
}
} /* LRCP */
else if (cstr_info->prog == RLCP) { /* RLCP */
- fprintf(stream, "pack_nb tileno resno layno compno precno start_pos end_pos disto\n");
+ fprintf(stream, "RLCP\npack_nb tileno resno layno compno precno start_pos end_ph_pos end_pos disto\n");
for (resno = 0; resno < cstr_info->decomposition + 1; resno++) {
for (layno = 0; layno < cstr_info->layer; layno++) {
int prec_max = cstr_info->tile[tileno].pw[resno] * cstr_info->tile[tileno].ph[resno];
for (precno = 0; precno < prec_max; precno++) {
start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
+ end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
disto = cstr_info->tile[tileno].packet[pack_nb].disto;
- fprintf(stream, "%4d %6d %5d %7d %6d %6d %9d %9d %8e\n",
- pack_nb, tileno, resno, layno, compno, precno, start_pos, end_pos, disto);
+ fprintf(stream, "%4d %6d %5d %7d %6d %6d %9d %9d %7d %8e\n",
+ pack_nb, tileno, resno, layno, compno, precno, start_pos, end_ph_pos, end_pos, disto);
total_disto += disto;
pack_nb++;
}
} /* RLCP */
else if (cstr_info->prog == RPCL) { /* RPCL */
- fprintf(stream, "pack_nb tileno resno precno compno layno start_pos end_pos disto\n");
+ fprintf(stream, "RPCL\npack_nb tileno resno precno compno layno start_pos end_ph_pos end_pos disto\n");
for (resno = 0; resno < cstr_info->decomposition + 1; resno++) {
/* I suppose components have same XRsiz, YRsiz */
if (precno_x*pcx == x ) {
for (layno = 0; layno < cstr_info->layer; layno++) {
start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
+ end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
disto = cstr_info->tile[tileno].packet[pack_nb].disto;
- fprintf(stream, "%4d %6d %5d %6d %6d %7d %9d %9d %8e\n",
- pack_nb, tileno, resno, precno, compno, layno, start_pos, end_pos, disto);
+ fprintf(stream, "%4d %6d %5d %6d %6d %7d %9d %9d %7d %8e\n",
+ pack_nb, tileno, resno, precno, compno, layno, start_pos, end_ph_pos, end_pos, disto);
total_disto += disto;
pack_nb++;
}
int x1 = x0 + cstr_info->tile_x;
int y1 = y0 + cstr_info->tile_y;
- fprintf(stream, "pack_nb tileno precno compno resno layno start_pos end_pos disto\n");
+ fprintf(stream, "PCRL\npack_nb tileno precno compno resno layno start_pos end_ph_pos end_pos disto\n");
for (compno = 0; compno < cstr_info->comp; compno++) {
for (resno = 0; resno < cstr_info->decomposition + 1; resno++) {
if (precno_x*pcx == x ) {
for (layno = 0; layno < cstr_info->layer; layno++) {
start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
+ end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
disto = cstr_info->tile[tileno].packet[pack_nb].disto;
- fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d %9d %8e\n",
- pack_nb, tileno, precno, compno, resno, layno, start_pos, end_pos, disto);
+ fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d %9d %7d %8e\n",
+ pack_nb, tileno, precno, compno, resno, layno, start_pos, end_ph_pos, end_pos, disto);
total_disto += disto;
pack_nb++;
}
} /* PCRL */
else { /* CPRL */
- fprintf(stream, "pack_nb tileno compno precno resno layno start_pos end_pos disto\n");
+ fprintf(stream, "CPRL\npack_nb tileno compno precno resno layno start_pos end_ph_pos end_pos disto\n");
for (compno = 0; compno < cstr_info->comp; compno++) {
/* I suppose components have same XRsiz, YRsiz */
if (precno_x*pcx == x ) {
for (layno = 0; layno < cstr_info->layer; layno++) {
start_pos = cstr_info->tile[tileno].packet[pack_nb].start_pos;
+ end_ph_pos = cstr_info->tile[tileno].packet[pack_nb].end_ph_pos;
end_pos = cstr_info->tile[tileno].packet[pack_nb].end_pos;
disto = cstr_info->tile[tileno].packet[pack_nb].disto;
- fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d %9d %8e\n",
- pack_nb, tileno, compno, precno, resno, layno, start_pos, end_pos, disto);
+ fprintf(stream, "%4d %6d %6d %6d %5d %7d %9d %9d %7d %8e\n",
+ pack_nb, tileno, compno, precno, resno, layno, start_pos, end_ph_pos, end_pos, disto);
total_disto += disto;
pack_nb++;
}
static int t2_encode_packet(opj_tcd_tile_t * tile, opj_tcp_t * tcp, opj_pi_iterator_t *pi, unsigned char *dest, int length, opj_codestream_info_t *cstr_info, int tileno) {
int bandno, cblkno;
- unsigned char *sop = 0, *eph = 0;
unsigned char *c = dest;
int compno = pi->compno; /* component value */
/* <SOP 0xff91> */
if (tcp->csty & J2K_CP_CSTY_SOP) {
- sop = (unsigned char *) opj_malloc(6 * sizeof(unsigned char));
- sop[0] = 255;
- sop[1] = 145;
- sop[2] = 0;
- sop[3] = 4;
- sop[4] = (cstr_info->num % 65536) / 256;
- sop[5] = (cstr_info->num % 65536) % 256;
- memcpy(c, sop, 6);
- opj_free(sop);
+ c[0] = 255;
+ c[1] = 145;
+ c[2] = 0;
+ c[3] = 4;
+ c[4] = (cstr_info->num % 65536) / 256;
+ c[5] = (cstr_info->num % 65536) % 256;
c += 6;
}
/* </SOP> */
}
c += bio_numbytes(bio);
-
bio_destroy(bio);
/* <EPH 0xff92> */
if (tcp->csty & J2K_CP_CSTY_EPH) {
- eph = (unsigned char *) opj_malloc(2 * sizeof(unsigned char));
- eph[0] = 255;
- eph[1] = 146;
- memcpy(c, eph, 2);
- opj_free(eph);
+ c[0] = 255;
+ c[1] = 146;
c += 2;
}
/* </EPH> */
+
+ /* << INDEX */
+ // End of packet header position. Currently only represents the distance to start of packet
+ // Will be updated later by incrementing with packet start value
+ if(cstr_info && cstr_info->index_write && cstr_info->index_on) {
+ opj_packet_info_t *info_PK = &cstr_info->tile[tileno].packet[cstr_info->num];
+ info_PK->end_ph_pos = (int)(c - dest);
+ }
+ /* INDEX >> */
/* Writing the packet body */
memcpy(c, layer->data, layer->len);
cblk->numpasses += layer->numpasses;
c += layer->len;
- /* ADD for index Cfr. Marcela --> delta disto by packet */
+ /* << INDEX */
if(cstr_info && cstr_info->index_write && cstr_info->index_on) {
- opj_tile_info_t *info_TL = &cstr_info->tile[tileno];
- opj_packet_info_t *info_PK = &info_TL->packet[cstr_info->num];
+ opj_packet_info_t *info_PK = &cstr_info->tile[tileno].packet[cstr_info->num];
info_PK->disto += layer->disto;
if (cstr_info->D_max < info_PK->disto) {
cstr_info->D_max = info_PK->disto;
}
}
- /* </ADD> */
+ /* INDEX >> */
}
}
info_PK->start_pos = (cp->tp_on && info_PK->start_pos) ? info_PK->start_pos : info_TL->packet[cstr_info->num - 1].end_pos + 1;
}
info_PK->end_pos = info_PK->start_pos + e - 1;
+ info_PK->end_ph_pos += info_PK->start_pos - 1; // End of packet header which now only represents the distance
+ // to start of packet is incremented by value of start of packet
}
cstr_info->num++;