1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* 2d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * The copyright in this software is being made available under the 2-clauses 3d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * BSD License, included below. This software may be subject to other third 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * party and contributor rights, including patent rights, and no such rights 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * are granted under this license. 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copyright (c) 2002-2014, Professor Benoit Macq 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copyright (c) 2001-2003, David Janssens 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copyright (c) 2002-2003, Yannick Verschueren 11d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * Copyright (c) 2003-2007, Francois-Olivier Devaux 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copyright (c) 2003-2014, Antonin Descampe 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copyright (c) 2005, Herve Drolon, FreeImage Team 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copyright (c) 2006-2007, Parvatha Elangovan 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * All rights reserved. 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Redistribution and use in source and binary forms, with or without 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * modification, are permitted provided that the following conditions 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * are met: 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 1. Redistributions of source code must retain the above copyright 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * notice, this list of conditions and the following disclaimer. 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 2. Redistributions in binary form must reproduce the above copyright 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * notice, this list of conditions and the following disclaimer in the 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * documentation and/or other materials provided with the distribution. 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * POSSIBILITY OF SUCH DAMAGE. 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "opj_includes.h" 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/** @defgroup PI PI - Implementation of a packet iterator */ 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*@{*/ 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/** @name Local static functions */ 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*@{*/ 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/** 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovGet next packet in layer-resolution-component-precinct order. 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@param pi packet iterator to modify 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@return returns false if pi pointed to the last packet or else returns true 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/ 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstatic OPJ_BOOL opj_pi_next_lrcp(opj_pi_iterator_t * pi); 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/** 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovGet next packet in resolution-layer-component-precinct order. 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@param pi packet iterator to modify 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@return returns false if pi pointed to the last packet or else returns true 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/ 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstatic OPJ_BOOL opj_pi_next_rlcp(opj_pi_iterator_t * pi); 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/** 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovGet next packet in resolution-precinct-component-layer order. 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@param pi packet iterator to modify 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@return returns false if pi pointed to the last packet or else returns true 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/ 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstatic OPJ_BOOL opj_pi_next_rpcl(opj_pi_iterator_t * pi); 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/** 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovGet next packet in precinct-component-resolution-layer order. 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@param pi packet iterator to modify 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@return returns false if pi pointed to the last packet or else returns true 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/ 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstatic OPJ_BOOL opj_pi_next_pcrl(opj_pi_iterator_t * pi); 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/** 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovGet next packet in component-precinct-resolution-layer order. 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@param pi packet iterator to modify 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov@return returns false if pi pointed to the last packet or else returns true 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/ 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstatic OPJ_BOOL opj_pi_next_cprl(opj_pi_iterator_t * pi); 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/** 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Updates the coding parameters if the encoding is used with Progression order changes and final (or cinema parameters are used). 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 81d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_cp the coding parameters to modify 82d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_tileno the tile index being concerned. 83d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_tx0 X0 parameter for the tile 84d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_tx1 X1 parameter for the tile 85d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_ty0 Y0 parameter for the tile 86d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_ty1 Y1 parameter for the tile 87d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_max_prec the maximum precision for all the bands of the tile 88d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_max_res the maximum number of resolutions for all the poc inside the tile. 89d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_dx_min the minimum dx of all the components of all the resolutions for the tile. 90d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_dy_min the minimum dy of all the components of all the resolutions for the tile. 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 92d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstatic void opj_pi_update_encode_poc_and_final(opj_cp_t *p_cp, 93d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_tileno, 94d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 p_tx0, 95d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 p_tx1, 96d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 p_ty0, 97d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 p_ty1, 98d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_max_prec, 99d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_max_res, 100d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_dx_min, 101d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_dy_min); 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/** 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Updates the coding parameters if the encoding is not used with Progression order changes and final (and cinema parameters are used). 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 106d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_cp the coding parameters to modify 107d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_num_comps the number of components 108d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_tileno the tile index being concerned. 109d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_tx0 X0 parameter for the tile 110d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_tx1 X1 parameter for the tile 111d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_ty0 Y0 parameter for the tile 112d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_ty1 Y1 parameter for the tile 113d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_max_prec the maximum precision for all the bands of the tile 114d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_max_res the maximum number of resolutions for all the poc inside the tile. 115d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_dx_min the minimum dx of all the components of all the resolutions for the tile. 116d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_dy_min the minimum dy of all the components of all the resolutions for the tile. 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 118d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstatic void opj_pi_update_encode_not_poc(opj_cp_t *p_cp, 119d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_num_comps, 120d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_tileno, 121d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 p_tx0, 122d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 p_tx1, 123d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 p_ty0, 124d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 p_ty1, 125d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_max_prec, 126d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_max_res, 127d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_dx_min, 128d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_dy_min); 129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/** 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Gets the encoding parameters needed to update the coding parameters and all the pocs. 131d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * 132d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_image the image being encoded. 133d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_cp the coding parameters. 134d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param tileno the tile index of the tile being encoded. 135d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_tx0 pointer that will hold the X0 parameter for the tile 136d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_tx1 pointer that will hold the X1 parameter for the tile 137d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_ty0 pointer that will hold the Y0 parameter for the tile 138d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_ty1 pointer that will hold the Y1 parameter for the tile 139d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_max_prec pointer that will hold the maximum precision for all the bands of the tile 140d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_max_res pointer that will hold the maximum number of resolutions for all the poc inside the tile. 141d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_dx_min pointer that will hold the minimum dx of all the components of all the resolutions for the tile. 142d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_dy_min pointer that will hold the minimum dy of all the components of all the resolutions for the tile. 143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstatic void opj_get_encoding_parameters(const opj_image_t *p_image, 145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const opj_cp_t *p_cp, 146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 tileno, 147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32 * p_tx0, 148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32 * p_tx1, 149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32 * p_ty0, 150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32 * p_ty1, 151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 * p_dx_min, 152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 * p_dy_min, 153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 * p_max_prec, 154d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 * p_max_res); 155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/** 157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Gets the encoding parameters needed to update the coding parameters and all the pocs. 158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * The precinct widths, heights, dx and dy for each component at each resolution will be stored as well. 159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * the last parameter of the function should be an array of pointers of size nb components, each pointer leading 160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * to an area of size 4 * max_res. The data is stored inside this area with the following pattern : 161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * dx_compi_res0 , dy_compi_res0 , w_compi_res0, h_compi_res0 , dx_compi_res1 , dy_compi_res1 , w_compi_res1, h_compi_res1 , ... 162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 163d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_image the image being encoded. 164d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_cp the coding parameters. 165d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param tileno the tile index of the tile being encoded. 166d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_tx0 pointer that will hold the X0 parameter for the tile 167d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_tx1 pointer that will hold the X1 parameter for the tile 168d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_ty0 pointer that will hold the Y0 parameter for the tile 169d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_ty1 pointer that will hold the Y1 parameter for the tile 170d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_max_prec pointer that will hold the maximum precision for all the bands of the tile 171d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_max_res pointer that will hold the maximum number of resolutions for all the poc inside the tile. 172d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_dx_min pointer that will hold the minimum dx of all the components of all the resolutions for the tile. 173d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_dy_min pointer that will hold the minimum dy of all the components of all the resolutions for the tile. 174d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_resolutions pointer to an area corresponding to the one described above. 175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstatic void opj_get_all_encoding_parameters(const opj_image_t *p_image, 177d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const opj_cp_t *p_cp, 178d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 tileno, 179d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 * p_tx0, 180d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 * p_tx1, 181d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 * p_ty0, 182d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 * p_ty1, 183d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 * p_dx_min, 184d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 * p_dy_min, 185d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 * p_max_prec, 186d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 * p_max_res, 187d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 ** p_resolutions); 188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/** 189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Allocates memory for a packet iterator. Data and data sizes are set by this operation. 190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * No other data is set. The include section of the packet iterator is not allocated. 191d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * 192d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_image the image used to initialize the packet iterator (in fact only the number of components is relevant. 193d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param p_cp the coding parameters. 194d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann * @param tileno the index of the tile from which creating the packet iterator. 195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 196d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstatic opj_pi_iterator_t * opj_pi_create(const opj_image_t *p_image, 197d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const opj_cp_t *p_cp, 198d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 tileno); 199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/** 200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FIXME DOC 201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 202d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstatic void opj_pi_update_decode_not_poc(opj_pi_iterator_t * p_pi, 203d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_tcp_t * p_tcp, 204d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_max_precision, 205d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_max_res); 206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/** 207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FIXME DOC 208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 209d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstatic void opj_pi_update_decode_poc(opj_pi_iterator_t * p_pi, 210d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_tcp_t * p_tcp, 211d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_max_precision, 212d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_max_res); 213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/** 215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * FIXME DOC 216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 217d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstatic OPJ_BOOL opj_pi_check_next_level(OPJ_INT32 pos, 218d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_cp_t *cp, 219d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 tileno, 220d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 pino, 221d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const OPJ_CHAR *prog); 222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*@}*/ 224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/*@}*/ 226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* 228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov========================================================== 229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov local functions 230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov========================================================== 231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/ 232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 233d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstatic void opj_pi_emit_error(opj_pi_iterator_t * pi, const char* msg) 234d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann{ 235d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (void)pi; 236d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (void)msg; 237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 239d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstatic OPJ_BOOL opj_pi_next_lrcp(opj_pi_iterator_t * pi) 240d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann{ 241d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_comp_t *comp = NULL; 242d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_resolution_t *res = NULL; 243d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 index = 0; 244d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 245d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pi->first) { 246d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann comp = &pi->comps[pi->compno]; 247d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann res = &comp->resolutions[pi->resno]; 248d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann goto LABEL_SKIP; 249d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 250d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->first = 0; 251d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 252d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 253d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) { 254d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; 255d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->resno++) { 256d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) { 257d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann comp = &pi->comps[pi->compno]; 258d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pi->resno >= comp->numresolutions) { 259d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann continue; 260d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 261d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann res = &comp->resolutions[pi->resno]; 262d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pi->tp_on) { 263d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->poc.precno1 = res->pw * res->ph; 264d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 265d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (pi->precno = pi->poc.precno0; pi->precno < pi->poc.precno1; pi->precno++) { 266d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * 267d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->step_c + pi->precno * pi->step_p; 268d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* Avoids index out of bounds access with */ 269d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* id_000098,sig_11,src_005411,op_havoc,rep_2 of */ 270d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* https://github.com/uclouvain/openjpeg/issues/938 */ 271d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* Not sure if this is the most clever fix. Perhaps */ 272d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* include should be resized when a POC arises, or */ 273d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* the POC should be rejected */ 274d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (index >= pi->include_size) { 275d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_emit_error(pi, "Invalid access to pi->include"); 276d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_FALSE; 277d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 278d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pi->include[index]) { 279d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->include[index] = 1; 280d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_TRUE; 281d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 282d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannLABEL_SKIP: 283d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ; 284d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 285d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 286d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 287d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 288d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 289d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_FALSE; 290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 292d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstatic OPJ_BOOL opj_pi_next_rlcp(opj_pi_iterator_t * pi) 293d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann{ 294d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_comp_t *comp = NULL; 295d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_resolution_t *res = NULL; 296d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 index = 0; 297d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 298d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pi->first) { 299d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann comp = &pi->comps[pi->compno]; 300d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann res = &comp->resolutions[pi->resno]; 301d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann goto LABEL_SKIP; 302d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 303d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->first = 0; 304d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 305d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 306d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; pi->resno++) { 307d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) { 308d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) { 309d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann comp = &pi->comps[pi->compno]; 310d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pi->resno >= comp->numresolutions) { 311d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann continue; 312d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 313d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann res = &comp->resolutions[pi->resno]; 314d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pi->tp_on) { 315d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->poc.precno1 = res->pw * res->ph; 316d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 317d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (pi->precno = pi->poc.precno0; pi->precno < pi->poc.precno1; pi->precno++) { 318d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * 319d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->step_c + pi->precno * pi->step_p; 320d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (index >= pi->include_size) { 321d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_emit_error(pi, "Invalid access to pi->include"); 322d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_FALSE; 323d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 324d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pi->include[index]) { 325d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->include[index] = 1; 326d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_TRUE; 327d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 328d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannLABEL_SKIP: 329d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ; 330d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 331d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 332d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 333d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 334d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 335d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_FALSE; 336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 338d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstatic OPJ_BOOL opj_pi_next_rpcl(opj_pi_iterator_t * pi) 339d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann{ 340d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_comp_t *comp = NULL; 341d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_resolution_t *res = NULL; 342d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 index = 0; 343d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 344d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pi->first) { 345d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann goto LABEL_SKIP; 346d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 347d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 compno, resno; 348d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->first = 0; 349d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->dx = 0; 350d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->dy = 0; 351d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (compno = 0; compno < pi->numcomps; compno++) { 352d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann comp = &pi->comps[compno]; 353d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (resno = 0; resno < comp->numresolutions; resno++) { 354d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 dx, dy; 355d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann res = &comp->resolutions[resno]; 356d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (res->pdx + comp->numresolutions - 1 - resno < 32 && 357d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann comp->dx <= UINT_MAX / (1u << (res->pdx + comp->numresolutions - 1 - resno))) { 358d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann dx = comp->dx * (1u << (res->pdx + comp->numresolutions - 1 - resno)); 359d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->dx = !pi->dx ? dx : opj_uint_min(pi->dx, dx); 360d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 361d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (res->pdy + comp->numresolutions - 1 - resno < 32 && 362d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann comp->dy <= UINT_MAX / (1u << (res->pdy + comp->numresolutions - 1 - resno))) { 363d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann dy = comp->dy * (1u << (res->pdy + comp->numresolutions - 1 - resno)); 364d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->dy = !pi->dy ? dy : opj_uint_min(pi->dy, dy); 365d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 366d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 367d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 368d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pi->dx == 0 || pi->dy == 0) { 369d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_FALSE; 370d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 371d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 372d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pi->tp_on) { 373d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->poc.ty0 = pi->ty0; 374d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->poc.tx0 = pi->tx0; 375d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->poc.ty1 = pi->ty1; 376d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->poc.tx1 = pi->tx1; 377d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 378d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (pi->resno = pi->poc.resno0; pi->resno < pi->poc.resno1; pi->resno++) { 379d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (pi->y = pi->poc.ty0; pi->y < pi->poc.ty1; 380d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->y += (OPJ_INT32)(pi->dy - (OPJ_UINT32)(pi->y % (OPJ_INT32)pi->dy))) { 381d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (pi->x = pi->poc.tx0; pi->x < pi->poc.tx1; 382d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->x += (OPJ_INT32)(pi->dx - (OPJ_UINT32)(pi->x % (OPJ_INT32)pi->dx))) { 383d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) { 384d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 levelno; 385d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 trx0, try0; 386d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 trx1, try1; 387d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 rpx, rpy; 388d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 prci, prcj; 389d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann comp = &pi->comps[pi->compno]; 390d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pi->resno >= comp->numresolutions) { 391d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann continue; 392d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 393d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann res = &comp->resolutions[pi->resno]; 394d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann levelno = comp->numresolutions - 1 - pi->resno; 395d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* Avoids division by zero */ 396d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* Relates to id_000004,sig_06,src_000679,op_arith8,pos_49,val_-17 */ 397d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* of https://github.com/uclouvain/openjpeg/issues/938 */ 398d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (levelno >= 32 || 399d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ((comp->dx << levelno) >> levelno) != comp->dx || 400d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ((comp->dy << levelno) >> levelno) != comp->dy) { 401d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann continue; 402d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 403d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if ((comp->dx << levelno) > INT_MAX || 404d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (comp->dy << levelno) > INT_MAX) { 405d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann continue; 406d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 407d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann trx0 = opj_int_ceildiv(pi->tx0, (OPJ_INT32)(comp->dx << levelno)); 408d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann try0 = opj_int_ceildiv(pi->ty0, (OPJ_INT32)(comp->dy << levelno)); 409d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann trx1 = opj_int_ceildiv(pi->tx1, (OPJ_INT32)(comp->dx << levelno)); 410d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann try1 = opj_int_ceildiv(pi->ty1, (OPJ_INT32)(comp->dy << levelno)); 411d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann rpx = res->pdx + levelno; 412d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann rpy = res->pdy + levelno; 413d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 414d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* To avoid divisions by zero / undefined behaviour on shift */ 415d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* in below tests */ 416d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* Fixes reading id:000026,sig:08,src:002419,op:int32,pos:60,val:+32 */ 417d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* of https://github.com/uclouvain/openjpeg/issues/938 */ 418d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (rpx >= 31 || ((comp->dx << rpx) >> rpx) != comp->dx || 419d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann rpy >= 31 || ((comp->dy << rpy) >> rpy) != comp->dy) { 420d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann continue; 421d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 422d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 423d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* See ISO-15441. B.12.1.3 Resolution level-position-component-layer progression */ 424d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!((pi->y % (OPJ_INT32)(comp->dy << rpy) == 0) || ((pi->y == pi->ty0) && 425d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ((try0 << levelno) % (1 << rpy))))) { 426d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann continue; 427d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 428d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!((pi->x % (OPJ_INT32)(comp->dx << rpx) == 0) || ((pi->x == pi->tx0) && 429d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ((trx0 << levelno) % (1 << rpx))))) { 430d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann continue; 431d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 432d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 433d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if ((res->pw == 0) || (res->ph == 0)) { 434d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann continue; 435d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 436d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 437d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if ((trx0 == trx1) || (try0 == try1)) { 438d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann continue; 439d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 440d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 441d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann prci = opj_int_floordivpow2(opj_int_ceildiv(pi->x, 442d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (OPJ_INT32)(comp->dx << levelno)), (OPJ_INT32)res->pdx) 443d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann - opj_int_floordivpow2(trx0, (OPJ_INT32)res->pdx); 444d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann prcj = opj_int_floordivpow2(opj_int_ceildiv(pi->y, 445d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (OPJ_INT32)(comp->dy << levelno)), (OPJ_INT32)res->pdy) 446d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann - opj_int_floordivpow2(try0, (OPJ_INT32)res->pdy); 447d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->precno = (OPJ_UINT32)(prci + prcj * (OPJ_INT32)res->pw); 448d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pi->precno >= res->pw * res->ph) { 449d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_FALSE; 450d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 451d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) { 452d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * 453d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->step_c + pi->precno * pi->step_p; 454d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (index >= pi->include_size) { 455d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_emit_error(pi, "Invalid access to pi->include"); 456d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_FALSE; 457d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 458d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pi->include[index]) { 459d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->include[index] = 1; 460d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_TRUE; 461d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 462d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannLABEL_SKIP: 463d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ; 464d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 465d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 466d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 467d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 468d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 469d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 470d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_FALSE; 471ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 472ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 473d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstatic OPJ_BOOL opj_pi_next_pcrl(opj_pi_iterator_t * pi) 474d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann{ 475d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_comp_t *comp = NULL; 476d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_resolution_t *res = NULL; 477d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 index = 0; 478d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 479d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pi->first) { 480d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann comp = &pi->comps[pi->compno]; 481d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann goto LABEL_SKIP; 482d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 483d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 compno, resno; 484d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->first = 0; 485d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->dx = 0; 486d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->dy = 0; 487d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (compno = 0; compno < pi->numcomps; compno++) { 488d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann comp = &pi->comps[compno]; 489d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (resno = 0; resno < comp->numresolutions; resno++) { 490d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 dx, dy; 491d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann res = &comp->resolutions[resno]; 492d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (res->pdx + comp->numresolutions - 1 - resno < 32 && 493d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann comp->dx <= UINT_MAX / (1u << (res->pdx + comp->numresolutions - 1 - resno))) { 494d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann dx = comp->dx * (1u << (res->pdx + comp->numresolutions - 1 - resno)); 495d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->dx = !pi->dx ? dx : opj_uint_min(pi->dx, dx); 496d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 497d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (res->pdy + comp->numresolutions - 1 - resno < 32 && 498d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann comp->dy <= UINT_MAX / (1u << (res->pdy + comp->numresolutions - 1 - resno))) { 499d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann dy = comp->dy * (1u << (res->pdy + comp->numresolutions - 1 - resno)); 500d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->dy = !pi->dy ? dy : opj_uint_min(pi->dy, dy); 501d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 502d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 503d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 504d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pi->dx == 0 || pi->dy == 0) { 505d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_FALSE; 506d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 507d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 508d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pi->tp_on) { 509d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->poc.ty0 = pi->ty0; 510d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->poc.tx0 = pi->tx0; 511d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->poc.ty1 = pi->ty1; 512d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->poc.tx1 = pi->tx1; 513d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 514d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (pi->y = pi->poc.ty0; pi->y < pi->poc.ty1; 515d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->y += (OPJ_INT32)(pi->dy - (OPJ_UINT32)(pi->y % (OPJ_INT32)pi->dy))) { 516d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (pi->x = pi->poc.tx0; pi->x < pi->poc.tx1; 517d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->x += (OPJ_INT32)(pi->dx - (OPJ_UINT32)(pi->x % (OPJ_INT32)pi->dx))) { 518d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) { 519d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann comp = &pi->comps[pi->compno]; 520d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (pi->resno = pi->poc.resno0; 521d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->resno < opj_uint_min(pi->poc.resno1, comp->numresolutions); pi->resno++) { 522d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 levelno; 523d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 trx0, try0; 524d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 trx1, try1; 525d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 rpx, rpy; 526d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 prci, prcj; 527d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann res = &comp->resolutions[pi->resno]; 528d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann levelno = comp->numresolutions - 1 - pi->resno; 529d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* Avoids division by zero */ 530d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* Relates to id_000004,sig_06,src_000679,op_arith8,pos_49,val_-17 */ 531d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* of https://github.com/uclouvain/openjpeg/issues/938 */ 532d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (levelno >= 32 || 533d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ((comp->dx << levelno) >> levelno) != comp->dx || 534d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ((comp->dy << levelno) >> levelno) != comp->dy) { 535d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann continue; 536d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 537d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if ((comp->dx << levelno) > INT_MAX || 538d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (comp->dy << levelno) > INT_MAX) { 539d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann continue; 540d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 541d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann trx0 = opj_int_ceildiv(pi->tx0, (OPJ_INT32)(comp->dx << levelno)); 542d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann try0 = opj_int_ceildiv(pi->ty0, (OPJ_INT32)(comp->dy << levelno)); 543d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann trx1 = opj_int_ceildiv(pi->tx1, (OPJ_INT32)(comp->dx << levelno)); 544d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann try1 = opj_int_ceildiv(pi->ty1, (OPJ_INT32)(comp->dy << levelno)); 545d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann rpx = res->pdx + levelno; 546d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann rpy = res->pdy + levelno; 547d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 548d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* To avoid divisions by zero / undefined behaviour on shift */ 549d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* in below tests */ 550d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* Relates to id:000019,sig:08,src:001098,op:flip1,pos:49 */ 551d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* of https://github.com/uclouvain/openjpeg/issues/938 */ 552d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (rpx >= 31 || ((comp->dx << rpx) >> rpx) != comp->dx || 553d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann rpy >= 31 || ((comp->dy << rpy) >> rpy) != comp->dy) { 554d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann continue; 555d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 556d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 557d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* See ISO-15441. B.12.1.4 Position-component-resolution level-layer progression */ 558d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!((pi->y % (OPJ_INT32)(comp->dy << rpy) == 0) || ((pi->y == pi->ty0) && 559d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ((try0 << levelno) % (1 << rpy))))) { 560d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann continue; 561d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 562d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!((pi->x % (OPJ_INT32)(comp->dx << rpx) == 0) || ((pi->x == pi->tx0) && 563d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ((trx0 << levelno) % (1 << rpx))))) { 564d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann continue; 565d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 566d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 567d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if ((res->pw == 0) || (res->ph == 0)) { 568d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann continue; 569d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 570d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 571d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if ((trx0 == trx1) || (try0 == try1)) { 572d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann continue; 573d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 574d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 575d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann prci = opj_int_floordivpow2(opj_int_ceildiv(pi->x, 576d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (OPJ_INT32)(comp->dx << levelno)), (OPJ_INT32)res->pdx) 577d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann - opj_int_floordivpow2(trx0, (OPJ_INT32)res->pdx); 578d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann prcj = opj_int_floordivpow2(opj_int_ceildiv(pi->y, 579d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (OPJ_INT32)(comp->dy << levelno)), (OPJ_INT32)res->pdy) 580d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann - opj_int_floordivpow2(try0, (OPJ_INT32)res->pdy); 581d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->precno = (OPJ_UINT32)(prci + prcj * (OPJ_INT32)res->pw); 582d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pi->precno >= res->pw * res->ph) { 583d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_FALSE; 584d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 585d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) { 586d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * 587d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->step_c + pi->precno * pi->step_p; 588d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (index >= pi->include_size) { 589d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_emit_error(pi, "Invalid access to pi->include"); 590d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_FALSE; 591d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 592d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pi->include[index]) { 593d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->include[index] = 1; 594d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_TRUE; 595d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 596d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannLABEL_SKIP: 597d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ; 598d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 599d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 600d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 601d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 602d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 603d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 604d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_FALSE; 605ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 606ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 607d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstatic OPJ_BOOL opj_pi_next_cprl(opj_pi_iterator_t * pi) 608ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 609d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_comp_t *comp = NULL; 610d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_resolution_t *res = NULL; 611d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 index = 0; 612d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 613d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pi->first) { 614d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann comp = &pi->comps[pi->compno]; 615d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann goto LABEL_SKIP; 616d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 617d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->first = 0; 618d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 619d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 620d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (pi->compno = pi->poc.compno0; pi->compno < pi->poc.compno1; pi->compno++) { 621d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 resno; 622d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann comp = &pi->comps[pi->compno]; 623d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->dx = 0; 624d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->dy = 0; 625d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (resno = 0; resno < comp->numresolutions; resno++) { 626d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 dx, dy; 627d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann res = &comp->resolutions[resno]; 628d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (res->pdx + comp->numresolutions - 1 - resno < 32 && 629d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann comp->dx <= UINT_MAX / (1u << (res->pdx + comp->numresolutions - 1 - resno))) { 630d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann dx = comp->dx * (1u << (res->pdx + comp->numresolutions - 1 - resno)); 631d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->dx = !pi->dx ? dx : opj_uint_min(pi->dx, dx); 632d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 633d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (res->pdy + comp->numresolutions - 1 - resno < 32 && 634d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann comp->dy <= UINT_MAX / (1u << (res->pdy + comp->numresolutions - 1 - resno))) { 635d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann dy = comp->dy * (1u << (res->pdy + comp->numresolutions - 1 - resno)); 636d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->dy = !pi->dy ? dy : opj_uint_min(pi->dy, dy); 637d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 638d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 639d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pi->dx == 0 || pi->dy == 0) { 640d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_FALSE; 641d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 642d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pi->tp_on) { 643d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->poc.ty0 = pi->ty0; 644d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->poc.tx0 = pi->tx0; 645d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->poc.ty1 = pi->ty1; 646d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->poc.tx1 = pi->tx1; 647d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 648d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (pi->y = pi->poc.ty0; pi->y < pi->poc.ty1; 649d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->y += (OPJ_INT32)(pi->dy - (OPJ_UINT32)(pi->y % (OPJ_INT32)pi->dy))) { 650d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (pi->x = pi->poc.tx0; pi->x < pi->poc.tx1; 651d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->x += (OPJ_INT32)(pi->dx - (OPJ_UINT32)(pi->x % (OPJ_INT32)pi->dx))) { 652d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (pi->resno = pi->poc.resno0; 653d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->resno < opj_uint_min(pi->poc.resno1, comp->numresolutions); pi->resno++) { 654d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 levelno; 655d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 trx0, try0; 656d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 trx1, try1; 657d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 rpx, rpy; 658d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 prci, prcj; 659d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann res = &comp->resolutions[pi->resno]; 660d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann levelno = comp->numresolutions - 1 - pi->resno; 661d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* Avoids division by zero on id_000004,sig_06,src_000679,op_arith8,pos_49,val_-17 */ 662d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* of https://github.com/uclouvain/openjpeg/issues/938 */ 663d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (levelno >= 32 || 664d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ((comp->dx << levelno) >> levelno) != comp->dx || 665d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ((comp->dy << levelno) >> levelno) != comp->dy) { 666d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann continue; 667d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 668d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if ((comp->dx << levelno) > INT_MAX || 669d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (comp->dy << levelno) > INT_MAX) { 670d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann continue; 671d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 672d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann trx0 = opj_int_ceildiv(pi->tx0, (OPJ_INT32)(comp->dx << levelno)); 673d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann try0 = opj_int_ceildiv(pi->ty0, (OPJ_INT32)(comp->dy << levelno)); 674d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann trx1 = opj_int_ceildiv(pi->tx1, (OPJ_INT32)(comp->dx << levelno)); 675d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann try1 = opj_int_ceildiv(pi->ty1, (OPJ_INT32)(comp->dy << levelno)); 676d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann rpx = res->pdx + levelno; 677d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann rpy = res->pdy + levelno; 678d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 679d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* To avoid divisions by zero / undefined behaviour on shift */ 680d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* in below tests */ 681d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* Fixes reading id:000019,sig:08,src:001098,op:flip1,pos:49 */ 682d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* of https://github.com/uclouvain/openjpeg/issues/938 */ 683d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (rpx >= 31 || ((comp->dx << rpx) >> rpx) != comp->dx || 684d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann rpy >= 31 || ((comp->dy << rpy) >> rpy) != comp->dy) { 685d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann continue; 686d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 687d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 688d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* See ISO-15441. B.12.1.5 Component-position-resolution level-layer progression */ 689d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!((pi->y % (OPJ_INT32)(comp->dy << rpy) == 0) || ((pi->y == pi->ty0) && 690d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ((try0 << levelno) % (1 << rpy))))) { 691d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann continue; 692d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 693d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!((pi->x % (OPJ_INT32)(comp->dx << rpx) == 0) || ((pi->x == pi->tx0) && 694d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ((trx0 << levelno) % (1 << rpx))))) { 695d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann continue; 696d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 697d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 698d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if ((res->pw == 0) || (res->ph == 0)) { 699d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann continue; 700d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 701d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 702d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if ((trx0 == trx1) || (try0 == try1)) { 703d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann continue; 704d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 705d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 706d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann prci = opj_int_floordivpow2(opj_int_ceildiv(pi->x, 707d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (OPJ_INT32)(comp->dx << levelno)), (OPJ_INT32)res->pdx) 708d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann - opj_int_floordivpow2(trx0, (OPJ_INT32)res->pdx); 709d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann prcj = opj_int_floordivpow2(opj_int_ceildiv(pi->y, 710d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (OPJ_INT32)(comp->dy << levelno)), (OPJ_INT32)res->pdy) 711d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann - opj_int_floordivpow2(try0, (OPJ_INT32)res->pdy); 712d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->precno = (OPJ_UINT32)(prci + prcj * (OPJ_INT32)res->pw); 713d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pi->precno >= res->pw * res->ph) { 714d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_FALSE; 715d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 716d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (pi->layno = pi->poc.layno0; pi->layno < pi->poc.layno1; pi->layno++) { 717d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann index = pi->layno * pi->step_l + pi->resno * pi->step_r + pi->compno * 718d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->step_c + pi->precno * pi->step_p; 719d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (index >= pi->include_size) { 720d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_emit_error(pi, "Invalid access to pi->include"); 721d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_FALSE; 722d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 723d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!pi->include[index]) { 724d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi->include[index] = 1; 725d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_TRUE; 726d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 727d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannLABEL_SKIP: 728d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ; 729d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 730d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 731d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 732d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 733d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 734d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 735d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_FALSE; 736ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 737ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 738d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstatic void opj_get_encoding_parameters(const opj_image_t *p_image, 739ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const opj_cp_t *p_cp, 740d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_tileno, 741ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_INT32 * p_tx0, 742d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 * p_tx1, 743d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 * p_ty0, 744d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 * p_ty1, 745ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 * p_dx_min, 746ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 * p_dy_min, 747ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 * p_max_prec, 748d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 * p_max_res) 749ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 750d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* loop */ 751d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 compno, resno; 752d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* pointers */ 753d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const opj_tcp_t *l_tcp = 00; 754d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const opj_tccp_t * l_tccp = 00; 755d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const opj_image_comp_t * l_img_comp = 00; 756d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 757d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* position in x and y of tile */ 758d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p, q; 759d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 760d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* preconditions */ 761d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann assert(p_cp != 00); 762d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann assert(p_image != 00); 763d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann assert(p_tileno < p_cp->tw * p_cp->th); 764d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 765d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* initializations */ 766d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_tcp = &p_cp->tcps [p_tileno]; 767d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_img_comp = p_image->comps; 768d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_tccp = l_tcp->tccps; 769d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 770d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* here calculation of tx0, tx1, ty0, ty1, maxprec, dx and dy */ 771d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann p = p_tileno % p_cp->tw; 772d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann q = p_tileno / p_cp->tw; 773d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 774d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* find extent of tile */ 775d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *p_tx0 = opj_int_max((OPJ_INT32)(p_cp->tx0 + p * p_cp->tdx), 776d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (OPJ_INT32)p_image->x0); 777d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *p_tx1 = opj_int_min((OPJ_INT32)(p_cp->tx0 + (p + 1) * p_cp->tdx), 778d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (OPJ_INT32)p_image->x1); 779d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *p_ty0 = opj_int_max((OPJ_INT32)(p_cp->ty0 + q * p_cp->tdy), 780d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (OPJ_INT32)p_image->y0); 781d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *p_ty1 = opj_int_min((OPJ_INT32)(p_cp->ty0 + (q + 1) * p_cp->tdy), 782d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (OPJ_INT32)p_image->y1); 783d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 784d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* max precision is 0 (can only grow) */ 785d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *p_max_prec = 0; 786d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *p_max_res = 0; 787d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 788d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* take the largest value for dx_min and dy_min */ 789d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *p_dx_min = 0x7fffffff; 790d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *p_dy_min = 0x7fffffff; 791d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 792d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (compno = 0; compno < p_image->numcomps; ++compno) { 793d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* arithmetic variables to calculate */ 794d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 l_level_no; 795d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 l_rx0, l_ry0, l_rx1, l_ry1; 796d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 l_px0, l_py0, l_px1, py1; 797d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 l_pdx, l_pdy; 798d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 l_pw, l_ph; 799d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 l_product; 800d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 l_tcx0, l_tcy0, l_tcx1, l_tcy1; 801d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 802d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_tcx0 = opj_int_ceildiv(*p_tx0, (OPJ_INT32)l_img_comp->dx); 803d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_tcy0 = opj_int_ceildiv(*p_ty0, (OPJ_INT32)l_img_comp->dy); 804d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_tcx1 = opj_int_ceildiv(*p_tx1, (OPJ_INT32)l_img_comp->dx); 805d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_tcy1 = opj_int_ceildiv(*p_ty1, (OPJ_INT32)l_img_comp->dy); 806d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 807d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (l_tccp->numresolutions > *p_max_res) { 808d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *p_max_res = l_tccp->numresolutions; 809d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 810d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 811d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* use custom size for precincts */ 812d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (resno = 0; resno < l_tccp->numresolutions; ++resno) { 813d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 l_dx, l_dy; 814d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 815d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* precinct width and height */ 816d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_pdx = l_tccp->prcw[resno]; 817d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_pdy = l_tccp->prch[resno]; 818d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 819d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_dx = l_img_comp->dx * (1u << (l_pdx + l_tccp->numresolutions - 1 - resno)); 820d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_dy = l_img_comp->dy * (1u << (l_pdy + l_tccp->numresolutions - 1 - resno)); 821d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 822d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* take the minimum size for dx for each comp and resolution */ 823d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *p_dx_min = opj_uint_min(*p_dx_min, l_dx); 824d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *p_dy_min = opj_uint_min(*p_dy_min, l_dy); 825d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 826d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* various calculations of extents */ 827d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_level_no = l_tccp->numresolutions - 1 - resno; 828d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 829d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_rx0 = opj_int_ceildivpow2(l_tcx0, (OPJ_INT32)l_level_no); 830d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_ry0 = opj_int_ceildivpow2(l_tcy0, (OPJ_INT32)l_level_no); 831d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_rx1 = opj_int_ceildivpow2(l_tcx1, (OPJ_INT32)l_level_no); 832d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_ry1 = opj_int_ceildivpow2(l_tcy1, (OPJ_INT32)l_level_no); 833d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 834d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_px0 = opj_int_floordivpow2(l_rx0, (OPJ_INT32)l_pdx) << l_pdx; 835d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_py0 = opj_int_floordivpow2(l_ry0, (OPJ_INT32)l_pdy) << l_pdy; 836d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_px1 = opj_int_ceildivpow2(l_rx1, (OPJ_INT32)l_pdx) << l_pdx; 837d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 838d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann py1 = opj_int_ceildivpow2(l_ry1, (OPJ_INT32)l_pdy) << l_pdy; 839d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 840d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_pw = (l_rx0 == l_rx1) ? 0 : (OPJ_UINT32)((l_px1 - l_px0) >> l_pdx); 841d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_ph = (l_ry0 == l_ry1) ? 0 : (OPJ_UINT32)((py1 - l_py0) >> l_pdy); 842d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 843d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_product = l_pw * l_ph; 844d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 845d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* update precision */ 846d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (l_product > *p_max_prec) { 847d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *p_max_prec = l_product; 848d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 849d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 850d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++l_img_comp; 851d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++l_tccp; 852d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 853d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann} 854d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 855d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 856d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstatic void opj_get_all_encoding_parameters(const opj_image_t *p_image, 857d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const opj_cp_t *p_cp, 858d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 tileno, 859d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 * p_tx0, 860d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 * p_tx1, 861d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 * p_ty0, 862d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 * p_ty1, 863d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 * p_dx_min, 864d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 * p_dy_min, 865d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 * p_max_prec, 866d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 * p_max_res, 867d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 ** p_resolutions) 868d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann{ 869d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* loop*/ 870d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 compno, resno; 871d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 872d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* pointers*/ 873d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const opj_tcp_t *tcp = 00; 874d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const opj_tccp_t * l_tccp = 00; 875d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const opj_image_comp_t * l_img_comp = 00; 876d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 877d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* to store l_dx, l_dy, w and h for each resolution and component.*/ 878d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 * lResolutionPtr; 879d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 880d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* position in x and y of tile*/ 881d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p, q; 882d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 883d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* non-corrected (in regard to image offset) tile offset */ 884d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 l_tx0, l_ty0; 885d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 886d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* preconditions in debug*/ 887d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann assert(p_cp != 00); 888d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann assert(p_image != 00); 889d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann assert(tileno < p_cp->tw * p_cp->th); 890d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 891d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* initializations*/ 892d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp = &p_cp->tcps [tileno]; 893d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_tccp = tcp->tccps; 894d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_img_comp = p_image->comps; 895d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 896d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* position in x and y of tile*/ 897d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann p = tileno % p_cp->tw; 898d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann q = tileno / p_cp->tw; 899d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 900d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* here calculation of tx0, tx1, ty0, ty1, maxprec, l_dx and l_dy */ 901d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_tx0 = p_cp->tx0 + p * 902d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann p_cp->tdx; /* can't be greater than p_image->x1 so won't overflow */ 903d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *p_tx0 = (OPJ_INT32)opj_uint_max(l_tx0, p_image->x0); 904d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *p_tx1 = (OPJ_INT32)opj_uint_min(opj_uint_adds(l_tx0, p_cp->tdx), p_image->x1); 905d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_ty0 = p_cp->ty0 + q * 906d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann p_cp->tdy; /* can't be greater than p_image->y1 so won't overflow */ 907d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *p_ty0 = (OPJ_INT32)opj_uint_max(l_ty0, p_image->y0); 908d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *p_ty1 = (OPJ_INT32)opj_uint_min(opj_uint_adds(l_ty0, p_cp->tdy), p_image->y1); 909d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 910d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* max precision and resolution is 0 (can only grow)*/ 911d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *p_max_prec = 0; 912d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *p_max_res = 0; 913d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 914d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* take the largest value for dx_min and dy_min*/ 915d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *p_dx_min = 0x7fffffff; 916d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *p_dy_min = 0x7fffffff; 917d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 918d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (compno = 0; compno < p_image->numcomps; ++compno) { 919d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* aritmetic variables to calculate*/ 920d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 l_level_no; 921d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 l_rx0, l_ry0, l_rx1, l_ry1; 922d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 l_px0, l_py0, l_px1, py1; 923d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 l_product; 924d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 l_tcx0, l_tcy0, l_tcx1, l_tcy1; 925d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 l_pdx, l_pdy, l_pw, l_ph; 926d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 927d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann lResolutionPtr = p_resolutions[compno]; 928d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 929d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_tcx0 = opj_int_ceildiv(*p_tx0, (OPJ_INT32)l_img_comp->dx); 930d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_tcy0 = opj_int_ceildiv(*p_ty0, (OPJ_INT32)l_img_comp->dy); 931d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_tcx1 = opj_int_ceildiv(*p_tx1, (OPJ_INT32)l_img_comp->dx); 932d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_tcy1 = opj_int_ceildiv(*p_ty1, (OPJ_INT32)l_img_comp->dy); 933d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 934d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (l_tccp->numresolutions > *p_max_res) { 935d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *p_max_res = l_tccp->numresolutions; 936d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 937d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 938d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* use custom size for precincts*/ 939d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_level_no = l_tccp->numresolutions; 940d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (resno = 0; resno < l_tccp->numresolutions; ++resno) { 941d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 l_dx, l_dy; 942d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 943d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann --l_level_no; 944d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 945d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* precinct width and height*/ 946d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_pdx = l_tccp->prcw[resno]; 947d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_pdy = l_tccp->prch[resno]; 948d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *lResolutionPtr++ = l_pdx; 949d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *lResolutionPtr++ = l_pdy; 950d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (l_pdx + l_level_no < 32 && 951d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_img_comp->dx <= UINT_MAX / (1u << (l_pdx + l_level_no))) { 952d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_dx = l_img_comp->dx * (1u << (l_pdx + l_level_no)); 953d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* take the minimum size for l_dx for each comp and resolution*/ 954d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *p_dx_min = (OPJ_UINT32)opj_int_min((OPJ_INT32) * p_dx_min, (OPJ_INT32)l_dx); 955d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 956d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (l_pdy + l_level_no < 32 && 957d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_img_comp->dy <= UINT_MAX / (1u << (l_pdy + l_level_no))) { 958d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_dy = l_img_comp->dy * (1u << (l_pdy + l_level_no)); 959d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *p_dy_min = (OPJ_UINT32)opj_int_min((OPJ_INT32) * p_dy_min, (OPJ_INT32)l_dy); 960d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 961d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 962d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* various calculations of extents*/ 963d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_rx0 = opj_int_ceildivpow2(l_tcx0, (OPJ_INT32)l_level_no); 964d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_ry0 = opj_int_ceildivpow2(l_tcy0, (OPJ_INT32)l_level_no); 965d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_rx1 = opj_int_ceildivpow2(l_tcx1, (OPJ_INT32)l_level_no); 966d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_ry1 = opj_int_ceildivpow2(l_tcy1, (OPJ_INT32)l_level_no); 967d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_px0 = opj_int_floordivpow2(l_rx0, (OPJ_INT32)l_pdx) << l_pdx; 968d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_py0 = opj_int_floordivpow2(l_ry0, (OPJ_INT32)l_pdy) << l_pdy; 969d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_px1 = opj_int_ceildivpow2(l_rx1, (OPJ_INT32)l_pdx) << l_pdx; 970d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann py1 = opj_int_ceildivpow2(l_ry1, (OPJ_INT32)l_pdy) << l_pdy; 971d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_pw = (l_rx0 == l_rx1) ? 0 : (OPJ_UINT32)((l_px1 - l_px0) >> l_pdx); 972d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_ph = (l_ry0 == l_ry1) ? 0 : (OPJ_UINT32)((py1 - l_py0) >> l_pdy); 973d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *lResolutionPtr++ = l_pw; 974d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *lResolutionPtr++ = l_ph; 975d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_product = l_pw * l_ph; 976d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 977ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* update precision*/ 978d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (l_product > *p_max_prec) { 979d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann *p_max_prec = l_product; 980d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 981d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 982d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 983d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++l_tccp; 984d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++l_img_comp; 985d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 986ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 987ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 988d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstatic opj_pi_iterator_t * opj_pi_create(const opj_image_t *image, 989d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const opj_cp_t *cp, 990d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 tileno) 991ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 992d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* loop*/ 993d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 pino, compno; 994d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* number of poc in the p_pi*/ 995d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 l_poc_bound; 996d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 997d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* pointers to tile coding parameters and components.*/ 998d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_iterator_t *l_pi = 00; 999d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_tcp_t *tcp = 00; 1000d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const opj_tccp_t *tccp = 00; 1001d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1002d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* current packet iterator being allocated*/ 1003d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_iterator_t *l_current_pi = 00; 1004d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1005d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* preconditions in debug*/ 1006d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann assert(cp != 00); 1007d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann assert(image != 00); 1008d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann assert(tileno < cp->tw * cp->th); 1009d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1010d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* initializations*/ 1011d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp = &cp->tcps[tileno]; 1012d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_poc_bound = tcp->numpocs + 1; 1013d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1014d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* memory allocations*/ 1015d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_pi = (opj_pi_iterator_t*) opj_calloc((l_poc_bound), 1016d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann sizeof(opj_pi_iterator_t)); 1017d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!l_pi) { 1018d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return NULL; 1019d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1020d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1021d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi = l_pi; 1022d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (pino = 0; pino < l_poc_bound ; ++pino) { 1023d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1024d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->comps = (opj_pi_comp_t*) opj_calloc(image->numcomps, 1025d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann sizeof(opj_pi_comp_t)); 1026d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (! l_current_pi->comps) { 1027d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_destroy(l_pi, l_poc_bound); 1028d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return NULL; 1029d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1030d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1031d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->numcomps = image->numcomps; 1032d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1033d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (compno = 0; compno < image->numcomps; ++compno) { 1034d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_comp_t *comp = &l_current_pi->comps[compno]; 1035d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1036d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tccp = &tcp->tccps[compno]; 1037d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1038d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann comp->resolutions = (opj_pi_resolution_t*) opj_calloc(tccp->numresolutions, 1039d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann sizeof(opj_pi_resolution_t)); 1040d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!comp->resolutions) { 1041d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_destroy(l_pi, l_poc_bound); 1042d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return 00; 1043d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1044d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1045d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann comp->numresolutions = tccp->numresolutions; 1046d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1047d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++l_current_pi; 1048d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1049d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return l_pi; 1050ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 1051ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1052d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstatic void opj_pi_update_encode_poc_and_final(opj_cp_t *p_cp, 1053d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_tileno, 1054d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 p_tx0, 1055d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 p_tx1, 1056d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 p_ty0, 1057d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 p_ty1, 1058d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_max_prec, 1059d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_max_res, 1060d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_dx_min, 1061d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_dy_min) 1062ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 1063d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* loop*/ 1064d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 pino; 1065d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* tile coding parameter*/ 1066d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_tcp_t *l_tcp = 00; 1067d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* current poc being updated*/ 1068d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_poc_t * l_current_poc = 00; 1069ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1070d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* number of pocs*/ 1071d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 l_poc_bound; 1072ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1073ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_ARG_NOT_USED(p_max_res); 1074ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1075d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* preconditions in debug*/ 1076d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann assert(p_cp != 00); 1077d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann assert(p_tileno < p_cp->tw * p_cp->th); 1078d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1079d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* initializations*/ 1080d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_tcp = &p_cp->tcps [p_tileno]; 1081d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* number of iterations in the loop */ 1082d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_poc_bound = l_tcp->numpocs + 1; 1083d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1084d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* start at first element, and to make sure the compiler will not make a calculation each time in the loop 1085d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann store a pointer to the current element to modify rather than l_tcp->pocs[i]*/ 1086d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc = l_tcp->pocs; 1087d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1088d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->compS = l_current_poc->compno0; 1089d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->compE = l_current_poc->compno1; 1090d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->resS = l_current_poc->resno0; 1091d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->resE = l_current_poc->resno1; 1092d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->layE = l_current_poc->layno1; 1093d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1094d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* special treatment for the first element*/ 1095d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->layS = 0; 1096d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->prg = l_current_poc->prg1; 1097d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->prcS = 0; 1098d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1099d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->prcE = p_max_prec; 1100d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->txS = (OPJ_UINT32)p_tx0; 1101d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->txE = (OPJ_UINT32)p_tx1; 1102d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->tyS = (OPJ_UINT32)p_ty0; 1103d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->tyE = (OPJ_UINT32)p_ty1; 1104d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->dx = p_dx_min; 1105d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->dy = p_dy_min; 1106d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1107d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++ l_current_poc; 1108d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (pino = 1; pino < l_poc_bound ; ++pino) { 1109d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->compS = l_current_poc->compno0; 1110d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->compE = l_current_poc->compno1; 1111d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->resS = l_current_poc->resno0; 1112d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->resE = l_current_poc->resno1; 1113d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->layE = l_current_poc->layno1; 1114d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->prg = l_current_poc->prg1; 1115d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->prcS = 0; 1116d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* special treatment here different from the first element*/ 1117d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->layS = (l_current_poc->layE > (l_current_poc - 1)->layE) ? 1118d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->layE : 0; 1119d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1120d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->prcE = p_max_prec; 1121d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->txS = (OPJ_UINT32)p_tx0; 1122d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->txE = (OPJ_UINT32)p_tx1; 1123d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->tyS = (OPJ_UINT32)p_ty0; 1124d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->tyE = (OPJ_UINT32)p_ty1; 1125d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->dx = p_dx_min; 1126d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->dy = p_dy_min; 1127d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++ l_current_poc; 1128d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 1130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1131d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstatic void opj_pi_update_encode_not_poc(opj_cp_t *p_cp, 1132d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_num_comps, 1133d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_tileno, 1134d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 p_tx0, 1135d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 p_tx1, 1136d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 p_ty0, 1137d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 p_ty1, 1138d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_max_prec, 1139d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_max_res, 1140d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_dx_min, 1141d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_dy_min) 1142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 1143d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* loop*/ 1144d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 pino; 1145d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* tile coding parameter*/ 1146d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_tcp_t *l_tcp = 00; 1147d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* current poc being updated*/ 1148d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_poc_t * l_current_poc = 00; 1149d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* number of pocs*/ 1150d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 l_poc_bound; 1151d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1152d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* preconditions in debug*/ 1153d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann assert(p_cp != 00); 1154d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann assert(p_tileno < p_cp->tw * p_cp->th); 1155d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1156d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* initializations*/ 1157d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_tcp = &p_cp->tcps [p_tileno]; 1158d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1159d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* number of iterations in the loop */ 1160d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_poc_bound = l_tcp->numpocs + 1; 1161d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1162d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* start at first element, and to make sure the compiler will not make a calculation each time in the loop 1163d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann store a pointer to the current element to modify rather than l_tcp->pocs[i]*/ 1164d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc = l_tcp->pocs; 1165d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1166d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (pino = 0; pino < l_poc_bound ; ++pino) { 1167d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->compS = 0; 1168d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->compE = p_num_comps;/*p_image->numcomps;*/ 1169d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->resS = 0; 1170d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->resE = p_max_res; 1171d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->layS = 0; 1172d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->layE = l_tcp->numlayers; 1173d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->prg = l_tcp->prg; 1174d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->prcS = 0; 1175d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->prcE = p_max_prec; 1176d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->txS = (OPJ_UINT32)p_tx0; 1177d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->txE = (OPJ_UINT32)p_tx1; 1178d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->tyS = (OPJ_UINT32)p_ty0; 1179d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->tyE = (OPJ_UINT32)p_ty1; 1180d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->dx = p_dx_min; 1181d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->dy = p_dy_min; 1182d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++ l_current_poc; 1183d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 1185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1186d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstatic void opj_pi_update_decode_poc(opj_pi_iterator_t * p_pi, 1187d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_tcp_t * p_tcp, 1188d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_max_precision, 1189d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_max_res) 1190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 1191d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* loop*/ 1192d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 pino; 1193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1194d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* encoding prameters to set*/ 1195d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 l_bound; 1196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1197d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_iterator_t * l_current_pi = 00; 1198d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_poc_t* l_current_poc = 0; 1199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_ARG_NOT_USED(p_max_res); 1201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1202d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* preconditions in debug*/ 1203d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann assert(p_pi != 00); 1204d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann assert(p_tcp != 00); 1205d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1206d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* initializations*/ 1207d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_bound = p_tcp->numpocs + 1; 1208d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi = p_pi; 1209d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc = p_tcp->pocs; 1210d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1211d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (pino = 0; pino < l_bound; ++pino) { 1212d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->poc.prg = l_current_poc->prg; /* Progression Order #0 */ 1213d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->first = 1; 1214d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1215d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->poc.resno0 = 1216d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->resno0; /* Resolution Level Index #0 (Start) */ 1217d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->poc.compno0 = 1218d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->compno0; /* Component Index #0 (Start) */ 1219d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->poc.layno0 = 0; 1220d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->poc.precno0 = 0; 1221d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->poc.resno1 = 1222d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->resno1; /* Resolution Level Index #0 (End) */ 1223d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->poc.compno1 = 1224d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_poc->compno1; /* Component Index #0 (End) */ 1225d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->poc.layno1 = opj_uint_min(l_current_poc->layno1, 1226d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann p_tcp->numlayers); /* Layer Index #0 (End) */ 1227d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->poc.precno1 = p_max_precision; 1228d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++l_current_pi; 1229d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++l_current_poc; 1230d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 1232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1233d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstatic void opj_pi_update_decode_not_poc(opj_pi_iterator_t * p_pi, 1234d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_tcp_t * p_tcp, 1235d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_max_precision, 1236d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_max_res) 1237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 1238d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* loop*/ 1239d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 pino; 1240d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1241d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* encoding prameters to set*/ 1242d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 l_bound; 1243d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1244d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_iterator_t * l_current_pi = 00; 1245d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* preconditions in debug*/ 1246d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann assert(p_tcp != 00); 1247d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann assert(p_pi != 00); 1248d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1249d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* initializations*/ 1250d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_bound = p_tcp->numpocs + 1; 1251d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi = p_pi; 1252d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1253d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (pino = 0; pino < l_bound; ++pino) { 1254d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->poc.prg = p_tcp->prg; 1255d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->first = 1; 1256d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->poc.resno0 = 0; 1257d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->poc.compno0 = 0; 1258d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->poc.layno0 = 0; 1259d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->poc.precno0 = 0; 1260d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->poc.resno1 = p_max_res; 1261d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->poc.compno1 = l_current_pi->numcomps; 1262d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->poc.layno1 = p_tcp->numlayers; 1263d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->poc.precno1 = p_max_precision; 1264d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++l_current_pi; 1265d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 1267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1270d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannstatic OPJ_BOOL opj_pi_check_next_level(OPJ_INT32 pos, 1271d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_cp_t *cp, 1272d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 tileno, 1273d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 pino, 1274d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const OPJ_CHAR *prog) 1275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 1276d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 i; 1277d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_tcp_t *tcps = &cp->tcps[tileno]; 1278d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_poc_t *tcp = &tcps->pocs[pino]; 1279d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1280d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (pos >= 0) { 1281d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (i = pos; pos >= 0; i--) { 1282d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann switch (prog[i]) { 1283d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case 'R': 1284d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (tcp->res_t == tcp->resE) { 1285d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (opj_pi_check_next_level(pos - 1, cp, tileno, pino, prog)) { 1286d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_TRUE; 1287d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 1288d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_FALSE; 1289d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1290d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 1291d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_TRUE; 1292d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1293d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1294d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case 'C': 1295d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (tcp->comp_t == tcp->compE) { 1296d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (opj_pi_check_next_level(pos - 1, cp, tileno, pino, prog)) { 1297d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_TRUE; 1298d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 1299d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_FALSE; 1300d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1301d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 1302d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_TRUE; 1303d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1304d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1305d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case 'L': 1306d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (tcp->lay_t == tcp->layE) { 1307d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (opj_pi_check_next_level(pos - 1, cp, tileno, pino, prog)) { 1308d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_TRUE; 1309d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 1310d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_FALSE; 1311d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1312d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 1313d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_TRUE; 1314d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1315d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1316d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case 'P': 1317d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann switch (tcp->prg) { 1318d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case OPJ_LRCP: /* fall through */ 1319d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case OPJ_RLCP: 1320d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (tcp->prc_t == tcp->prcE) { 1321d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (opj_pi_check_next_level(i - 1, cp, tileno, pino, prog)) { 1322d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_TRUE; 1323d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 1324d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_FALSE; 1325d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1326d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 1327d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_TRUE; 1328d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1329d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1330d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann default: 1331d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (tcp->tx0_t == tcp->txE) { 1332d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /*TY*/ 1333d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (tcp->ty0_t == tcp->tyE) { 1334d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (opj_pi_check_next_level(i - 1, cp, tileno, pino, prog)) { 1335d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_TRUE; 1336d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 1337d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_FALSE; 1338d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1339d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 1340d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_TRUE; 1341d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann }/*TY*/ 1342d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 1343d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_TRUE; 1344d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1345d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1346d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann }/*end case P*/ 1347d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann }/*end switch*/ 1348d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann }/*end for*/ 1349d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann }/*end if*/ 1350d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_FALSE; 1351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 1352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* 1355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov========================================================== 1356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Packet iterator interface 1357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov========================================================== 1358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov*/ 1359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovopj_pi_iterator_t *opj_pi_create_decode(opj_image_t *p_image, 1360d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_cp_t *p_cp, 1361d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_tile_no) 1362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 1363d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 numcomps = p_image->numcomps; 1364d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1365d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* loop */ 1366d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 pino; 1367d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 compno, resno; 1368d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1369d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* to store w, h, dx and dy fro all components and resolutions */ 1370d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 * l_tmp_data; 1371d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 ** l_tmp_ptr; 1372d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1373d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* encoding prameters to set */ 1374d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 l_max_res; 1375d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 l_max_prec; 1376d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 l_tx0, l_tx1, l_ty0, l_ty1; 1377d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 l_dx_min, l_dy_min; 1378d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 l_bound; 1379d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 l_step_p, l_step_c, l_step_r, l_step_l ; 1380d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 l_data_stride; 1381d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1382d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* pointers */ 1383d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_iterator_t *l_pi = 00; 1384d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_tcp_t *l_tcp = 00; 1385d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const opj_tccp_t *l_tccp = 00; 1386d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_comp_t *l_current_comp = 00; 1387d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_image_comp_t * l_img_comp = 00; 1388d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_iterator_t * l_current_pi = 00; 1389d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 * l_encoding_value_ptr = 00; 1390d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1391d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* preconditions in debug */ 1392d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann assert(p_cp != 00); 1393d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann assert(p_image != 00); 1394d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann assert(p_tile_no < p_cp->tw * p_cp->th); 1395d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1396d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* initializations */ 1397d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_tcp = &p_cp->tcps[p_tile_no]; 1398d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_bound = l_tcp->numpocs + 1; 1399d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1400d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_data_stride = 4 * OPJ_J2K_MAXRLVLS; 1401d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_tmp_data = (OPJ_UINT32*)opj_malloc( 1402d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_data_stride * numcomps * sizeof(OPJ_UINT32)); 1403d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if 1404d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (! l_tmp_data) { 1405d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return 00; 1406d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1407d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_tmp_ptr = (OPJ_UINT32**)opj_malloc( 1408d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann numcomps * sizeof(OPJ_UINT32 *)); 1409d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if 1410d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (! l_tmp_ptr) { 1411d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_free(l_tmp_data); 1412d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return 00; 1413d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1414d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1415d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* memory allocation for pi */ 1416d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_pi = opj_pi_create(p_image, p_cp, p_tile_no); 1417d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!l_pi) { 1418d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_free(l_tmp_data); 1419d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_free(l_tmp_ptr); 1420d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return 00; 1421d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1422d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1423d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_encoding_value_ptr = l_tmp_data; 1424d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* update pointer array */ 1425d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for 1426d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (compno = 0; compno < numcomps; ++compno) { 1427d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_tmp_ptr[compno] = l_encoding_value_ptr; 1428d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_encoding_value_ptr += l_data_stride; 1429d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1430d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* get encoding parameters */ 1431d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_get_all_encoding_parameters(p_image, p_cp, p_tile_no, &l_tx0, &l_tx1, 1432d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann &l_ty0, &l_ty1, &l_dx_min, &l_dy_min, &l_max_prec, &l_max_res, l_tmp_ptr); 1433d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1434d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* step calculations */ 1435d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_step_p = 1; 1436d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_step_c = l_max_prec * l_step_p; 1437d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_step_r = numcomps * l_step_c; 1438d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_step_l = l_max_res * l_step_r; 1439d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1440d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* set values for first packet iterator */ 1441d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi = l_pi; 1442d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1443d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* memory allocation for include */ 1444d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* prevent an integer overflow issue */ 1445d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* 0 < l_tcp->numlayers < 65536 c.f. opj_j2k_read_cod in j2k.c */ 1446d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->include = 00; 1447d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (l_step_l <= (UINT_MAX / (l_tcp->numlayers + 1U))) { 1448d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->include_size = (l_tcp->numlayers + 1U) * l_step_l; 1449d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->include = (OPJ_INT16*) opj_calloc( 1450d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->include_size, sizeof(OPJ_INT16)); 1451d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1452d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1453d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!l_current_pi->include) { 1454d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_free(l_tmp_data); 1455d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_free(l_tmp_ptr); 1456d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_destroy(l_pi, l_bound); 1457d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return 00; 1458d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1459d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1460d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* special treatment for the first packet iterator */ 1461d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_comp = l_current_pi->comps; 1462d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_img_comp = p_image->comps; 1463d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_tccp = l_tcp->tccps; 1464d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1465d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->tx0 = l_tx0; 1466d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->ty0 = l_ty0; 1467d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->tx1 = l_tx1; 1468d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->ty1 = l_ty1; 1469d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1470d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /*l_current_pi->dx = l_img_comp->dx;*/ 1471d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /*l_current_pi->dy = l_img_comp->dy;*/ 1472d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1473d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->step_p = l_step_p; 1474d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->step_c = l_step_c; 1475d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->step_r = l_step_r; 1476d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->step_l = l_step_l; 1477d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1478d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* allocation for components and number of components has already been calculated by opj_pi_create */ 1479d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for 1480d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (compno = 0; compno < numcomps; ++compno) { 1481d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_resolution_t *l_res = l_current_comp->resolutions; 1482d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_encoding_value_ptr = l_tmp_ptr[compno]; 1483d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1484d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_comp->dx = l_img_comp->dx; 1485d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_comp->dy = l_img_comp->dy; 1486d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* resolutions have already been initialized */ 1487d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for 1488d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (resno = 0; resno < l_current_comp->numresolutions; resno++) { 1489d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_res->pdx = *(l_encoding_value_ptr++); 1490d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_res->pdy = *(l_encoding_value_ptr++); 1491d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_res->pw = *(l_encoding_value_ptr++); 1492d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_res->ph = *(l_encoding_value_ptr++); 1493d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++l_res; 1494d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1495d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++l_current_comp; 1496d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++l_img_comp; 1497d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++l_tccp; 1498d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1499d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++l_current_pi; 1500d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1501d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (pino = 1 ; pino < l_bound ; ++pino) { 1502d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_comp = l_current_pi->comps; 1503d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_img_comp = p_image->comps; 1504d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_tccp = l_tcp->tccps; 1505d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1506d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->tx0 = l_tx0; 1507d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->ty0 = l_ty0; 1508d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->tx1 = l_tx1; 1509d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->ty1 = l_ty1; 1510d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /*l_current_pi->dx = l_dx_min;*/ 1511d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /*l_current_pi->dy = l_dy_min;*/ 1512d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->step_p = l_step_p; 1513d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->step_c = l_step_c; 1514d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->step_r = l_step_r; 1515d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->step_l = l_step_l; 1516d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1517d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* allocation for components and number of components has already been calculated by opj_pi_create */ 1518d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for 1519d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (compno = 0; compno < numcomps; ++compno) { 1520d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_resolution_t *l_res = l_current_comp->resolutions; 1521d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_encoding_value_ptr = l_tmp_ptr[compno]; 1522d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1523d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_comp->dx = l_img_comp->dx; 1524d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_comp->dy = l_img_comp->dy; 1525d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* resolutions have already been initialized */ 1526d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for 1527d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (resno = 0; resno < l_current_comp->numresolutions; resno++) { 1528d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_res->pdx = *(l_encoding_value_ptr++); 1529d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_res->pdy = *(l_encoding_value_ptr++); 1530d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_res->pw = *(l_encoding_value_ptr++); 1531d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_res->ph = *(l_encoding_value_ptr++); 1532d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++l_res; 1533d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1534d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++l_current_comp; 1535d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++l_img_comp; 1536d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++l_tccp; 1537d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1538d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* special treatment*/ 1539d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->include = (l_current_pi - 1)->include; 1540d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->include_size = (l_current_pi - 1)->include_size; 1541d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++l_current_pi; 1542d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1543d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_free(l_tmp_data); 1544d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_tmp_data = 00; 1545d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_free(l_tmp_ptr); 1546d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_tmp_ptr = 00; 1547d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if 1548d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (l_tcp->POC) { 1549d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_update_decode_poc(l_pi, l_tcp, l_max_prec, l_max_res); 1550d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 1551d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_update_decode_not_poc(l_pi, l_tcp, l_max_prec, l_max_res); 1552d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1553d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return l_pi; 1554ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 1555ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1556ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1557ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1558ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovopj_pi_iterator_t *opj_pi_initialise_encode(const opj_image_t *p_image, 1559d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_cp_t *p_cp, 1560d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_tile_no, 1561d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann J2K_T2_MODE p_t2_mode) 1562ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 1563d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 numcomps = p_image->numcomps; 1564d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1565d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* loop*/ 1566d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 pino; 1567d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 compno, resno; 1568d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1569d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* to store w, h, dx and dy fro all components and resolutions*/ 1570d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 * l_tmp_data; 1571d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 ** l_tmp_ptr; 1572d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1573d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* encoding prameters to set*/ 1574d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 l_max_res; 1575d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 l_max_prec; 1576d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 l_tx0, l_tx1, l_ty0, l_ty1; 1577d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 l_dx_min, l_dy_min; 1578d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 l_bound; 1579d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 l_step_p, l_step_c, l_step_r, l_step_l ; 1580d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 l_data_stride; 1581d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1582d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* pointers*/ 1583d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_iterator_t *l_pi = 00; 1584d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_tcp_t *l_tcp = 00; 1585d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const opj_tccp_t *l_tccp = 00; 1586d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_comp_t *l_current_comp = 00; 1587d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_image_comp_t * l_img_comp = 00; 1588d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_iterator_t * l_current_pi = 00; 1589d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 * l_encoding_value_ptr = 00; 1590d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1591d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* preconditions in debug*/ 1592d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann assert(p_cp != 00); 1593d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann assert(p_image != 00); 1594d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann assert(p_tile_no < p_cp->tw * p_cp->th); 1595d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1596d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* initializations*/ 1597d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_tcp = &p_cp->tcps[p_tile_no]; 1598d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_bound = l_tcp->numpocs + 1; 1599d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1600d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_data_stride = 4 * OPJ_J2K_MAXRLVLS; 1601d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_tmp_data = (OPJ_UINT32*)opj_malloc( 1602d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_data_stride * numcomps * sizeof(OPJ_UINT32)); 1603d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (! l_tmp_data) { 1604d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return 00; 1605d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1606d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1607d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_tmp_ptr = (OPJ_UINT32**)opj_malloc( 1608d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann numcomps * sizeof(OPJ_UINT32 *)); 1609d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (! l_tmp_ptr) { 1610d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_free(l_tmp_data); 1611d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return 00; 1612d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1613d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1614d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* memory allocation for pi*/ 1615d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_pi = opj_pi_create(p_image, p_cp, p_tile_no); 1616d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!l_pi) { 1617d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_free(l_tmp_data); 1618d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_free(l_tmp_ptr); 1619d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return 00; 1620d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1621d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1622d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_encoding_value_ptr = l_tmp_data; 1623d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* update pointer array*/ 1624d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (compno = 0; compno < numcomps; ++compno) { 1625d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_tmp_ptr[compno] = l_encoding_value_ptr; 1626d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_encoding_value_ptr += l_data_stride; 1627d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1628d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1629d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* get encoding parameters*/ 1630d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_get_all_encoding_parameters(p_image, p_cp, p_tile_no, &l_tx0, &l_tx1, 1631d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann &l_ty0, &l_ty1, &l_dx_min, &l_dy_min, &l_max_prec, &l_max_res, l_tmp_ptr); 1632d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1633d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* step calculations*/ 1634d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_step_p = 1; 1635d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_step_c = l_max_prec * l_step_p; 1636d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_step_r = numcomps * l_step_c; 1637d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_step_l = l_max_res * l_step_r; 1638d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1639d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* set values for first packet iterator*/ 1640d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_pi->tp_on = (OPJ_BYTE)p_cp->m_specific_param.m_enc.m_tp_on; 1641d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi = l_pi; 1642d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1643d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* memory allocation for include*/ 1644d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->include_size = l_tcp->numlayers * l_step_l; 1645d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->include = (OPJ_INT16*) opj_calloc(l_current_pi->include_size, 1646d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann sizeof(OPJ_INT16)); 1647d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!l_current_pi->include) { 1648d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_free(l_tmp_data); 1649d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_free(l_tmp_ptr); 1650d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_destroy(l_pi, l_bound); 1651d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return 00; 1652d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1653d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1654d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* special treatment for the first packet iterator*/ 1655d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_comp = l_current_pi->comps; 1656d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_img_comp = p_image->comps; 1657d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_tccp = l_tcp->tccps; 1658d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->tx0 = l_tx0; 1659d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->ty0 = l_ty0; 1660d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->tx1 = l_tx1; 1661d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->ty1 = l_ty1; 1662d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->dx = l_dx_min; 1663d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->dy = l_dy_min; 1664d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->step_p = l_step_p; 1665d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->step_c = l_step_c; 1666d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->step_r = l_step_r; 1667d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->step_l = l_step_l; 1668d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1669d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* allocation for components and number of components has already been calculated by opj_pi_create */ 1670d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (compno = 0; compno < numcomps; ++compno) { 1671d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_resolution_t *l_res = l_current_comp->resolutions; 1672d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_encoding_value_ptr = l_tmp_ptr[compno]; 1673d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1674d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_comp->dx = l_img_comp->dx; 1675d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_comp->dy = l_img_comp->dy; 1676d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1677d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* resolutions have already been initialized */ 1678d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (resno = 0; resno < l_current_comp->numresolutions; resno++) { 1679d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_res->pdx = *(l_encoding_value_ptr++); 1680d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_res->pdy = *(l_encoding_value_ptr++); 1681d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_res->pw = *(l_encoding_value_ptr++); 1682d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_res->ph = *(l_encoding_value_ptr++); 1683d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++l_res; 1684d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1685d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1686d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++l_current_comp; 1687d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++l_img_comp; 1688d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++l_tccp; 1689d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1690d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++l_current_pi; 1691d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1692d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (pino = 1 ; pino < l_bound ; ++pino) { 1693d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_comp = l_current_pi->comps; 1694d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_img_comp = p_image->comps; 1695d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_tccp = l_tcp->tccps; 1696d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1697d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->tx0 = l_tx0; 1698d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->ty0 = l_ty0; 1699d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->tx1 = l_tx1; 1700d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->ty1 = l_ty1; 1701d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->dx = l_dx_min; 1702d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->dy = l_dy_min; 1703d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->step_p = l_step_p; 1704d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->step_c = l_step_c; 1705d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->step_r = l_step_r; 1706d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->step_l = l_step_l; 1707d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1708d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* allocation for components and number of components has already been calculated by opj_pi_create */ 1709d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (compno = 0; compno < numcomps; ++compno) { 1710d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_resolution_t *l_res = l_current_comp->resolutions; 1711d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_encoding_value_ptr = l_tmp_ptr[compno]; 1712d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1713d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_comp->dx = l_img_comp->dx; 1714d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_comp->dy = l_img_comp->dy; 1715d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* resolutions have already been initialized */ 1716d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (resno = 0; resno < l_current_comp->numresolutions; resno++) { 1717d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_res->pdx = *(l_encoding_value_ptr++); 1718d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_res->pdy = *(l_encoding_value_ptr++); 1719d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_res->pw = *(l_encoding_value_ptr++); 1720d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_res->ph = *(l_encoding_value_ptr++); 1721d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++l_res; 1722d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1723d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++l_current_comp; 1724d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++l_img_comp; 1725d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++l_tccp; 1726d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1727d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1728d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* special treatment*/ 1729d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->include = (l_current_pi - 1)->include; 1730d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->include_size = (l_current_pi - 1)->include_size; 1731d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++l_current_pi; 1732d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1733d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1734d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_free(l_tmp_data); 1735d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_tmp_data = 00; 1736d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_free(l_tmp_ptr); 1737d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_tmp_ptr = 00; 1738ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1739e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (l_tcp->POC && (OPJ_IS_CINEMA(p_cp->rsiz) || p_t2_mode == FINAL_PASS)) { 1740d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_update_encode_poc_and_final(p_cp, p_tile_no, l_tx0, l_tx1, l_ty0, l_ty1, 1741d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_max_prec, l_max_res, l_dx_min, l_dy_min); 1742d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 1743d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_update_encode_not_poc(p_cp, numcomps, p_tile_no, l_tx0, l_tx1, 1744d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_ty0, l_ty1, l_max_prec, l_max_res, l_dx_min, l_dy_min); 1745d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1746d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1747d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return l_pi; 1748ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 1749ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 1750d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid opj_pi_create_encode(opj_pi_iterator_t *pi, 1751d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_cp_t *cp, 1752d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 tileno, 1753d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 pino, 1754d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 tpnum, 1755d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 tppos, 1756d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann J2K_T2_MODE t2_mode) 1757ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 1758d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann const OPJ_CHAR *prog; 1759d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 i; 1760d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 incr_top = 1, resetX = 0; 1761d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_tcp_t *tcps = &cp->tcps[tileno]; 1762d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_poc_t *tcp = &tcps->pocs[pino]; 1763d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1764d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann prog = opj_j2k_convert_progression_order(tcp->prg); 1765d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1766d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].first = 1; 1767d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.prg = tcp->prg; 1768d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1769d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (!(cp->m_specific_param.m_enc.m_tp_on && ((!OPJ_IS_CINEMA(cp->rsiz) && 1770d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann (t2_mode == FINAL_PASS)) || OPJ_IS_CINEMA(cp->rsiz)))) { 1771d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.resno0 = tcp->resS; 1772d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.resno1 = tcp->resE; 1773d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.compno0 = tcp->compS; 1774d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.compno1 = tcp->compE; 1775d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.layno0 = tcp->layS; 1776d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.layno1 = tcp->layE; 1777d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.precno0 = tcp->prcS; 1778d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.precno1 = tcp->prcE; 1779d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.tx0 = (OPJ_INT32)tcp->txS; 1780d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.ty0 = (OPJ_INT32)tcp->tyS; 1781d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.tx1 = (OPJ_INT32)tcp->txE; 1782d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.ty1 = (OPJ_INT32)tcp->tyE; 1783d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 1784d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (i = tppos + 1; i < 4; i++) { 1785d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann switch (prog[i]) { 1786d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case 'R': 1787d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.resno0 = tcp->resS; 1788d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.resno1 = tcp->resE; 1789d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1790d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case 'C': 1791d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.compno0 = tcp->compS; 1792d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.compno1 = tcp->compE; 1793d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1794d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case 'L': 1795d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.layno0 = tcp->layS; 1796d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.layno1 = tcp->layE; 1797d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1798d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case 'P': 1799d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann switch (tcp->prg) { 1800d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case OPJ_LRCP: 1801d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case OPJ_RLCP: 1802d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.precno0 = tcp->prcS; 1803d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.precno1 = tcp->prcE; 1804d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1805d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann default: 1806d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.tx0 = (OPJ_INT32)tcp->txS; 1807d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.ty0 = (OPJ_INT32)tcp->tyS; 1808d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.tx1 = (OPJ_INT32)tcp->txE; 1809d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.ty1 = (OPJ_INT32)tcp->tyE; 1810d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1811d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1812d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1813d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1814d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1815d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 1816d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (tpnum == 0) { 1817d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (i = tppos; i >= 0; i--) { 1818d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann switch (prog[i]) { 1819d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case 'C': 1820d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp->comp_t = tcp->compS; 1821d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.compno0 = tcp->comp_t; 1822d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.compno1 = tcp->comp_t + 1; 1823d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp->comp_t += 1; 1824d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1825d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case 'R': 1826d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp->res_t = tcp->resS; 1827d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.resno0 = tcp->res_t; 1828d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.resno1 = tcp->res_t + 1; 1829d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp->res_t += 1; 1830d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1831d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case 'L': 1832d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp->lay_t = tcp->layS; 1833d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.layno0 = tcp->lay_t; 1834d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.layno1 = tcp->lay_t + 1; 1835d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp->lay_t += 1; 1836d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1837d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case 'P': 1838d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann switch (tcp->prg) { 1839d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case OPJ_LRCP: 1840d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case OPJ_RLCP: 1841d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp->prc_t = tcp->prcS; 1842d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.precno0 = tcp->prc_t; 1843d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.precno1 = tcp->prc_t + 1; 1844d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp->prc_t += 1; 1845d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1846d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann default: 1847d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp->tx0_t = tcp->txS; 1848d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp->ty0_t = tcp->tyS; 1849d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.tx0 = (OPJ_INT32)tcp->tx0_t; 1850d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.tx1 = (OPJ_INT32)(tcp->tx0_t + tcp->dx - (tcp->tx0_t % tcp->dx)); 1851d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.ty0 = (OPJ_INT32)tcp->ty0_t; 1852d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.ty1 = (OPJ_INT32)(tcp->ty0_t + tcp->dy - (tcp->ty0_t % tcp->dy)); 1853d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp->tx0_t = (OPJ_UINT32)pi[pino].poc.tx1; 1854d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp->ty0_t = (OPJ_UINT32)pi[pino].poc.ty1; 1855d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1856d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1857d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1858d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1859d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1860d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann incr_top = 1; 1861d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 1862d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (i = tppos; i >= 0; i--) { 1863d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann switch (prog[i]) { 1864d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case 'C': 1865d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.compno0 = tcp->comp_t - 1; 1866d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.compno1 = tcp->comp_t; 1867d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1868d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case 'R': 1869d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.resno0 = tcp->res_t - 1; 1870d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.resno1 = tcp->res_t; 1871d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1872d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case 'L': 1873d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.layno0 = tcp->lay_t - 1; 1874d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.layno1 = tcp->lay_t; 1875d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1876d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case 'P': 1877d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann switch (tcp->prg) { 1878d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case OPJ_LRCP: 1879d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case OPJ_RLCP: 1880d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.precno0 = tcp->prc_t - 1; 1881d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.precno1 = tcp->prc_t; 1882d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1883d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann default: 1884d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.tx0 = (OPJ_INT32)(tcp->tx0_t - tcp->dx - (tcp->tx0_t % tcp->dx)); 1885d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.tx1 = (OPJ_INT32)tcp->tx0_t ; 1886d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.ty0 = (OPJ_INT32)(tcp->ty0_t - tcp->dy - (tcp->ty0_t % tcp->dy)); 1887d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.ty1 = (OPJ_INT32)tcp->ty0_t ; 1888d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1889d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1890d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1891d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1892d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (incr_top == 1) { 1893d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann switch (prog[i]) { 1894d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case 'R': 1895d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (tcp->res_t == tcp->resE) { 1896d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (opj_pi_check_next_level(i - 1, cp, tileno, pino, prog)) { 1897d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp->res_t = tcp->resS; 1898d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.resno0 = tcp->res_t; 1899d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.resno1 = tcp->res_t + 1; 1900d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp->res_t += 1; 1901d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann incr_top = 1; 1902d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 1903d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann incr_top = 0; 1904d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1905d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 1906d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.resno0 = tcp->res_t; 1907d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.resno1 = tcp->res_t + 1; 1908d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp->res_t += 1; 1909d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann incr_top = 0; 1910d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1911d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1912d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case 'C': 1913d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (tcp->comp_t == tcp->compE) { 1914d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (opj_pi_check_next_level(i - 1, cp, tileno, pino, prog)) { 1915d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp->comp_t = tcp->compS; 1916d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.compno0 = tcp->comp_t; 1917d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.compno1 = tcp->comp_t + 1; 1918d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp->comp_t += 1; 1919d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann incr_top = 1; 1920d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 1921d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann incr_top = 0; 1922d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1923d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 1924d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.compno0 = tcp->comp_t; 1925d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.compno1 = tcp->comp_t + 1; 1926d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp->comp_t += 1; 1927d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann incr_top = 0; 1928d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1929d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1930d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case 'L': 1931d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (tcp->lay_t == tcp->layE) { 1932d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (opj_pi_check_next_level(i - 1, cp, tileno, pino, prog)) { 1933d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp->lay_t = tcp->layS; 1934d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.layno0 = tcp->lay_t; 1935d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.layno1 = tcp->lay_t + 1; 1936d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp->lay_t += 1; 1937d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann incr_top = 1; 1938d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 1939d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann incr_top = 0; 1940d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1941d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 1942d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.layno0 = tcp->lay_t; 1943d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.layno1 = tcp->lay_t + 1; 1944d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp->lay_t += 1; 1945d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann incr_top = 0; 1946d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1947d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1948d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case 'P': 1949d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann switch (tcp->prg) { 1950d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case OPJ_LRCP: 1951d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case OPJ_RLCP: 1952d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (tcp->prc_t == tcp->prcE) { 1953d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (opj_pi_check_next_level(i - 1, cp, tileno, pino, prog)) { 1954d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp->prc_t = tcp->prcS; 1955d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.precno0 = tcp->prc_t; 1956d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.precno1 = tcp->prc_t + 1; 1957d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp->prc_t += 1; 1958d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann incr_top = 1; 1959d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 1960d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann incr_top = 0; 1961d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1962d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 1963d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.precno0 = tcp->prc_t; 1964d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.precno1 = tcp->prc_t + 1; 1965d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp->prc_t += 1; 1966d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann incr_top = 0; 1967d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1968d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 1969d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann default: 1970d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (tcp->tx0_t >= tcp->txE) { 1971d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (tcp->ty0_t >= tcp->tyE) { 1972d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (opj_pi_check_next_level(i - 1, cp, tileno, pino, prog)) { 1973d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp->ty0_t = tcp->tyS; 1974d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.ty0 = (OPJ_INT32)tcp->ty0_t; 1975d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.ty1 = (OPJ_INT32)(tcp->ty0_t + tcp->dy - (tcp->ty0_t % tcp->dy)); 1976d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp->ty0_t = (OPJ_UINT32)pi[pino].poc.ty1; 1977d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann incr_top = 1; 1978d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann resetX = 1; 1979d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 1980d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann incr_top = 0; 1981d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann resetX = 0; 1982d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1983d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 1984d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.ty0 = (OPJ_INT32)tcp->ty0_t; 1985d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.ty1 = (OPJ_INT32)(tcp->ty0_t + tcp->dy - (tcp->ty0_t % tcp->dy)); 1986d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp->ty0_t = (OPJ_UINT32)pi[pino].poc.ty1; 1987d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann incr_top = 0; 1988d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann resetX = 1; 1989d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1990d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (resetX == 1) { 1991d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp->tx0_t = tcp->txS; 1992d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.tx0 = (OPJ_INT32)tcp->tx0_t; 1993d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.tx1 = (OPJ_INT32)(tcp->tx0_t + tcp->dx - (tcp->tx0_t % tcp->dx)); 1994d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp->tx0_t = (OPJ_UINT32)pi[pino].poc.tx1; 1995d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 1996d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 1997d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.tx0 = (OPJ_INT32)tcp->tx0_t; 1998d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann pi[pino].poc.tx1 = (OPJ_INT32)(tcp->tx0_t + tcp->dx - (tcp->tx0_t % tcp->dx)); 1999d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann tcp->tx0_t = (OPJ_UINT32)pi[pino].poc.tx1; 2000d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann incr_top = 0; 2001d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 2002d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 2003d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 2004d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann break; 2005d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 2006d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 2007d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 2008d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 2009d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 2010ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 2011ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 2012ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid opj_pi_destroy(opj_pi_iterator_t *p_pi, 2013ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 p_nb_elements) 2014ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 2015d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 compno, pino; 2016d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_iterator_t *l_current_pi = p_pi; 2017ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_pi) { 2018d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (p_pi->include) { 2019d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_free(p_pi->include); 2020d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann p_pi->include = 00; 2021d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 2022d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (pino = 0; pino < p_nb_elements; ++pino) { 2023d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (l_current_pi->comps) { 2024d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_comp_t *l_current_component = l_current_pi->comps; 2025d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann for (compno = 0; compno < l_current_pi->numcomps; compno++) { 2026d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (l_current_component->resolutions) { 2027d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_free(l_current_component->resolutions); 2028d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_component->resolutions = 00; 2029d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 2030d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 2031d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++l_current_component; 2032d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 2033d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_free(l_current_pi->comps); 2034d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_current_pi->comps = 0; 2035d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 2036d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann ++l_current_pi; 2037d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 2038d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_free(p_pi); 2039d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 2040ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 2041ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 2042ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 2043ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 2044d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannvoid opj_pi_update_encoding_parameters(const opj_image_t *p_image, 2045d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_cp_t *p_cp, 2046d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 p_tile_no) 2047ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 2048d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* encoding parameters to set */ 2049d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 l_max_res; 2050d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 l_max_prec; 2051d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_INT32 l_tx0, l_tx1, l_ty0, l_ty1; 2052d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann OPJ_UINT32 l_dx_min, l_dy_min; 2053d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 2054d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* pointers */ 2055d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_tcp_t *l_tcp = 00; 2056d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 2057d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* preconditions */ 2058d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann assert(p_cp != 00); 2059d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann assert(p_image != 00); 2060d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann assert(p_tile_no < p_cp->tw * p_cp->th); 2061d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 2062d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_tcp = &(p_cp->tcps[p_tile_no]); 2063d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 2064d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann /* get encoding parameters */ 2065d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_get_encoding_parameters(p_image, p_cp, p_tile_no, &l_tx0, &l_tx1, &l_ty0, 2066d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann &l_ty1, &l_dx_min, &l_dy_min, &l_max_prec, &l_max_res); 2067d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 2068d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (l_tcp->POC) { 2069d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_update_encode_poc_and_final(p_cp, p_tile_no, l_tx0, l_tx1, l_ty0, l_ty1, 2070d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_max_prec, l_max_res, l_dx_min, l_dy_min); 2071d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } else { 2072d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann opj_pi_update_encode_not_poc(p_cp, p_image->numcomps, p_tile_no, l_tx0, l_tx1, 2073d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann l_ty0, l_ty1, l_max_prec, l_max_res, l_dx_min, l_dy_min); 2074d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 2075ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 2076ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 2077d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. MoltmannOPJ_BOOL opj_pi_next(opj_pi_iterator_t * pi) 2078d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann{ 2079d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann switch (pi->poc.prg) { 2080d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case OPJ_LRCP: 2081d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return opj_pi_next_lrcp(pi); 2082d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case OPJ_RLCP: 2083d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return opj_pi_next_rlcp(pi); 2084d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case OPJ_RPCL: 2085d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return opj_pi_next_rpcl(pi); 2086d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case OPJ_PCRL: 2087d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return opj_pi_next_pcrl(pi); 2088d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case OPJ_CPRL: 2089d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return opj_pi_next_cprl(pi); 2090d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann case OPJ_PROG_UNKNOWN: 2091d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_FALSE; 2092d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 2093d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 2094d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return OPJ_FALSE; 2095ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 2096