1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * The copyright in this software is being made available under the 2-clauses 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 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) 2005, Herve Drolon, FreeImage Team 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * All rights reserved. 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Redistribution and use in source and binary forms, with or without 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * modification, are permitted provided that the following conditions 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * are met: 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 1. Redistributions of source code must retain the above copyright 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * notice, this list of conditions and the following disclaimer. 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 2. Redistributions in binary form must reproduce the above copyright 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * notice, this list of conditions and the following disclaimer in the 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * documentation and/or other materials provided with the distribution. 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * POSSIBILITY OF SUCH DAMAGE. 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "opj_includes.h" 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovopj_image_t* opj_image_create0(void) { 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_t *image = (opj_image_t*)opj_calloc(1, sizeof(opj_image_t)); 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return image; 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovopj_image_t* OPJ_CALLCONV opj_image_create(OPJ_UINT32 numcmpts, opj_image_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc) { 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 compno; 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_t *image = NULL; 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov image = (opj_image_t*) opj_calloc(1, sizeof(opj_image_t)); 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(image) { 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov image->color_space = clrspc; 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov image->numcomps = numcmpts; 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* allocate memory for the per-component information */ 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov image->comps = (opj_image_comp_t*)opj_calloc(1,image->numcomps * sizeof(opj_image_comp_t)); 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(!image->comps) { 50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann /* TODO replace with event manager, breaks API */ 51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann /* fprintf(stderr,"Unable to allocate memory for image.\n"); */ 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_destroy(image); 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* create the individual image components */ 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for(compno = 0; compno < numcmpts; compno++) { 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_comp_t *comp = &image->comps[compno]; 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov comp->dx = cmptparms[compno].dx; 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov comp->dy = cmptparms[compno].dy; 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov comp->w = cmptparms[compno].w; 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov comp->h = cmptparms[compno].h; 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov comp->x0 = cmptparms[compno].x0; 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov comp->y0 = cmptparms[compno].y0; 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov comp->prec = cmptparms[compno].prec; 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov comp->bpp = cmptparms[compno].bpp; 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov comp->sgnd = cmptparms[compno].sgnd; 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov comp->data = (OPJ_INT32*) opj_calloc(comp->w * comp->h, sizeof(OPJ_INT32)); 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(!comp->data) { 69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann /* TODO replace with event manager, breaks API */ 70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann /* fprintf(stderr,"Unable to allocate memory for image.\n"); */ 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_destroy(image); 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return NULL; 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return image; 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid OPJ_CALLCONV opj_image_destroy(opj_image_t *image) { 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(image) { 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(image->comps) { 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 compno; 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* image components */ 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for(compno = 0; compno < image->numcomps; compno++) { 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_comp_t *image_comp = &(image->comps[compno]); 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(image_comp->data) { 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_free(image_comp->data); 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_free(image->comps); 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(image->icc_profile_buf) { 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_free(image->icc_profile_buf); 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_free(image); 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/** 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Updates the components characteristics of the image from the coding parameters. 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param p_image_header the image header to update. 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param p_cp the coding parameters from which to update the image. 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid opj_image_comp_header_update(opj_image_t * p_image_header, const struct opj_cp * p_cp) 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 i, l_width, l_height; 112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann OPJ_UINT32 l_x0, l_y0, l_x1, l_y1; 113ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann OPJ_UINT32 l_comp_x0, l_comp_y0, l_comp_x1, l_comp_y1; 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_comp_t* l_img_comp = NULL; 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 116ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann l_x0 = opj_uint_max(p_cp->tx0 , p_image_header->x0); 117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann l_y0 = opj_uint_max(p_cp->ty0 , p_image_header->y0); 118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann l_x1 = p_cp->tx0 + (p_cp->tw - 1U) * p_cp->tdx; /* validity of p_cp members used here checked in opj_j2k_read_siz. Can't overflow. */ 119ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann l_y1 = p_cp->ty0 + (p_cp->th - 1U) * p_cp->tdy; /* can't overflow */ 120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann l_x1 = opj_uint_min(opj_uint_adds(l_x1, p_cp->tdx), p_image_header->x1); /* use add saturated to prevent overflow */ 121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann l_y1 = opj_uint_min(opj_uint_adds(l_y1, p_cp->tdy), p_image_header->y1); /* use add saturated to prevent overflow */ 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_img_comp = p_image_header->comps; 124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for (i = 0; i < p_image_header->numcomps; ++i) { 125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann l_comp_x0 = opj_uint_ceildiv(l_x0, l_img_comp->dx); 126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann l_comp_y0 = opj_uint_ceildiv(l_y0, l_img_comp->dy); 127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann l_comp_x1 = opj_uint_ceildiv(l_x1, l_img_comp->dx); 128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann l_comp_y1 = opj_uint_ceildiv(l_y1, l_img_comp->dy); 129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann l_width = opj_uint_ceildivpow2(l_comp_x1 - l_comp_x0, l_img_comp->factor); 130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann l_height = opj_uint_ceildivpow2(l_comp_y1 - l_comp_y0, l_img_comp->factor); 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_img_comp->w = l_width; 132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov l_img_comp->h = l_height; 133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann l_img_comp->x0 = l_comp_x0; 134ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann l_img_comp->y0 = l_comp_y0; 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ++l_img_comp; 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/** 141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Copy only header of image and its component header (no data are copied) 142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * if dest image have data, they will be freed 143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param p_image_src the src image 145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * @param p_image_dest the dest image 146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * 147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid opj_copy_image_header(const opj_image_t* p_image_src, opj_image_t* p_image_dest) 149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{ 150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 compno; 151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* preconditions */ 153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov assert(p_image_src != 00); 154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov assert(p_image_dest != 00); 155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_image_dest->x0 = p_image_src->x0; 157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_image_dest->y0 = p_image_src->y0; 158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_image_dest->x1 = p_image_src->x1; 159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_image_dest->y1 = p_image_src->y1; 160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_image_dest->comps){ 162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for(compno = 0; compno < p_image_dest->numcomps; compno++) { 163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_comp_t *image_comp = &(p_image_dest->comps[compno]); 164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if(image_comp->data) { 165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_free(image_comp->data); 166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_free(p_image_dest->comps); 169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_image_dest->comps = NULL; 170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_image_dest->numcomps = p_image_src->numcomps; 173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_image_dest->comps = (opj_image_comp_t*) opj_malloc(p_image_dest->numcomps * sizeof(opj_image_comp_t)); 175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!p_image_dest->comps){ 176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_image_dest->comps = NULL; 177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_image_dest->numcomps = 0; 178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return; 179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for (compno=0; compno < p_image_dest->numcomps; compno++){ 182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov memcpy( &(p_image_dest->comps[compno]), 183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov &(p_image_src->comps[compno]), 184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov sizeof(opj_image_comp_t)); 185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_image_dest->comps[compno].data = NULL; 186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_image_dest->color_space = p_image_src->color_space; 189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_image_dest->icc_profile_len = p_image_src->icc_profile_len; 190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (p_image_dest->icc_profile_len) { 192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_image_dest->icc_profile_buf = (OPJ_BYTE*)opj_malloc(p_image_dest->icc_profile_len); 193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!p_image_dest->icc_profile_buf){ 194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_image_dest->icc_profile_buf = NULL; 195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_image_dest->icc_profile_len = 0; 196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return; 197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov memcpy( p_image_dest->icc_profile_buf, 199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_image_src->icc_profile_buf, 200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_image_src->icc_profile_len); 201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov else 203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p_image_dest->icc_profile_buf = NULL; 204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return; 206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovopj_image_t* OPJ_CALLCONV opj_image_tile_create(OPJ_UINT32 numcmpts, opj_image_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc) { 209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov OPJ_UINT32 compno; 210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_t *image = 00; 211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 212e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov image = (opj_image_t*) opj_calloc(1,sizeof(opj_image_t)); 213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (image) 214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov image->color_space = clrspc; 217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov image->numcomps = numcmpts; 218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* allocate memory for the per-component information */ 220e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov image->comps = (opj_image_comp_t*)opj_calloc(image->numcomps, sizeof(opj_image_comp_t)); 221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if (!image->comps) { 222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_destroy(image); 223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return 00; 224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* create the individual image components */ 227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for(compno = 0; compno < numcmpts; compno++) { 228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov opj_image_comp_t *comp = &image->comps[compno]; 229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov comp->dx = cmptparms[compno].dx; 230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov comp->dy = cmptparms[compno].dy; 231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov comp->w = cmptparms[compno].w; 232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov comp->h = cmptparms[compno].h; 233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov comp->x0 = cmptparms[compno].x0; 234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov comp->y0 = cmptparms[compno].y0; 235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov comp->prec = cmptparms[compno].prec; 236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov comp->sgnd = cmptparms[compno].sgnd; 237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov comp->data = 0; 238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return image; 242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov} 243