]>
git.saurik.com Git - wxWidgets.git/blob - src/jpeg/jcomapi.c
   4  * Copyright (C) 1994-1997, Thomas G. Lane. 
   5  * This file is part of the Independent JPEG Group's software. 
   6  * For conditions of distribution and use, see the accompanying README file. 
   8  * This file contains application interface routines that are used for both 
   9  * compression and decompression. 
  12 #define JPEG_INTERNALS 
  18  * Abort processing of a JPEG compression or decompression operation, 
  19  * but don't destroy the object itself. 
  21  * For this, we merely clean up all the nonpermanent memory pools. 
  22  * Note that temp files (virtual arrays) are not allowed to belong to 
  23  * the permanent pool, so we will be able to close all temp files here. 
  24  * Closing a data source or destination, if necessary, is the application's 
  29 jpeg_abort (j_common_ptr cinfo
) 
  33   /* Do nothing if called on a not-initialized or destroyed JPEG object. */ 
  34   if (cinfo
->mem 
== NULL
) 
  37   /* Releasing pools in reverse order might help avoid fragmentation 
  38    * with some (brain-damaged) malloc libraries. 
  40   for (pool 
= JPOOL_NUMPOOLS
-1; pool 
> JPOOL_PERMANENT
; pool
--) { 
  41     (*cinfo
->mem
->free_pool
) (cinfo
, pool
); 
  44   /* Reset overall state for possible reuse of object */ 
  45   if (cinfo
->is_decompressor
) { 
  46     cinfo
->global_state 
= DSTATE_START
; 
  47     /* Try to keep application from accessing now-deleted marker list. 
  48      * A bit kludgy to do it here, but this is the most central place. 
  50     ((j_decompress_ptr
) cinfo
)->marker_list 
= NULL
; 
  52     cinfo
->global_state 
= CSTATE_START
; 
  58  * Destruction of a JPEG object. 
  60  * Everything gets deallocated except the master jpeg_compress_struct itself 
  61  * and the error manager struct.  Both of these are supplied by the application 
  62  * and must be freed, if necessary, by the application.  (Often they are on 
  63  * the stack and so don't need to be freed anyway.) 
  64  * Closing a data source or destination, if necessary, is the application's 
  69 jpeg_destroy (j_common_ptr cinfo
) 
  71   /* We need only tell the memory manager to release everything. */ 
  72   /* NB: mem pointer is NULL if memory mgr failed to initialize. */ 
  73   if (cinfo
->mem 
!= NULL
) 
  74     (*cinfo
->mem
->self_destruct
) (cinfo
); 
  75   cinfo
->mem 
= NULL
;            /* be safe if jpeg_destroy is called twice */ 
  76   cinfo
->global_state 
= 0;      /* mark it destroyed */ 
  81  * Convenience routines for allocating quantization and Huffman tables. 
  82  * (Would jutils.c be a more reasonable place to put these?) 
  86 jpeg_alloc_quant_table (j_common_ptr cinfo
) 
  91     (*cinfo
->mem
->alloc_small
) (cinfo
, JPOOL_PERMANENT
, SIZEOF(JQUANT_TBL
)); 
  92   tbl
->sent_table 
= FALSE
;      /* make sure this is false in any new table */ 
  98 jpeg_alloc_huff_table (j_common_ptr cinfo
) 
 103     (*cinfo
->mem
->alloc_small
) (cinfo
, JPOOL_PERMANENT
, SIZEOF(JHUFF_TBL
)); 
 104   tbl
->sent_table 
= FALSE
;      /* make sure this is false in any new table */