19f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/*
29f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * jcinit.c
39f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project *
49f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Copyright (C) 1991-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 initialization logic for the JPEG compressor.
99f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * This routine is in charge of selecting the modules to be executed and
109f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * making an initialization call to each one.
119f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project *
129f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Logically, this code belongs in jcmaster.c.  It's split out because
139f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * linking this routine implies linking the entire compression library.
149f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * For a transcoding-only application, we want to be able to use jcmaster.c
159f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * without linking in the whole library.
169f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */
179f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
189f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define JPEG_INTERNALS
199f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#include "jinclude.h"
209f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#include "jpeglib.h"
219f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
229f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
239f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/*
249f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * Master selection of compression modules.
259f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * This is done once at the start of processing an image.  We determine
269f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project * which modules will be used and give them appropriate initialization calls.
279f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project */
289f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
299f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source ProjectGLOBAL(void)
309f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectjinit_compress_master (j_compress_ptr cinfo)
319f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{
329f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  /* Initialize master control (includes parameter checking/processing) */
339f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  jinit_c_master_control(cinfo, FALSE /* full compression */);
349f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
359f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  /* Preprocessing */
369f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  if (! cinfo->raw_data_in) {
379f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    jinit_color_converter(cinfo);
389f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    jinit_downsampler(cinfo);
399f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    jinit_c_prep_controller(cinfo, FALSE /* never need full buffer here */);
409f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  }
419f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  /* Forward DCT */
429f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  jinit_forward_dct(cinfo);
439f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  /* Entropy encoding: either Huffman or arithmetic coding. */
449f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  if (cinfo->arith_code) {
459f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    ERREXIT(cinfo, JERR_ARITH_NOTIMPL);
469f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  } else {
479f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    if (cinfo->progressive_mode) {
489f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#ifdef C_PROGRESSIVE_SUPPORTED
499f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project      jinit_phuff_encoder(cinfo);
509f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#else
519f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project      ERREXIT(cinfo, JERR_NOT_COMPILED);
529f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif
539f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project    } else
549f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project      jinit_huff_encoder(cinfo);
559f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  }
569f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
579f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  /* Need a full-image coefficient buffer in any multi-pass mode. */
589f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  jinit_c_coef_controller(cinfo,
599f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project		(boolean) (cinfo->num_scans > 1 || cinfo->optimize_coding));
609f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  jinit_c_main_controller(cinfo, FALSE /* never need full buffer here */);
619f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
629f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  jinit_marker_writer(cinfo);
639f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
649f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  /* We can now tell the memory manager to allocate virtual arrays. */
659f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  (*cinfo->mem->realize_virt_arrays) ((j_common_ptr) cinfo);
669f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
679f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  /* Write the datastream header (SOI) immediately.
689f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   * Frame and scan headers are postponed till later.
699f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   * This lets application insert special markers after the SOI.
709f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   */
719f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  (*cinfo->marker->write_file_header) (cinfo);
729f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project}
73