diff options
| author | Antonin Descampe <antonin@gmail.com> | 2011-11-02 00:49:20 +0000 |
|---|---|---|
| committer | Antonin Descampe <antonin@gmail.com> | 2011-11-02 00:49:20 +0000 |
| commit | 238b7679173c36fb3c838c252591278fa0e93c4d (patch) | |
| tree | 22b4e021c7025a7d9cec042ba3238eb88765d06e /libopenjpeg | |
| parent | 49a0f0db8fe8c85f3e808e4857ee48322c47dcea (diff) | |
[1.5] backport r1017, r1030:1032 from trunk + additional fix for cmake and autotools
Diffstat (limited to 'libopenjpeg')
| -rwxr-xr-x | libopenjpeg/phix_manager.c | 47 | ||||
| -rwxr-xr-x | libopenjpeg/ppix_manager.c | 57 |
2 files changed, 72 insertions, 32 deletions
diff --git a/libopenjpeg/phix_manager.c b/libopenjpeg/phix_manager.c index d659169f..e9a8fdcb 100755 --- a/libopenjpeg/phix_manager.c +++ b/libopenjpeg/phix_manager.c @@ -84,13 +84,11 @@ int write_phix( int coff, opj_codestream_info_t cstr_info, opj_bool EPHused, int int write_phixfaix( int coff, int compno, opj_codestream_info_t cstr_info, opj_bool EPHused, int j2klen, opj_cio_t *cio) { - int len, lenp; - int size_of_coding; // 4 or 8 - int version; - int tileno, resno, precno, layno, num_packet=0; - int i,nmax=0; + int len, lenp, tileno, version, i, nmax, size_of_coding; // 4 or 8 opj_tile_info_t *tile_Idx; opj_packet_info_t packet; + int resno, precno, layno, num_packet; + int numOfres, numOfprec, numOflayers; if( j2klen > pow( 2, 32)){ size_of_coding = 8; @@ -105,7 +103,8 @@ int write_phixfaix( int coff, int compno, opj_codestream_info_t cstr_info, opj_b cio_skip( cio, 4); /* L [at the end] */ cio_write( cio, JPIP_FAIX, 4); /* FAIX */ cio_write( cio, version,1); /* Version 0 = 4 bytes */ - + + nmax = 0; 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; @@ -113,16 +112,38 @@ int write_phixfaix( int coff, int compno, opj_codestream_info_t cstr_info, opj_b cio_write( cio, cstr_info.tw*cstr_info.th, size_of_coding); /* M */ for( tileno=0; tileno<cstr_info.tw*cstr_info.th; tileno++){ - tile_Idx = &cstr_info.tile[ tileno]; - // int correction = EPHused ? 3 : 1; + num_packet = 0; + numOfres = cstr_info.numdecompos[compno] + 1; - 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++){ - packet = tile_Idx->packet[num_packet * cstr_info.numcomps + compno]; - cio_write( cio, packet.start_pos-coff, size_of_coding); /* start position */ + 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 LRCP: + packet = tile_Idx->packet[ ((layno*numOfres+resno)*cstr_info.numcomps+compno)*numOfprec+precno]; + break; + case RLCP: + packet = tile_Idx->packet[ ((resno*numOflayers+layno)*cstr_info.numcomps+compno)*numOfprec+precno]; + break; + case RPCL: + packet = tile_Idx->packet[ ((resno*numOfprec+precno)*cstr_info.numcomps+compno)*numOflayers+layno]; + break; + case PCRL: + packet = tile_Idx->packet[ ((precno*cstr_info.numcomps+compno)*numOfres+resno)*numOflayers + layno]; + break; + case CPRL: + packet = tile_Idx->packet[ ((compno*numOfprec+precno)*numOfres+resno)*numOflayers + layno]; + break; + default: + fprintf( stderr, "failed to ppix indexing\n"); + } + + cio_write( cio, packet.start_pos-coff, size_of_coding); /* start position */ cio_write( cio, packet.end_ph_pos-packet.start_pos+1, size_of_coding); /* length */ num_packet++; diff --git a/libopenjpeg/ppix_manager.c b/libopenjpeg/ppix_manager.c index 4106144d..41f6d0b4 100755 --- a/libopenjpeg/ppix_manager.c +++ b/libopenjpeg/ppix_manager.c @@ -87,14 +87,12 @@ int write_ppix( int coff, opj_codestream_info_t cstr_info, opj_bool EPHused, int 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; + int len, lenp, tileno, version, i, nmax, size_of_coding; // 4 or 8 opj_tile_info_t *tile_Idx; opj_packet_info_t packet; - + int resno, precno, layno, num_packet; + int numOfres, numOfprec, numOflayers; + if( j2klen > pow( 2, 32)){ size_of_coding = 8; version = 1; @@ -109,6 +107,7 @@ 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 */ + nmax = 0; 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; @@ -116,29 +115,50 @@ int write_ppixfaix( int coff, int compno, opj_codestream_info_t cstr_info, opj_b cio_write( cio, cstr_info.tw*cstr_info.th, size_of_coding); /* M */ for( tileno=0; tileno<cstr_info.tw*cstr_info.th; tileno++){ - tile_Idx = &cstr_info.tile[ tileno]; - // int correction = EPHused ? 3 : 1; + num_packet=0; - - 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++){ - packet = tile_Idx->packet[num_packet * cstr_info.numcomps + compno]; - cio_write( cio, packet.start_pos-coff, size_of_coding); /* start position */ + 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 LRCP: + packet = tile_Idx->packet[ ((layno*numOfres+resno)*cstr_info.numcomps+compno)*numOfprec+precno]; + break; + case RLCP: + packet = tile_Idx->packet[ ((resno*numOflayers+layno)*cstr_info.numcomps+compno)*numOfprec+precno]; + break; + case RPCL: + packet = tile_Idx->packet[ ((resno*numOfprec+precno)*cstr_info.numcomps+compno)*numOflayers+layno]; + break; + case PCRL: + packet = tile_Idx->packet[ ((precno*cstr_info.numcomps+compno)*numOfres+resno)*numOflayers + layno]; + break; + case CPRL: + packet = tile_Idx->packet[ ((compno*numOfprec+precno)*numOfres+resno)*numOflayers + layno]; + break; + default: + fprintf( stderr, "failed to ppix indexing\n"); + } + + 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 */ num_packet++; } } } - - /* PADDING */ - while( num_packet < nmax){ + + while( num_packet < nmax){ /* PADDING */ cio_write( cio, 0, size_of_coding); /* start position */ cio_write( cio, 0, size_of_coding); /* length */ num_packet++; - } + } } len = cio_tell( cio)-lenp; @@ -147,5 +167,4 @@ int write_ppixfaix( int coff, int compno, opj_codestream_info_t cstr_info, opj_b cio_seek( cio, lenp+len); return len; - } |
