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