jcomapi.c revision 9f5d49a1588e438ae7ceabd0c94172117e3303aa
19f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* 29f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * jcomapi.c 39f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * 49f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Copyright (C) 1994-1997, Thomas G. Lane. 59f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * This file is part of the Independent JPEG Group's software. 69f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * For conditions of distribution and use, see the accompanying README file. 79f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * 89f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * This file contains application interface routines that are used for both 99f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * compression and decompression. 109f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 119f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 129f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define JPEG_INTERNALS 139f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#include "jinclude.h" 149f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#include "jpeglib.h" 159f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 169f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 179f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* 189f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Abort processing of a JPEG compression or decompression operation, 199f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * but don't destroy the object itself. 209f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * 219f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * For this, we merely clean up all the nonpermanent memory pools. 229f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Note that temp files (virtual arrays) are not allowed to belong to 239f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * the permanent pool, so we will be able to close all temp files here. 249f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Closing a data source or destination, if necessary, is the application's 259f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * responsibility. 269f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 279f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 289f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectGLOBAL(void) 299f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectjpeg_abort (j_common_ptr cinfo) 309f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{ 319f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project int pool; 329f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 339f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* Do nothing if called on a not-initialized or destroyed JPEG object. */ 349f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project if (cinfo->mem == NULL) 359f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project return; 369f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 379f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* Releasing pools in reverse order might help avoid fragmentation 389f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * with some (brain-damaged) malloc libraries. 399f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 409f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project for (pool = JPOOL_NUMPOOLS-1; pool > JPOOL_PERMANENT; pool--) { 419f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project (*cinfo->mem->free_pool) (cinfo, pool); 429f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project } 439f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 449f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* Reset overall state for possible reuse of object */ 459f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project if (cinfo->is_decompressor) { 469f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->global_state = DSTATE_START; 479f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* Try to keep application from accessing now-deleted marker list. 489f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * A bit kludgy to do it here, but this is the most central place. 499f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 509f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project ((j_decompress_ptr) cinfo)->marker_list = NULL; 519f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project } else { 529f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->global_state = CSTATE_START; 539f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project } 549f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project} 559f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 569f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 579f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* 589f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Destruction of a JPEG object. 599f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * 609f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Everything gets deallocated except the master jpeg_compress_struct itself 619f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * and the error manager struct. Both of these are supplied by the application 629f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * and must be freed, if necessary, by the application. (Often they are on 639f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * the stack and so don't need to be freed anyway.) 649f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Closing a data source or destination, if necessary, is the application's 659f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * responsibility. 669f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 679f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 689f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectGLOBAL(void) 699f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectjpeg_destroy (j_common_ptr cinfo) 709f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{ 719f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* We need only tell the memory manager to release everything. */ 729f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project /* NB: mem pointer is NULL if memory mgr failed to initialize. */ 739f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project if (cinfo->mem != NULL) 749f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project (*cinfo->mem->self_destruct) (cinfo); 759f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->mem = NULL; /* be safe if jpeg_destroy is called twice */ 769f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project cinfo->global_state = 0; /* mark it destroyed */ 779f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project} 789f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 799f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 809f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* 819f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Convenience routines for allocating quantization and Huffman tables. 829f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * (Would jutils.c be a more reasonable place to put these?) 839f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */ 849f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 859f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectGLOBAL(JQUANT_TBL *) 869f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectjpeg_alloc_quant_table (j_common_ptr cinfo) 879f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{ 889f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project JQUANT_TBL *tbl; 899f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 909f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project tbl = (JQUANT_TBL *) 919f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project (*cinfo->mem->alloc_small) (cinfo, JPOOL_PERMANENT, SIZEOF(JQUANT_TBL)); 929f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project tbl->sent_table = FALSE; /* make sure this is false in any new table */ 939f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project return tbl; 949f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project} 959f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 969f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 979f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectGLOBAL(JHUFF_TBL *) 989f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectjpeg_alloc_huff_table (j_common_ptr cinfo) 999f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{ 1009f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project JHUFF_TBL *tbl; 1019f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project 1029f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project tbl = (JHUFF_TBL *) 1039f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project (*cinfo->mem->alloc_small) (cinfo, JPOOL_PERMANENT, SIZEOF(JHUFF_TBL)); 1049f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project tbl->sent_table = FALSE; /* make sure this is false in any new table */ 1059f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project return tbl; 1069f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project} 107