home *** CD-ROM | disk | FTP | other *** search
/ Windows Graphics Programming / Feng_Yuan_Win32_GDI_DirectX.iso / Samples / include / jlib / jcomapi.cpp < prev    next >
C/C++ Source or Header  |  2000-05-16  |  4KB  |  118 lines

  1. //-------------------------------------------------------------------------//
  2. //          Windows Graphics Programming: Win32 GDI and DirectDraw         //
  3. //                        ISBN  0-13-086985-6                              //
  4. //                                                                         //
  5. //  Modified by: Yuan, Feng                             www.fengyuan.com   //
  6. //  Changes    : C++, exception, in-memory source, BGR byte order          //
  7. //  Version    : 1.00.000, May 31, 2000                                    //
  8. //-------------------------------------------------------------------------//
  9.  
  10. /*
  11.  * jcomapi.c
  12.  *
  13.  * Copyright (C) 1994-1997, Thomas G. Lane.
  14.  * This file is part of the Independent JPEG Group's software.
  15.  * For conditions of distribution and use, see the accompanying README file.
  16.  *
  17.  * This file contains application interface routines that are used for both
  18.  * compression and decompression.
  19.  */
  20.  
  21. #define JPEG_INTERNALS
  22. #include "jinclude.h"
  23. #include "jpeglib.h"
  24.  
  25.  
  26. /*
  27.  * Abort processing of a JPEG compression or decompression operation,
  28.  * but don't destroy the object itself.
  29.  *
  30.  * For this, we merely clean up all the nonpermanent memory pools.
  31.  * Note that temp files (virtual arrays) are not allowed to belong to
  32.  * the permanent pool, so we will be able to close all temp files here.
  33.  * Closing a data source or destination, if necessary, is the application's
  34.  * responsibility.
  35.  */
  36.  
  37. GLOBAL(void)
  38. jpeg_abort (j_common_ptr cinfo)
  39. {
  40.   int pool;
  41.  
  42.   /* Do nothing if called on a not-initialized or destroyed JPEG object. */
  43.   if (cinfo->mem == NULL)
  44.     return;
  45.  
  46.   /* Releasing pools in reverse order might help avoid fragmentation
  47.    * with some (brain-damaged) malloc libraries.
  48.    */
  49.     for (pool = JPOOL_NUMPOOLS-1; pool > JPOOL_PERMANENT; pool--) 
  50.         cinfo->mem->free_pool(pool);
  51.  
  52.   /* Reset overall state for possible reuse of object */
  53.   if (cinfo->is_decompressor) {
  54.     cinfo->global_state = DSTATE_START;
  55.     /* Try to keep application from accessing now-deleted marker list.
  56.      * A bit kludgy to do it here, but this is the most central place.
  57.      */
  58.     ((j_decompress_ptr) cinfo)->marker_list = NULL;
  59.   } else {
  60.     cinfo->global_state = CSTATE_START;
  61.   }
  62. }
  63.  
  64.  
  65. /*
  66.  * Destruction of a JPEG object.
  67.  *
  68.  * Everything gets deallocated except the master jpeg_compress_struct itself
  69.  * and the error manager struct.  Both of these are supplied by the application
  70.  * and must be freed, if necessary, by the application.  (Often they are on
  71.  * the stack and so don't need to be freed anyway.)
  72.  * Closing a data source or destination, if necessary, is the application's
  73.  * responsibility.
  74.  */
  75.  
  76. void jpeg_common_struct::jpeg_destroy(void)
  77. {
  78.     /* We need only tell the memory manager to release everything. */
  79.     /* NB: mem pointer is NULL if memory mgr failed to initialize. */
  80.     if ( mem != NULL )
  81.     {
  82.         delete mem;
  83.         mem = NULL;
  84.     }
  85.     
  86.     global_state = 0;    /* mark it destroyed */
  87.  
  88. //    if ( err ) delete err;
  89.     err = NULL;
  90. }
  91.  
  92.  
  93. /*
  94.  * Convenience routines for allocating quantization and Huffman tables.
  95.  * (Would jutils.c be a more reasonable place to put these?)
  96.  */
  97.  
  98. GLOBAL(JQUANT_TBL *)
  99. jpeg_alloc_quant_table (j_common_ptr cinfo)
  100. {
  101.   JQUANT_TBL *tbl;
  102.  
  103.   tbl = (JQUANT_TBL *) cinfo->mem->alloc_small(JPOOL_PERMANENT, sizeof(JQUANT_TBL));
  104.   tbl->sent_table = FALSE;    /* make sure this is false in any new table */
  105.   return tbl;
  106. }
  107.  
  108.  
  109. GLOBAL(JHUFF_TBL *)
  110. jpeg_alloc_huff_table (j_common_ptr cinfo)
  111. {
  112.   JHUFF_TBL *tbl;
  113.  
  114.   tbl = (JHUFF_TBL *) cinfo->mem->alloc_small(JPOOL_PERMANENT, sizeof(JHUFF_TBL));
  115.   tbl->sent_table = FALSE;    /* make sure this is false in any new table */
  116.   return tbl;
  117. }
  118.