diff options
author | Campbell Barton <ideasman42@gmail.com> | 2016-06-09 14:56:29 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2016-07-12 16:13:30 +0300 |
commit | f12204196fb1ee985ab9745cf9c70877601145f9 (patch) | |
tree | 9a0ea8bb9eaa869a9e4b9c74b80f8dd5b86b0394 /extern/libopenjpeg/tpix_manager.c | |
parent | 57983012913f98056315dd3fb03552f5d75258d7 (diff) |
OpenJPEG: update to 2.1 from 1.5
Stream handling has changed so this required changes to how files & memory are accessed.
Diffstat (limited to 'extern/libopenjpeg/tpix_manager.c')
-rw-r--r-- | extern/libopenjpeg/tpix_manager.c | 164 |
1 files changed, 98 insertions, 66 deletions
diff --git a/extern/libopenjpeg/tpix_manager.c b/extern/libopenjpeg/tpix_manager.c index 9ba9e7fdabc..74c02ba7c29 100644 --- a/extern/libopenjpeg/tpix_manager.c +++ b/extern/libopenjpeg/tpix_manager.c @@ -1,8 +1,8 @@ /* * $Id: tpix_manager.c 897 2011-08-28 21:43:57Z Kaori.Hagihara@gmail.com $ * - * Copyright (c) 2002-2011, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium - * Copyright (c) 2002-2011, Professor Benoit Macq + * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium + * Copyright (c) 2002-2014, Professor Benoit Macq * Copyright (c) 2003-2004, Yannick Verschueren * Copyright (c) 2010-2011, Kaori Hagihara * All rights reserved. @@ -33,11 +33,18 @@ * \brief Modification of jpip.c from 2KAN indexer */ -#include <math.h> #include "opj_includes.h" #define MAX(a,b) ((a)>(b)?(a):(b)) +/* + * Get number of maximum tile parts per tile + * + * @param[in] cstr_info codestream information + * @return number of maximum tile parts per tile + */ +int get_num_max_tile_parts( opj_codestream_info_t cstr_info); + /* * Write faix box of tpix @@ -49,46 +56,51 @@ * @param[in] cio file output handle * @return length of faix box */ -int write_tpixfaix( int coff, int compno, opj_codestream_info_t cstr_info, int j2klen, opj_cio_t *cio); - -int write_tpix( int coff, opj_codestream_info_t cstr_info, int j2klen, opj_cio_t *cio) +int opj_write_tpix( int coff, + opj_codestream_info_t cstr_info, + int j2klen, opj_stream_private_t *cio, + opj_event_mgr_t * p_manager ) { - int len, lenp; - lenp = cio_tell( cio); - cio_skip( cio, 4); /* L [at the end] */ - cio_write( cio, JPIP_TPIX, 4); /* TPIX */ + OPJ_BYTE l_data_header [4]; + OPJ_UINT32 len; + OPJ_OFF_T lenp; + + lenp = opj_stream_tell(cio); + opj_stream_skip(cio, 4, p_manager); + opj_write_bytes(l_data_header,JPIP_TPIX,4); /* TPIX */ + opj_stream_write_data(cio,l_data_header,4,p_manager); - write_tpixfaix( coff, 0, cstr_info, j2klen, cio); + opj_write_tpixfaix( coff, 0, cstr_info, j2klen, cio,p_manager); - len = cio_tell( cio)-lenp; - cio_seek( cio, lenp); - cio_write( cio, len, 4); /* L */ - cio_seek( cio, lenp+len); + len = (OPJ_UINT32)(opj_stream_tell(cio)-lenp); + + opj_stream_skip(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 len; + return (int)len; } - -/* - * Get number of maximum tile parts per tile - * - * @param[in] cstr_info codestream information - * @return number of maximum tile parts per tile - */ -int get_num_max_tile_parts( opj_codestream_info_t cstr_info); - -int write_tpixfaix( int coff, int compno, opj_codestream_info_t cstr_info, int j2klen, opj_cio_t *cio) +int opj_write_tpixfaix( int coff, + int compno, + opj_codestream_info_t cstr_info, + int j2klen, + opj_stream_private_t *cio, + opj_event_mgr_t * p_manager ) { - int len, lenp; - int i, j; - int Aux; - int num_max_tile_parts; - int size_of_coding; /* 4 or 8 */ + OPJ_UINT32 len; + OPJ_OFF_T lenp; + OPJ_UINT32 i, j; + OPJ_UINT32 Aux; + OPJ_UINT32 num_max_tile_parts; + OPJ_UINT32 size_of_coding; /* 4 or 8 */ opj_tp_info_t tp; - int version; + OPJ_BYTE l_data_header [8]; + OPJ_UINT32 version; - num_max_tile_parts = get_num_max_tile_parts( cstr_info); + num_max_tile_parts = (OPJ_UINT32)get_num_max_tile_parts( cstr_info); if( j2klen > pow( 2, 32)){ size_of_coding = 8; @@ -99,47 +111,67 @@ int write_tpixfaix( int coff, int compno, opj_codestream_info_t cstr_info, int j version = num_max_tile_parts == 1 ? 0:2; } - lenp = cio_tell( cio); - cio_skip( cio, 4); /* L [at the end] */ - cio_write( cio, JPIP_FAIX, 4); /* FAIX */ - cio_write( cio, version, 1); /* Version 0 = 4 bytes */ - - cio_write( cio, num_max_tile_parts, size_of_coding); /* NMAX */ - cio_write( cio, cstr_info.tw*cstr_info.th, size_of_coding); /* M */ - for (i = 0; i < cstr_info.tw*cstr_info.th; i++){ - for (j = 0; j < cstr_info.tile[i].num_tps; j++){ + lenp = opj_stream_tell(cio); + opj_stream_skip(cio, 4, p_manager); /* L [at the end] */ + opj_write_bytes(l_data_header,JPIP_FAIX,4); /* FAIX */ + opj_stream_write_data(cio,l_data_header,4,p_manager); + opj_write_bytes(l_data_header,version,1); /* Version 0 = 4 bytes */ + opj_stream_write_data(cio,l_data_header,1,p_manager); + + opj_write_bytes(l_data_header,num_max_tile_parts,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 (i = 0; i < (OPJ_UINT32)(cstr_info.tw*cstr_info.th); i++) + { + for (j = 0; j < (OPJ_UINT32)cstr_info.tile[i].num_tps; j++) + { tp = cstr_info.tile[i].tp[j]; - cio_write( cio, tp.tp_start_pos-coff, size_of_coding); /* start position */ - cio_write( cio, tp.tp_end_pos-tp.tp_start_pos+1, size_of_coding); /* length */ - if (version & 0x02){ - if( cstr_info.tile[i].num_tps == 1 && cstr_info.numdecompos[compno] > 1) - Aux = cstr_info.numdecompos[compno] + 1; - else - Aux = j + 1; - - cio_write( cio, Aux,4); - /*cio_write(img.tile[i].tile_parts[j].num_reso_AUX,4);*/ /* Aux_i,j : Auxiliary value */ - /* fprintf(stderr,"AUX value %d\n",Aux);*/ - } + + opj_write_bytes(l_data_header,(OPJ_UINT32)(tp.tp_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)(tp.tp_end_pos-tp.tp_start_pos+1),size_of_coding); /* length */ + opj_stream_write_data(cio,l_data_header,size_of_coding,p_manager); + + if (version & 0x02) + { + if( cstr_info.tile[i].num_tps == 1 && cstr_info.numdecompos[compno] > 1) + Aux = (OPJ_UINT32)(cstr_info.numdecompos[compno] + 1); + else + Aux = j + 1; + + opj_write_bytes(l_data_header,Aux,4); + opj_stream_write_data(cio,l_data_header,4,p_manager); + + /*cio_write(img.tile[i].tile_parts[j].num_reso_AUX,4);*/ /* Aux_i,j : Auxiliary value */ + /* fprintf(stderr,"AUX value %d\n",Aux);*/ + } /*cio_write(0,4);*/ - } + } /* PADDING */ - while (j < num_max_tile_parts){ - cio_write( cio, 0, size_of_coding); /* start position */ - cio_write( cio, 0, size_of_coding); /* length */ + while (j < num_max_tile_parts) + { + + 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); + if (version & 0x02) - cio_write( cio, 0,4); /* Aux_i,j : Auxiliary value */ + opj_write_bytes(l_data_header,0,4); /* Aux_i,j : Auxiliary value */ + opj_stream_write_data(cio,l_data_header,4,p_manager); j++; + } } - } - len = cio_tell( cio)-lenp; - cio_seek( cio, lenp); - cio_write( cio, len, 4); /* L */ - cio_seek( cio, lenp+len); - - return len; + 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; } int get_num_max_tile_parts( opj_codestream_info_t cstr_info) |