diff options
Diffstat (limited to 'libopenjpeg/ppix_manager.c')
| -rwxr-xr-x | libopenjpeg/ppix_manager.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/libopenjpeg/ppix_manager.c b/libopenjpeg/ppix_manager.c index f4f67859..4106144d 100755 --- a/libopenjpeg/ppix_manager.c +++ b/libopenjpeg/ppix_manager.c @@ -85,13 +85,15 @@ int write_ppix( int coff, opj_codestream_info_t cstr_info, opj_bool EPHused, int return len; } -// NMAX might be wrong , phix too, do sth to correction int write_ppixfaix( int coff, int compno, opj_codestream_info_t cstr_info, opj_bool EPHused, int j2klen, opj_cio_t *cio) { int len, lenp; int tileno, resno, precno, layno, num_packet=0; int size_of_coding; // 4 or 8 int version; + int i,nmax=0; + opj_tile_info_t *tile_Idx; + opj_packet_info_t packet; if( j2klen > pow( 2, 32)){ size_of_coding = 8; @@ -107,19 +109,22 @@ int write_ppixfaix( int coff, int compno, opj_codestream_info_t cstr_info, opj_b cio_write( cio, JPIP_FAIX, 4); /* FAIX */ cio_write( cio, version, 1); /* Version 0 = 4 bytes */ - cio_write( cio, cstr_info.packno, size_of_coding); /* NMAX */ + for( i=0; i<=cstr_info.numdecompos[compno]; i++) + nmax += cstr_info.tile[0].ph[i] * cstr_info.tile[0].pw[i] * cstr_info.numlayers; + + cio_write( cio, nmax, size_of_coding); /* NMAX */ cio_write( cio, cstr_info.tw*cstr_info.th, size_of_coding); /* M */ for( tileno=0; tileno<cstr_info.tw*cstr_info.th; tileno++){ - - opj_tile_info_t *tile_Idx = &cstr_info.tile[ tileno]; + + tile_Idx = &cstr_info.tile[ tileno]; // int correction = EPHused ? 3 : 1; num_packet=0; - for( resno=0; resno< cstr_info.numdecompos[compno]+1; resno++){ + for( resno=0; resno<=cstr_info.numdecompos[compno]; resno++){ for( precno=0; precno<tile_Idx->pw[resno]*tile_Idx->ph[resno]; precno++){ for( layno=0; layno<cstr_info.numlayers; layno++){ - opj_packet_info_t packet = tile_Idx->packet[num_packet]; + packet = tile_Idx->packet[num_packet * cstr_info.numcomps + compno]; cio_write( cio, packet.start_pos-coff, size_of_coding); /* start position */ cio_write( cio, packet.end_pos-packet.start_pos+1, size_of_coding); /* length */ @@ -129,7 +134,7 @@ int write_ppixfaix( int coff, int compno, opj_codestream_info_t cstr_info, opj_b } /* PADDING */ - while( num_packet < cstr_info.packno){ + while( num_packet < nmax){ cio_write( cio, 0, size_of_coding); /* start position */ cio_write( cio, 0, size_of_coding); /* length */ num_packet++; |
