-
- while( num_packet < nmax){ /* PADDING */
- opj_write_bytes(l_data_header,0,size_of_coding);/* start position */
- opj_stream_write_data(cio,l_data_header,size_of_coding,p_manager);
- opj_write_bytes(l_data_header,0,size_of_coding);/* length */
- opj_stream_write_data(cio,l_data_header,size_of_coding,p_manager);
- num_packet++;
- }
- }
-
- len = (OPJ_UINT32)(opj_stream_tell(cio)-lenp);
- opj_stream_seek(cio, lenp,p_manager);
- opj_write_bytes(l_data_header,len,4);/* L */
- opj_stream_write_data(cio,l_data_header,4,p_manager);
- opj_stream_seek(cio, lenp+len,p_manager);
-
- return (int)len;
+
+ opj_write_bytes(l_data_header, nmax, size_of_coding); /* NMAX */
+ opj_stream_write_data(cio, l_data_header, size_of_coding, p_manager);
+ opj_write_bytes(l_data_header, (OPJ_UINT32)(cstr_info.tw * cstr_info.th),
+ size_of_coding); /* M */
+ opj_stream_write_data(cio, l_data_header, size_of_coding, p_manager);
+
+ for (tileno = 0; tileno < (OPJ_UINT32)(cstr_info.tw * cstr_info.th); tileno++) {
+ tile_Idx = &cstr_info.tile[ tileno];
+
+ num_packet = 0;
+ numOfres = cstr_info.numdecompos[compno] + 1;
+
+ for (resno = 0; resno < numOfres ; resno++) {
+ numOfprec = tile_Idx->pw[resno] * tile_Idx->ph[resno];
+ for (precno = 0; precno < numOfprec; precno++) {
+ numOflayers = cstr_info.numlayers;
+ for (layno = 0; layno < numOflayers; layno++) {
+
+ switch (cstr_info.prog) {
+ case OPJ_LRCP:
+ packet = tile_Idx->packet[((layno * numOfres + resno) * cstr_info.numcomps +
+ compno) * numOfprec + precno];
+ break;
+ case OPJ_RLCP:
+ packet = tile_Idx->packet[((resno * numOflayers + layno) * cstr_info.numcomps +
+ compno) * numOfprec + precno];
+ break;
+ case OPJ_RPCL:
+ packet = tile_Idx->packet[((resno * numOfprec + precno) * cstr_info.numcomps +
+ compno) * numOflayers + layno];
+ break;
+ case OPJ_PCRL:
+ packet = tile_Idx->packet[((precno * cstr_info.numcomps + compno) * numOfres +
+ resno) * numOflayers + layno];
+ break;
+ case OPJ_CPRL:
+ packet = tile_Idx->packet[((compno * numOfprec + precno) * numOfres + resno) *
+ numOflayers + layno];
+ break;
+ default:
+ fprintf(stderr, "failed to ppix indexing\n");
+ }
+
+ opj_write_bytes(l_data_header, (OPJ_UINT32)(packet.start_pos - coff),
+ size_of_coding); /* start position */
+ opj_stream_write_data(cio, l_data_header, size_of_coding, p_manager);
+ opj_write_bytes(l_data_header,
+ (OPJ_UINT32)(packet.end_pos - packet.start_pos + 1),
+ size_of_coding); /* length */
+ opj_stream_write_data(cio, l_data_header, size_of_coding, p_manager);
+
+ num_packet++;
+ }
+ }
+ }
+
+ while (num_packet < nmax) { /* PADDING */
+ opj_write_bytes(l_data_header, 0,
+ size_of_coding); /* start position */
+ opj_stream_write_data(cio, l_data_header, size_of_coding, p_manager);
+ opj_write_bytes(l_data_header, 0,
+ size_of_coding); /* length */
+ opj_stream_write_data(cio, l_data_header, size_of_coding, p_manager);
+ num_packet++;
+ }
+ }
+
+ len = (OPJ_UINT32)(opj_stream_tell(cio) - lenp);
+ opj_stream_seek(cio, lenp, p_manager);
+ opj_write_bytes(l_data_header, len, 4); /* L */
+ opj_stream_write_data(cio, l_data_header, 4, p_manager);
+ opj_stream_seek(cio, lenp + len, p_manager);
+
+ return (int)len;