JCINIT.c
上传用户:qiutianh
上传日期:2022-08-08
资源大小:939k
文件大小:3k
源码类别:

图形图象

开发平台:

Visual C++

  1. ////////////////////////////////////////////////////////////////////////
  2. //
  3. // Note : this file is included as part of the Smaller Animals Software
  4. // JpegFile package. Though this file has not been modified from it's 
  5. // original IJG 6a form, it is not the responsibility on the Independent
  6. // JPEG Group to answer questions regarding this code.
  7. //
  8. // Any questions you have about this code should be addressed to :
  9. //
  10. // CHRISDL@PAGESZ.NET - the distributor of this package.
  11. //
  12. // Remember, by including this code in the JpegFile package, Smaller 
  13. // Animals Software assumes all responsibilities for answering questions
  14. // about it. If we (SA Software) can't answer your questions ourselves, we 
  15. // will direct you to people who can.
  16. //
  17. // Thanks, CDL.
  18. //
  19. ////////////////////////////////////////////////////////////////////////
  20. /*
  21.  * jcinit.c
  22.  *
  23.  * Copyright (C) 1991-1996, Thomas G. Lane.
  24.  * This file is part of the Independent JPEG Group's software.
  25.  * For conditions of distribution and use, see the accompanying README file.
  26.  *
  27.  * This file contains initialization logic for the JPEG compressor.
  28.  * This routine is in charge of selecting the modules to be executed and
  29.  * making an initialization call to each one.
  30.  *
  31.  * Logically, this code belongs in jcmaster.c.  It's split out because
  32.  * linking this routine implies linking the entire compression library.
  33.  * For a transcoding-only application, we want to be able to use jcmaster.c
  34.  * without linking in the whole library.
  35.  */
  36. #define JPEG_INTERNALS
  37. #include "jinclude.h"
  38. #include "jpeglib.h"
  39. /*
  40.  * Master selection of compression modules.
  41.  * This is done once at the start of processing an image.  We determine
  42.  * which modules will be used and give them appropriate initialization calls.
  43.  */
  44. GLOBAL(void)
  45. jinit_compress_master (j_compress_ptr cinfo)
  46. {
  47.   /* Initialize master control (includes parameter checking/processing) */
  48.   jinit_c_master_control(cinfo, FALSE /* full compression */);
  49.   /* Preprocessing */
  50.   if (! cinfo->raw_data_in) {
  51.     jinit_color_converter(cinfo);
  52.     jinit_downsampler(cinfo);
  53.     jinit_c_prep_controller(cinfo, FALSE /* never need full buffer here */);
  54.   }
  55.   /* Forward DCT */
  56.   jinit_forward_dct(cinfo);
  57.   /* Entropy encoding: either Huffman or arithmetic coding. */
  58.   if (cinfo->arith_code) {
  59.     ERREXIT(cinfo, JERR_ARITH_NOTIMPL);
  60.   } else {
  61.     if (cinfo->progressive_mode) {
  62. #ifdef C_PROGRESSIVE_SUPPORTED
  63.       jinit_phuff_encoder(cinfo);
  64. #else
  65.       ERREXIT(cinfo, JERR_NOT_COMPILED);
  66. #endif
  67.     } else
  68.       jinit_huff_encoder(cinfo);
  69.   }
  70.   /* Need a full-image coefficient buffer in any multi-pass mode. */
  71.   jinit_c_coef_controller(cinfo,
  72.   (cinfo->num_scans > 1 || cinfo->optimize_coding));
  73.   jinit_c_main_controller(cinfo, FALSE /* never need full buffer here */);
  74.   jinit_marker_writer(cinfo);
  75.   /* We can now tell the memory manager to allocate virtual arrays. */
  76.   (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo);
  77.   /* Write the datastream header (SOI) immediately.
  78.    * Frame and scan headers are postponed till later.
  79.    * This lets application insert special markers after the SOI.
  80.    */
  81.   (*cinfo->marker->write_file_header) (cinfo);
  82. }