< prev index next >

modules/javafx.graphics/src/main/native-iio/libjpeg7/jcinit.c

Print this page


   1 /*
   2  * jcinit.c
   3  *
   4  * Copyright (C) 1991-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.
   7  *
   8  * This file contains initialization logic for the JPEG compressor.
   9  * This routine is in charge of selecting the modules to be executed and
  10  * making an initialization call to each one.
  11  *
  12  * Logically, this code belongs in jcmaster.c.  It's split out because
  13  * linking this routine implies linking the entire compression library.
  14  * For a transcoding-only application, we want to be able to use jcmaster.c
  15  * without linking in the whole library.
  16  */
  17 
  18 #define JPEG_INTERNALS
  19 #include "jinclude.h"
  20 #include "jpeglib.h"
  21 
  22 
  23 /*


































































































































































  24  * Master selection of compression modules.
  25  * This is done once at the start of processing an image.  We determine
  26  * which modules will be used and give them appropriate initialization calls.
  27  */
  28 
  29 GLOBAL(void)
  30 jinit_compress_master (j_compress_ptr cinfo)
  31 {





















  32   /* Initialize master control (includes parameter checking/processing) */
  33   jinit_c_master_control(cinfo, FALSE /* full compression */);
  34 
  35   /* Preprocessing */
  36   if (! cinfo->raw_data_in) {
  37     jinit_color_converter(cinfo);
  38     jinit_downsampler(cinfo);
  39     jinit_c_prep_controller(cinfo, FALSE /* never need full buffer here */);
  40   }
  41   /* Forward DCT */
  42   jinit_forward_dct(cinfo);
  43   /* Entropy encoding: either Huffman or arithmetic coding. */
  44   if (cinfo->arith_code)
  45     ERREXIT(cinfo, JERR_ARITH_NOTIMPL);
  46   else {
  47     jinit_huff_encoder(cinfo);
  48   }
  49 
  50   /* Need a full-image coefficient buffer in any multi-pass mode. */
  51   jinit_c_coef_controller(cinfo,
   1 /*
   2  * jcinit.c
   3  *
   4  * Copyright (C) 1991-1997, Thomas G. Lane.
   5  * Modified 2003-2017 by Guido Vollbeding.
   6  * This file is part of the Independent JPEG Group's software.
   7  * For conditions of distribution and use, see the accompanying README file.
   8  *
   9  * This file contains initialization logic for the JPEG compressor.
  10  * This routine is in charge of selecting the modules to be executed and
  11  * making an initialization call to each one.
  12  *
  13  * Logically, this code belongs in jcmaster.c.  It's split out because
  14  * linking this routine implies linking the entire compression library.
  15  * For a transcoding-only application, we want to be able to use jcmaster.c
  16  * without linking in the whole library.
  17  */
  18 
  19 #define JPEG_INTERNALS
  20 #include "jinclude.h"
  21 #include "jpeglib.h"
  22 
  23 
  24 /*
  25  * Compute JPEG image dimensions and related values.
  26  * NOTE: this is exported for possible use by application.
  27  * Hence it mustn't do anything that can't be done twice.
  28  */
  29 
  30 GLOBAL(void)
  31 jpeg_calc_jpeg_dimensions (j_compress_ptr cinfo)
  32 /* Do computations that are needed before master selection phase */
  33 {
  34   /* Sanity check on input image dimensions to prevent overflow in
  35    * following calculations.
  36    * We do check jpeg_width and jpeg_height in initial_setup in jcmaster.c,
  37    * but image_width and image_height can come from arbitrary data,
  38    * and we need some space for multiplication by block_size.
  39    */
  40   if (((long) cinfo->image_width >> 24) || ((long) cinfo->image_height >> 24))
  41     ERREXIT1(cinfo, JERR_IMAGE_TOO_BIG, (unsigned int) JPEG_MAX_DIMENSION);
  42 
  43 #ifdef DCT_SCALING_SUPPORTED
  44 
  45   /* Compute actual JPEG image dimensions and DCT scaling choices. */
  46   if (cinfo->scale_num >= cinfo->scale_denom * cinfo->block_size) {
  47     /* Provide block_size/1 scaling */
  48     cinfo->jpeg_width = cinfo->image_width * cinfo->block_size;
  49     cinfo->jpeg_height = cinfo->image_height * cinfo->block_size;
  50     cinfo->min_DCT_h_scaled_size = 1;
  51     cinfo->min_DCT_v_scaled_size = 1;
  52   } else if (cinfo->scale_num * 2 >= cinfo->scale_denom * cinfo->block_size) {
  53     /* Provide block_size/2 scaling */
  54     cinfo->jpeg_width = (JDIMENSION)
  55       jdiv_round_up((long) cinfo->image_width * cinfo->block_size, 2L);
  56     cinfo->jpeg_height = (JDIMENSION)
  57       jdiv_round_up((long) cinfo->image_height * cinfo->block_size, 2L);
  58     cinfo->min_DCT_h_scaled_size = 2;
  59     cinfo->min_DCT_v_scaled_size = 2;
  60   } else if (cinfo->scale_num * 3 >= cinfo->scale_denom * cinfo->block_size) {
  61     /* Provide block_size/3 scaling */
  62     cinfo->jpeg_width = (JDIMENSION)
  63       jdiv_round_up((long) cinfo->image_width * cinfo->block_size, 3L);
  64     cinfo->jpeg_height = (JDIMENSION)
  65       jdiv_round_up((long) cinfo->image_height * cinfo->block_size, 3L);
  66     cinfo->min_DCT_h_scaled_size = 3;
  67     cinfo->min_DCT_v_scaled_size = 3;
  68   } else if (cinfo->scale_num * 4 >= cinfo->scale_denom * cinfo->block_size) {
  69     /* Provide block_size/4 scaling */
  70     cinfo->jpeg_width = (JDIMENSION)
  71       jdiv_round_up((long) cinfo->image_width * cinfo->block_size, 4L);
  72     cinfo->jpeg_height = (JDIMENSION)
  73       jdiv_round_up((long) cinfo->image_height * cinfo->block_size, 4L);
  74     cinfo->min_DCT_h_scaled_size = 4;
  75     cinfo->min_DCT_v_scaled_size = 4;
  76   } else if (cinfo->scale_num * 5 >= cinfo->scale_denom * cinfo->block_size) {
  77     /* Provide block_size/5 scaling */
  78     cinfo->jpeg_width = (JDIMENSION)
  79       jdiv_round_up((long) cinfo->image_width * cinfo->block_size, 5L);
  80     cinfo->jpeg_height = (JDIMENSION)
  81       jdiv_round_up((long) cinfo->image_height * cinfo->block_size, 5L);
  82     cinfo->min_DCT_h_scaled_size = 5;
  83     cinfo->min_DCT_v_scaled_size = 5;
  84   } else if (cinfo->scale_num * 6 >= cinfo->scale_denom * cinfo->block_size) {
  85     /* Provide block_size/6 scaling */
  86     cinfo->jpeg_width = (JDIMENSION)
  87       jdiv_round_up((long) cinfo->image_width * cinfo->block_size, 6L);
  88     cinfo->jpeg_height = (JDIMENSION)
  89       jdiv_round_up((long) cinfo->image_height * cinfo->block_size, 6L);
  90     cinfo->min_DCT_h_scaled_size = 6;
  91     cinfo->min_DCT_v_scaled_size = 6;
  92   } else if (cinfo->scale_num * 7 >= cinfo->scale_denom * cinfo->block_size) {
  93     /* Provide block_size/7 scaling */
  94     cinfo->jpeg_width = (JDIMENSION)
  95       jdiv_round_up((long) cinfo->image_width * cinfo->block_size, 7L);
  96     cinfo->jpeg_height = (JDIMENSION)
  97       jdiv_round_up((long) cinfo->image_height * cinfo->block_size, 7L);
  98     cinfo->min_DCT_h_scaled_size = 7;
  99     cinfo->min_DCT_v_scaled_size = 7;
 100   } else if (cinfo->scale_num * 8 >= cinfo->scale_denom * cinfo->block_size) {
 101     /* Provide block_size/8 scaling */
 102     cinfo->jpeg_width = (JDIMENSION)
 103       jdiv_round_up((long) cinfo->image_width * cinfo->block_size, 8L);
 104     cinfo->jpeg_height = (JDIMENSION)
 105       jdiv_round_up((long) cinfo->image_height * cinfo->block_size, 8L);
 106     cinfo->min_DCT_h_scaled_size = 8;
 107     cinfo->min_DCT_v_scaled_size = 8;
 108   } else if (cinfo->scale_num * 9 >= cinfo->scale_denom * cinfo->block_size) {
 109     /* Provide block_size/9 scaling */
 110     cinfo->jpeg_width = (JDIMENSION)
 111       jdiv_round_up((long) cinfo->image_width * cinfo->block_size, 9L);
 112     cinfo->jpeg_height = (JDIMENSION)
 113       jdiv_round_up((long) cinfo->image_height * cinfo->block_size, 9L);
 114     cinfo->min_DCT_h_scaled_size = 9;
 115     cinfo->min_DCT_v_scaled_size = 9;
 116   } else if (cinfo->scale_num * 10 >= cinfo->scale_denom * cinfo->block_size) {
 117     /* Provide block_size/10 scaling */
 118     cinfo->jpeg_width = (JDIMENSION)
 119       jdiv_round_up((long) cinfo->image_width * cinfo->block_size, 10L);
 120     cinfo->jpeg_height = (JDIMENSION)
 121       jdiv_round_up((long) cinfo->image_height * cinfo->block_size, 10L);
 122     cinfo->min_DCT_h_scaled_size = 10;
 123     cinfo->min_DCT_v_scaled_size = 10;
 124   } else if (cinfo->scale_num * 11 >= cinfo->scale_denom * cinfo->block_size) {
 125     /* Provide block_size/11 scaling */
 126     cinfo->jpeg_width = (JDIMENSION)
 127       jdiv_round_up((long) cinfo->image_width * cinfo->block_size, 11L);
 128     cinfo->jpeg_height = (JDIMENSION)
 129       jdiv_round_up((long) cinfo->image_height * cinfo->block_size, 11L);
 130     cinfo->min_DCT_h_scaled_size = 11;
 131     cinfo->min_DCT_v_scaled_size = 11;
 132   } else if (cinfo->scale_num * 12 >= cinfo->scale_denom * cinfo->block_size) {
 133     /* Provide block_size/12 scaling */
 134     cinfo->jpeg_width = (JDIMENSION)
 135       jdiv_round_up((long) cinfo->image_width * cinfo->block_size, 12L);
 136     cinfo->jpeg_height = (JDIMENSION)
 137       jdiv_round_up((long) cinfo->image_height * cinfo->block_size, 12L);
 138     cinfo->min_DCT_h_scaled_size = 12;
 139     cinfo->min_DCT_v_scaled_size = 12;
 140   } else if (cinfo->scale_num * 13 >= cinfo->scale_denom * cinfo->block_size) {
 141     /* Provide block_size/13 scaling */
 142     cinfo->jpeg_width = (JDIMENSION)
 143       jdiv_round_up((long) cinfo->image_width * cinfo->block_size, 13L);
 144     cinfo->jpeg_height = (JDIMENSION)
 145       jdiv_round_up((long) cinfo->image_height * cinfo->block_size, 13L);
 146     cinfo->min_DCT_h_scaled_size = 13;
 147     cinfo->min_DCT_v_scaled_size = 13;
 148   } else if (cinfo->scale_num * 14 >= cinfo->scale_denom * cinfo->block_size) {
 149     /* Provide block_size/14 scaling */
 150     cinfo->jpeg_width = (JDIMENSION)
 151       jdiv_round_up((long) cinfo->image_width * cinfo->block_size, 14L);
 152     cinfo->jpeg_height = (JDIMENSION)
 153       jdiv_round_up((long) cinfo->image_height * cinfo->block_size, 14L);
 154     cinfo->min_DCT_h_scaled_size = 14;
 155     cinfo->min_DCT_v_scaled_size = 14;
 156   } else if (cinfo->scale_num * 15 >= cinfo->scale_denom * cinfo->block_size) {
 157     /* Provide block_size/15 scaling */
 158     cinfo->jpeg_width = (JDIMENSION)
 159       jdiv_round_up((long) cinfo->image_width * cinfo->block_size, 15L);
 160     cinfo->jpeg_height = (JDIMENSION)
 161       jdiv_round_up((long) cinfo->image_height * cinfo->block_size, 15L);
 162     cinfo->min_DCT_h_scaled_size = 15;
 163     cinfo->min_DCT_v_scaled_size = 15;
 164   } else {
 165     /* Provide block_size/16 scaling */
 166     cinfo->jpeg_width = (JDIMENSION)
 167       jdiv_round_up((long) cinfo->image_width * cinfo->block_size, 16L);
 168     cinfo->jpeg_height = (JDIMENSION)
 169       jdiv_round_up((long) cinfo->image_height * cinfo->block_size, 16L);
 170     cinfo->min_DCT_h_scaled_size = 16;
 171     cinfo->min_DCT_v_scaled_size = 16;
 172   }
 173 
 174 #else /* !DCT_SCALING_SUPPORTED */
 175 
 176   /* Hardwire it to "no scaling" */
 177   cinfo->jpeg_width = cinfo->image_width;
 178   cinfo->jpeg_height = cinfo->image_height;
 179   cinfo->min_DCT_h_scaled_size = DCTSIZE;
 180   cinfo->min_DCT_v_scaled_size = DCTSIZE;
 181 
 182 #endif /* DCT_SCALING_SUPPORTED */
 183 }
 184 
 185 
 186 /*
 187  * Master selection of compression modules.
 188  * This is done once at the start of processing an image.  We determine
 189  * which modules will be used and give them appropriate initialization calls.
 190  */
 191 
 192 GLOBAL(void)
 193 jinit_compress_master (j_compress_ptr cinfo)
 194 {
 195   long samplesperrow;
 196   JDIMENSION jd_samplesperrow;
 197 
 198   /* For now, precision must match compiled-in value... */
 199   if (cinfo->data_precision != BITS_IN_JSAMPLE)
 200     ERREXIT1(cinfo, JERR_BAD_PRECISION, cinfo->data_precision);
 201 
 202   /* Sanity check on input image dimensions */
 203   if (cinfo->image_height <= 0 || cinfo->image_width <= 0 ||
 204       cinfo->input_components <= 0)
 205     ERREXIT(cinfo, JERR_EMPTY_IMAGE);
 206 
 207   /* Width of an input scanline must be representable as JDIMENSION. */
 208   samplesperrow = (long) cinfo->image_width * (long) cinfo->input_components;
 209   jd_samplesperrow = (JDIMENSION) samplesperrow;
 210   if ((long) jd_samplesperrow != samplesperrow)
 211     ERREXIT(cinfo, JERR_WIDTH_OVERFLOW);
 212 
 213   /* Compute JPEG image dimensions and related values. */
 214   jpeg_calc_jpeg_dimensions(cinfo);
 215 
 216   /* Initialize master control (includes parameter checking/processing) */
 217   jinit_c_master_control(cinfo, FALSE /* full compression */);
 218 
 219   /* Preprocessing */
 220   if (! cinfo->raw_data_in) {
 221     jinit_color_converter(cinfo);
 222     jinit_downsampler(cinfo);
 223     jinit_c_prep_controller(cinfo, FALSE /* never need full buffer here */);
 224   }
 225   /* Forward DCT */
 226   jinit_forward_dct(cinfo);
 227   /* Entropy encoding: either Huffman or arithmetic coding. */
 228   if (cinfo->arith_code)
 229     ERREXIT(cinfo, JERR_ARITH_NOTIMPL);
 230   else {
 231     jinit_huff_encoder(cinfo);
 232   }
 233 
 234   /* Need a full-image coefficient buffer in any multi-pass mode. */
 235   jinit_c_coef_controller(cinfo,
< prev index next >