tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

jdcoefct.h (2873B)


      1 /*
      2 * jdcoefct.h
      3 *
      4 * This file was part of the Independent JPEG Group's software:
      5 * Copyright (C) 1994-1997, Thomas G. Lane.
      6 * libjpeg-turbo Modifications:
      7 * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
      8 * Copyright (C) 2020, Google, Inc.
      9 * Copyright (C) 2022, D. R. Commander.
     10 * For conditions of distribution and use, see the accompanying README.ijg
     11 * file.
     12 */
     13 
     14 #define JPEG_INTERNALS
     15 #include "jpeglib.h"
     16 
     17 
     18 #if BITS_IN_JSAMPLE != 16 || defined(D_LOSSLESS_SUPPORTED)
     19 
     20 /* Block smoothing is only applicable for progressive JPEG, so: */
     21 #ifndef D_PROGRESSIVE_SUPPORTED
     22 #undef BLOCK_SMOOTHING_SUPPORTED
     23 #endif
     24 
     25 
     26 /* Private buffer controller object */
     27 
     28 typedef struct {
     29  struct jpeg_d_coef_controller pub; /* public fields */
     30 
     31  /* These variables keep track of the current location of the input side. */
     32  /* cinfo->input_iMCU_row is also used for this. */
     33  JDIMENSION MCU_ctr;           /* counts MCUs processed in current row */
     34  int MCU_vert_offset;          /* counts MCU rows within iMCU row */
     35  int MCU_rows_per_iMCU_row;    /* number of such rows needed */
     36 
     37  /* The output side's location is represented by cinfo->output_iMCU_row. */
     38 
     39  /* In single-pass modes, it's sufficient to buffer just one MCU.
     40   * We allocate a workspace of D_MAX_BLOCKS_IN_MCU coefficient blocks,
     41   * and let the entropy decoder write into that workspace each time.
     42   * In multi-pass modes, this array points to the current MCU's blocks
     43   * within the virtual arrays; it is used only by the input side.
     44   */
     45  JBLOCKROW MCU_buffer[D_MAX_BLOCKS_IN_MCU];
     46 
     47  /* Temporary workspace for one MCU */
     48  JCOEF *workspace;
     49 
     50 #ifdef D_MULTISCAN_FILES_SUPPORTED
     51  /* In multi-pass modes, we need a virtual block array for each component. */
     52  jvirt_barray_ptr whole_image[MAX_COMPONENTS];
     53 #endif
     54 
     55 #ifdef BLOCK_SMOOTHING_SUPPORTED
     56  /* When doing block smoothing, we latch coefficient Al values here */
     57  int *coef_bits_latch;
     58 #define SAVED_COEFS  10         /* we save coef_bits[0..9] */
     59 #endif
     60 } my_coef_controller;
     61 
     62 typedef my_coef_controller *my_coef_ptr;
     63 
     64 
     65 LOCAL(void)
     66 start_iMCU_row(j_decompress_ptr cinfo)
     67 /* Reset within-iMCU-row counters for a new row (input side) */
     68 {
     69  my_coef_ptr coef = (my_coef_ptr)cinfo->coef;
     70 
     71  /* In an interleaved scan, an MCU row is the same as an iMCU row.
     72   * In a noninterleaved scan, an iMCU row has v_samp_factor MCU rows.
     73   * But at the bottom of the image, process only what's left.
     74   */
     75  if (cinfo->comps_in_scan > 1) {
     76    coef->MCU_rows_per_iMCU_row = 1;
     77  } else {
     78    if (cinfo->input_iMCU_row < (cinfo->total_iMCU_rows - 1))
     79      coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->v_samp_factor;
     80    else
     81      coef->MCU_rows_per_iMCU_row = cinfo->cur_comp_info[0]->last_row_height;
     82  }
     83 
     84  coef->MCU_ctr = 0;
     85  coef->MCU_vert_offset = 0;
     86 }
     87 
     88 #endif /* BITS_IN_JSAMPLE != 16 || defined(D_LOSSLESS_SUPPORTED) */