Replace INT32 with a new internal datatype (JLONG)

These days, INT32 is a commonly-defined datatype in system headers.  We
cannot eliminate the definition of that datatype from jmorecfg.h, since
the INT32 typedef has technically been part of the libjpeg API since
version 5 (1994.)  However, using INT32 internally is risky, because the
inclusion of a particular header (Xmd.h, for instance) could change the
definition of INT32 from long to int on 64-bit platforms and thus change
the internal behavior of libjpeg-turbo in unexpected ways (for instance,
failing to correctly set __INT32_IS_ACTUALLY_LONG to match the INT32
typedef-- perhaps as a result of including the wrong version of
jpeglib.h-- could cause libjpeg-turbo to produce incorrect results.)

The library has always been built in environments in which INT32 is
effectively long (on Windows, long is always 32-bit, so effectively it's
the same as int), so it makes sense to turn INT32 into an explicitly
long datatype.  This ensures that libjpeg-turbo will always behave
consistently, regardless of the headers included at compile time.

Addresses a concern expressed in #26.
This commit is contained in:
DRC
2015-10-14 17:32:39 -05:00
parent 250c887763
commit 1e32fe3113
38 changed files with 478 additions and 447 deletions

View File

@@ -431,7 +431,7 @@ METHODDEF(boolean)
print_text_marker (j_decompress_ptr cinfo) print_text_marker (j_decompress_ptr cinfo)
{ {
boolean traceit = (cinfo->err->trace_level >= 1); boolean traceit = (cinfo->err->trace_level >= 1);
INT32 length; long length;
unsigned int ch; unsigned int ch;
unsigned int lastch = 0; unsigned int lastch = 0;

View File

@@ -1,8 +1,10 @@
/* /*
* jaricom.c * jaricom.c
* *
* This file was part of the Independent JPEG Group's software:
* Developed 1997-2009 by Guido Vollbeding. * Developed 1997-2009 by Guido Vollbeding.
* This file is part of the Independent JPEG Group's software. * libjpeg-turbo Modifications:
* Copyright (C) 2015, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg * For conditions of distribution and use, see the accompanying README.ijg
* file. * file.
* *
@@ -19,7 +21,7 @@
#include "jpeglib.h" #include "jpeglib.h"
/* The following #define specifies the packing of the four components /* The following #define specifies the packing of the four components
* into the compact INT32 representation. * into the compact JLONG representation.
* Note that this formula must match the actual arithmetic encoder * Note that this formula must match the actual arithmetic encoder
* and decoder implementation. The implementation has to be changed * and decoder implementation. The implementation has to be changed
* if this formula is changed. * if this formula is changed.
@@ -27,9 +29,9 @@
* implementation (jbig_tab.c). * implementation (jbig_tab.c).
*/ */
#define V(i,a,b,c,d) (((INT32)a << 16) | ((INT32)c << 8) | ((INT32)d << 7) | b) #define V(i,a,b,c,d) (((JLONG)a << 16) | ((JLONG)c << 8) | ((JLONG)d << 7) | b)
const INT32 jpeg_aritab[113+1] = { const JLONG jpeg_aritab[113+1] = {
/* /*
* Index, Qe_Value, Next_Index_LPS, Next_Index_MPS, Switch_MPS * Index, Qe_Value, Next_Index_LPS, Next_Index_MPS, Switch_MPS
*/ */

View File

@@ -3,8 +3,8 @@
* *
* This file was part of the Independent JPEG Group's software: * This file was part of the Independent JPEG Group's software:
* Developed 1997-2009 by Guido Vollbeding. * Developed 1997-2009 by Guido Vollbeding.
* It was modified by The libjpeg-turbo Project to include only code relevant * libjpeg-turbo Modifications:
* to libjpeg-turbo. * Copyright (C) 2015, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg * For conditions of distribution and use, see the accompanying README.ijg
* file. * file.
* *
@@ -26,10 +26,10 @@
typedef struct { typedef struct {
struct jpeg_entropy_encoder pub; /* public fields */ struct jpeg_entropy_encoder pub; /* public fields */
INT32 c; /* C register, base of coding interval, layout as in sec. D.1.3 */ JLONG c; /* C register, base of coding interval, layout as in sec. D.1.3 */
INT32 a; /* A register, normalized size of coding interval */ JLONG a; /* A register, normalized size of coding interval */
INT32 sc; /* counter for stacked 0xFF values which might overflow */ JLONG sc; /* counter for stacked 0xFF values which might overflow */
INT32 zc; /* counter for pending 0x00 output values which might * JLONG zc; /* counter for pending 0x00 output values which might *
* be discarded at the end ("Pacman" termination) */ * be discarded at the end ("Pacman" termination) */
int ct; /* bit shift counter, determines when next byte will be written */ int ct; /* bit shift counter, determines when next byte will be written */
int buffer; /* buffer for most recent output byte != 0xFF */ int buffer; /* buffer for most recent output byte != 0xFF */
@@ -98,8 +98,8 @@ typedef arith_entropy_encoder * arith_entropy_ptr;
#define CALCULATE_SPECTRAL_CONDITIONING #define CALCULATE_SPECTRAL_CONDITIONING
*/ */
/* IRIGHT_SHIFT is like RIGHT_SHIFT, but works on int rather than INT32. /* IRIGHT_SHIFT is like RIGHT_SHIFT, but works on int rather than JLONG.
* We assume that int right shift is unsigned if INT32 right shift is, * We assume that int right shift is unsigned if JLONG right shift is,
* which should be safe. * which should be safe.
*/ */
@@ -136,7 +136,7 @@ METHODDEF(void)
finish_pass (j_compress_ptr cinfo) finish_pass (j_compress_ptr cinfo)
{ {
arith_entropy_ptr e = (arith_entropy_ptr) cinfo->entropy; arith_entropy_ptr e = (arith_entropy_ptr) cinfo->entropy;
INT32 temp; JLONG temp;
/* Section D.1.8: Termination of encoding */ /* Section D.1.8: Termination of encoding */
@@ -223,7 +223,7 @@ arith_encode (j_compress_ptr cinfo, unsigned char *st, int val)
{ {
register arith_entropy_ptr e = (arith_entropy_ptr) cinfo->entropy; register arith_entropy_ptr e = (arith_entropy_ptr) cinfo->entropy;
register unsigned char nl, nm; register unsigned char nl, nm;
register INT32 qe, temp; register JLONG qe, temp;
register int sv; register int sv;
/* Fetch values from our compact representation of Table D.2: /* Fetch values from our compact representation of Table D.2:

View File

@@ -4,7 +4,7 @@
* This file was part of the Independent JPEG Group's software: * This file was part of the Independent JPEG Group's software:
* Copyright (C) 1991-1996, Thomas G. Lane. * Copyright (C) 1991-1996, Thomas G. Lane.
* libjpeg-turbo Modifications: * libjpeg-turbo Modifications:
* Copyright (C) 2009-2012, D. R. Commander. * Copyright (C) 2009-2012, 2015, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg * For conditions of distribution and use, see the accompanying README.ijg
* file. * file.
* *
@@ -35,7 +35,7 @@ rgb_ycc_convert_internal (j_compress_ptr cinfo,
{ {
my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
register int r, g, b; register int r, g, b;
register INT32 * ctab = cconvert->rgb_ycc_tab; register JLONG * ctab = cconvert->rgb_ycc_tab;
register JSAMPROW inptr; register JSAMPROW inptr;
register JSAMPROW outptr0, outptr1, outptr2; register JSAMPROW outptr0, outptr1, outptr2;
register JDIMENSION col; register JDIMENSION col;
@@ -92,7 +92,7 @@ rgb_gray_convert_internal (j_compress_ptr cinfo,
{ {
my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
register int r, g, b; register int r, g, b;
register INT32 * ctab = cconvert->rgb_ycc_tab; register JLONG * ctab = cconvert->rgb_ycc_tab;
register JSAMPROW inptr; register JSAMPROW inptr;
register JSAMPROW outptr; register JSAMPROW outptr;
register JDIMENSION col; register JDIMENSION col;

View File

@@ -26,7 +26,7 @@ typedef struct {
struct jpeg_color_converter pub; /* public fields */ struct jpeg_color_converter pub; /* public fields */
/* Private state for RGB->YCC conversion */ /* Private state for RGB->YCC conversion */
INT32 * rgb_ycc_tab; /* => table for RGB to YCbCr conversion */ JLONG * rgb_ycc_tab; /* => table for RGB to YCbCr conversion */
} my_color_converter; } my_color_converter;
typedef my_color_converter * my_cconvert_ptr; typedef my_color_converter * my_cconvert_ptr;
@@ -63,9 +63,9 @@ typedef my_color_converter * my_cconvert_ptr;
*/ */
#define SCALEBITS 16 /* speediest right-shift on some machines */ #define SCALEBITS 16 /* speediest right-shift on some machines */
#define CBCR_OFFSET ((INT32) CENTERJSAMPLE << SCALEBITS) #define CBCR_OFFSET ((JLONG) CENTERJSAMPLE << SCALEBITS)
#define ONE_HALF ((INT32) 1 << (SCALEBITS-1)) #define ONE_HALF ((JLONG) 1 << (SCALEBITS-1))
#define FIX(x) ((INT32) ((x) * (1L<<SCALEBITS) + 0.5)) #define FIX(x) ((JLONG) ((x) * (1L<<SCALEBITS) + 0.5))
/* We allocate one big table and divide it up into eight parts, instead of /* We allocate one big table and divide it up into eight parts, instead of
* doing eight alloc_small requests. This lets us use a single table base * doing eight alloc_small requests. This lets us use a single table base
@@ -198,13 +198,13 @@ METHODDEF(void)
rgb_ycc_start (j_compress_ptr cinfo) rgb_ycc_start (j_compress_ptr cinfo)
{ {
my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
INT32 * rgb_ycc_tab; JLONG * rgb_ycc_tab;
INT32 i; JLONG i;
/* Allocate and fill in the conversion tables. */ /* Allocate and fill in the conversion tables. */
cconvert->rgb_ycc_tab = rgb_ycc_tab = (INT32 *) cconvert->rgb_ycc_tab = rgb_ycc_tab = (JLONG *)
(*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
(TABLE_SIZE * sizeof(INT32))); (TABLE_SIZE * sizeof(JLONG)));
for (i = 0; i <= MAXJSAMPLE; i++) { for (i = 0; i <= MAXJSAMPLE; i++) {
rgb_ycc_tab[i+R_Y_OFF] = FIX(0.29900) * i; rgb_ycc_tab[i+R_Y_OFF] = FIX(0.29900) * i;
@@ -382,7 +382,7 @@ cmyk_ycck_convert (j_compress_ptr cinfo,
{ {
my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
register int r, g, b; register int r, g, b;
register INT32 * ctab = cconvert->rgb_ycc_tab; register JLONG * ctab = cconvert->rgb_ycc_tab;
register JSAMPROW inptr; register JSAMPROW inptr;
register JSAMPROW outptr0, outptr1, outptr2, outptr3; register JSAMPROW outptr0, outptr1, outptr2, outptr3;
register JDIMENSION col; register JDIMENSION col;

View File

@@ -302,15 +302,15 @@ start_pass_fdctmgr (j_compress_ptr cinfo)
for (i = 0; i < DCTSIZE2; i++) { for (i = 0; i < DCTSIZE2; i++) {
#if BITS_IN_JSAMPLE == 8 #if BITS_IN_JSAMPLE == 8
if(!compute_reciprocal( if(!compute_reciprocal(
DESCALE(MULTIPLY16V16((INT32) qtbl->quantval[i], DESCALE(MULTIPLY16V16((JLONG) qtbl->quantval[i],
(INT32) aanscales[i]), (JLONG) aanscales[i]),
CONST_BITS-3), &dtbl[i]) CONST_BITS-3), &dtbl[i])
&& fdct->quantize == jsimd_quantize) && fdct->quantize == jsimd_quantize)
fdct->quantize = quantize; fdct->quantize = quantize;
#else #else
dtbl[i] = (DCTELEM) dtbl[i] = (DCTELEM)
DESCALE(MULTIPLY16V16((INT32) qtbl->quantval[i], DESCALE(MULTIPLY16V16((JLONG) qtbl->quantval[i],
(INT32) aanscales[i]), (JLONG) aanscales[i]),
CONST_BITS-3); CONST_BITS-3);
#endif #endif
} }

View File

@@ -269,7 +269,7 @@ jpeg_make_c_derived_tbl (j_compress_ptr cinfo, boolean isDC, int tblno,
/* code is now 1 more than the last code used for codelength si; but /* code is now 1 more than the last code used for codelength si; but
* it must still fit in si bits, since no code is allowed to be all ones. * it must still fit in si bits, since no code is allowed to be all ones.
*/ */
if (((INT32) code) >= (((INT32) 1) << si)) if (((JLONG) code) >= (((JLONG) 1) << si))
ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
code <<= 1; code <<= 1;
si++; si++;
@@ -389,7 +389,7 @@ dump_buffer (working_state * state)
} }
#define EMIT_CODE(code, size) { \ #define EMIT_CODE(code, size) { \
temp2 &= (((INT32) 1)<<nbits) - 1; \ temp2 &= (((JLONG) 1)<<nbits) - 1; \
CHECKBUF31() \ CHECKBUF31() \
PUT_BITS(code, size) \ PUT_BITS(code, size) \
PUT_BITS(temp2, nbits) \ PUT_BITS(temp2, nbits) \
@@ -403,7 +403,7 @@ dump_buffer (working_state * state)
} }
#define EMIT_CODE(code, size) { \ #define EMIT_CODE(code, size) { \
temp2 &= (((INT32) 1)<<nbits) - 1; \ temp2 &= (((JLONG) 1)<<nbits) - 1; \
PUT_BITS(code, size) \ PUT_BITS(code, size) \
CHECKBUF15() \ CHECKBUF15() \
PUT_BITS(temp2, nbits) \ PUT_BITS(temp2, nbits) \
@@ -521,7 +521,7 @@ encode_one_block (working_state * state, JCOEFPTR block, int last_dc_val,
EMIT_BITS(code, size) EMIT_BITS(code, size)
/* Mask off any extra bits in code */ /* Mask off any extra bits in code */
temp2 &= (((INT32) 1)<<nbits) - 1; temp2 &= (((JLONG) 1)<<nbits) - 1;
/* Emit that number of bits of the value, if positive, */ /* Emit that number of bits of the value, if positive, */
/* or the complement of its magnitude, if negative. */ /* or the complement of its magnitude, if negative. */

View File

@@ -3,8 +3,8 @@
* *
* This file was part of the Independent JPEG Group's software: * This file was part of the Independent JPEG Group's software:
* Copyright (C) 1995-1997, Thomas G. Lane. * Copyright (C) 1995-1997, Thomas G. Lane.
* It was modified by The libjpeg-turbo Project to include only code relevant * libjpeg-turbo Modifications:
* to libjpeg-turbo. * Copyright (C) 2015, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg * For conditions of distribution and use, see the accompanying README.ijg
* file. * file.
* *
@@ -35,7 +35,7 @@ typedef struct {
*/ */
JOCTET * next_output_byte; /* => next byte to write in buffer */ JOCTET * next_output_byte; /* => next byte to write in buffer */
size_t free_in_buffer; /* # of byte spaces remaining in buffer */ size_t free_in_buffer; /* # of byte spaces remaining in buffer */
INT32 put_buffer; /* current bit-accumulation buffer */ JLONG put_buffer; /* current bit-accumulation buffer */
int put_bits; /* # of bits now in it */ int put_bits; /* # of bits now in it */
j_compress_ptr cinfo; /* link to cinfo (needed for dump_buffer) */ j_compress_ptr cinfo; /* link to cinfo (needed for dump_buffer) */
@@ -72,8 +72,8 @@ typedef phuff_entropy_encoder * phuff_entropy_ptr;
#define MAX_CORR_BITS 1000 /* Max # of correction bits I can buffer */ #define MAX_CORR_BITS 1000 /* Max # of correction bits I can buffer */
/* IRIGHT_SHIFT is like RIGHT_SHIFT, but works on int rather than INT32. /* IRIGHT_SHIFT is like RIGHT_SHIFT, but works on int rather than JLONG.
* We assume that int right shift is unsigned if INT32 right shift is, * We assume that int right shift is unsigned if JLONG right shift is,
* which should be safe. * which should be safe.
*/ */
@@ -231,7 +231,7 @@ emit_bits (phuff_entropy_ptr entropy, unsigned int code, int size)
/* Emit some bits, unless we are in gather mode */ /* Emit some bits, unless we are in gather mode */
{ {
/* This routine is heavily used, so it's worth coding tightly. */ /* This routine is heavily used, so it's worth coding tightly. */
register INT32 put_buffer = (INT32) code; register JLONG put_buffer = (JLONG) code;
register int put_bits = entropy->put_bits; register int put_bits = entropy->put_bits;
/* if size is 0, caller used an invalid Huffman table entry */ /* if size is 0, caller used an invalid Huffman table entry */
@@ -241,7 +241,7 @@ emit_bits (phuff_entropy_ptr entropy, unsigned int code, int size)
if (entropy->gather_statistics) if (entropy->gather_statistics)
return; /* do nothing if we're only getting stats */ return; /* do nothing if we're only getting stats */
put_buffer &= (((INT32) 1)<<size) - 1; /* mask off any extra bits in code */ put_buffer &= (((JLONG) 1)<<size) - 1; /* mask off any extra bits in code */
put_bits += size; /* new number of bits in buffer */ put_bits += size; /* new number of bits in buffer */

View File

@@ -6,6 +6,7 @@
* libjpeg-turbo Modifications: * libjpeg-turbo Modifications:
* Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
* Copyright (C) 2014, MIPS Technologies, Inc., California * Copyright (C) 2014, MIPS Technologies, Inc., California
* Copyright (C) 2015, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg * For conditions of distribution and use, see the accompanying README.ijg
* file. * file.
* *
@@ -150,7 +151,7 @@ int_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr,
JDIMENSION outcol, outcol_h; /* outcol_h == outcol*h_expand */ JDIMENSION outcol, outcol_h; /* outcol_h == outcol*h_expand */
JDIMENSION output_cols = compptr->width_in_blocks * DCTSIZE; JDIMENSION output_cols = compptr->width_in_blocks * DCTSIZE;
JSAMPROW inptr, outptr; JSAMPROW inptr, outptr;
INT32 outvalue; JLONG outvalue;
h_expand = cinfo->max_h_samp_factor / compptr->h_samp_factor; h_expand = cinfo->max_h_samp_factor / compptr->h_samp_factor;
v_expand = cinfo->max_v_samp_factor / compptr->v_samp_factor; v_expand = cinfo->max_v_samp_factor / compptr->v_samp_factor;
@@ -173,7 +174,7 @@ int_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr,
for (v = 0; v < v_expand; v++) { for (v = 0; v < v_expand; v++) {
inptr = input_data[inrow+v] + outcol_h; inptr = input_data[inrow+v] + outcol_h;
for (h = 0; h < h_expand; h++) { for (h = 0; h < h_expand; h++) {
outvalue += (INT32) GETJSAMPLE(*inptr++); outvalue += (JLONG) GETJSAMPLE(*inptr++);
} }
} }
*outptr++ = (JSAMPLE) ((outvalue + numpix2) / numpix); *outptr++ = (JSAMPLE) ((outvalue + numpix2) / numpix);
@@ -302,7 +303,7 @@ h2v2_smooth_downsample (j_compress_ptr cinfo, jpeg_component_info * compptr,
JDIMENSION colctr; JDIMENSION colctr;
JDIMENSION output_cols = compptr->width_in_blocks * DCTSIZE; JDIMENSION output_cols = compptr->width_in_blocks * DCTSIZE;
register JSAMPROW inptr0, inptr1, above_ptr, below_ptr, outptr; register JSAMPROW inptr0, inptr1, above_ptr, below_ptr, outptr;
INT32 membersum, neighsum, memberscale, neighscale; JLONG membersum, neighsum, memberscale, neighscale;
/* Expand input data enough to let all the output samples be generated /* Expand input data enough to let all the output samples be generated
* by the standard loop. Special-casing padded output would be more * by the standard loop. Special-casing padded output would be more
@@ -402,7 +403,7 @@ fullsize_smooth_downsample (j_compress_ptr cinfo, jpeg_component_info *compptr,
JDIMENSION colctr; JDIMENSION colctr;
JDIMENSION output_cols = compptr->width_in_blocks * DCTSIZE; JDIMENSION output_cols = compptr->width_in_blocks * DCTSIZE;
register JSAMPROW inptr, above_ptr, below_ptr, outptr; register JSAMPROW inptr, above_ptr, below_ptr, outptr;
INT32 membersum, neighsum, memberscale, neighscale; JLONG membersum, neighsum, memberscale, neighscale;
int colsum, lastcolsum, nextcolsum; int colsum, lastcolsum, nextcolsum;
/* Expand input data enough to let all the output samples be generated /* Expand input data enough to let all the output samples be generated

View File

@@ -26,8 +26,8 @@
typedef struct { typedef struct {
struct jpeg_entropy_decoder pub; /* public fields */ struct jpeg_entropy_decoder pub; /* public fields */
INT32 c; /* C register, base of coding interval + input bit buffer */ JLONG c; /* C register, base of coding interval + input bit buffer */
INT32 a; /* A register, normalized size of coding interval */ JLONG a; /* A register, normalized size of coding interval */
int ct; /* bit shift counter, # of bits left in bit buffer part of C */ int ct; /* bit shift counter, # of bits left in bit buffer part of C */
/* init: ct = -16 */ /* init: ct = -16 */
/* run: ct = 0..7 */ /* run: ct = 0..7 */
@@ -110,7 +110,7 @@ arith_decode (j_decompress_ptr cinfo, unsigned char *st)
{ {
register arith_entropy_ptr e = (arith_entropy_ptr) cinfo->entropy; register arith_entropy_ptr e = (arith_entropy_ptr) cinfo->entropy;
register unsigned char nl, nm; register unsigned char nl, nm;
register INT32 qe, temp; register JLONG qe, temp;
register int sv, data; register int sv, data;
/* Renormalization & data input per section D.2.6 */ /* Renormalization & data input per section D.2.6 */

View File

@@ -5,7 +5,7 @@
* Copyright (C) 1994-1997, Thomas G. Lane. * Copyright (C) 1994-1997, Thomas G. Lane.
* libjpeg-turbo Modifications: * libjpeg-turbo Modifications:
* Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
* Copyright (C) 2010, D. R. Commander. * Copyright (C) 2010, 2015, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg * For conditions of distribution and use, see the accompanying README.ijg
* file. * file.
* *
@@ -411,7 +411,7 @@ decompress_smooth_data (j_decompress_ptr cinfo, JSAMPIMAGE output_buf)
JCOEF * workspace; JCOEF * workspace;
int *coef_bits; int *coef_bits;
JQUANT_TBL *quanttbl; JQUANT_TBL *quanttbl;
INT32 Q00,Q01,Q02,Q10,Q11,Q20, num; JLONG Q00,Q01,Q02,Q10,Q11,Q20, num;
int DC1,DC2,DC3,DC4,DC5,DC6,DC7,DC8,DC9; int DC1,DC2,DC3,DC4,DC5,DC6,DC7,DC8,DC9;
int Al, pred; int Al, pred;

View File

@@ -5,7 +5,7 @@
* Copyright (C) 1991-1997, Thomas G. Lane. * Copyright (C) 1991-1997, Thomas G. Lane.
* Modifications: * Modifications:
* Copyright (C) 2013, Linaro Limited. * Copyright (C) 2013, Linaro Limited.
* Copyright (C) 2014, D. R. Commander. * Copyright (C) 2014-2015, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg * For conditions of distribution and use, see the accompanying README.ijg
* file. * file.
* *
@@ -31,12 +31,12 @@ ycc_rgb565_convert_internal (j_decompress_ptr cinfo,
register JSAMPLE * range_limit = cinfo->sample_range_limit; register JSAMPLE * range_limit = cinfo->sample_range_limit;
register int * Crrtab = cconvert->Cr_r_tab; register int * Crrtab = cconvert->Cr_r_tab;
register int * Cbbtab = cconvert->Cb_b_tab; register int * Cbbtab = cconvert->Cb_b_tab;
register INT32 * Crgtab = cconvert->Cr_g_tab; register JLONG * Crgtab = cconvert->Cr_g_tab;
register INT32 * Cbgtab = cconvert->Cb_g_tab; register JLONG * Cbgtab = cconvert->Cb_g_tab;
SHIFT_TEMPS SHIFT_TEMPS
while (--num_rows >= 0) { while (--num_rows >= 0) {
INT32 rgb; JLONG rgb;
unsigned int r, g, b; unsigned int r, g, b;
inptr0 = input_buf[0][input_row]; inptr0 = input_buf[0][input_row];
inptr1 = input_buf[1][input_row]; inptr1 = input_buf[1][input_row];
@@ -110,13 +110,13 @@ ycc_rgb565D_convert_internal (j_decompress_ptr cinfo,
register JSAMPLE * range_limit = cinfo->sample_range_limit; register JSAMPLE * range_limit = cinfo->sample_range_limit;
register int * Crrtab = cconvert->Cr_r_tab; register int * Crrtab = cconvert->Cr_r_tab;
register int * Cbbtab = cconvert->Cb_b_tab; register int * Cbbtab = cconvert->Cb_b_tab;
register INT32 * Crgtab = cconvert->Cr_g_tab; register JLONG * Crgtab = cconvert->Cr_g_tab;
register INT32 * Cbgtab = cconvert->Cb_g_tab; register JLONG * Cbgtab = cconvert->Cb_g_tab;
INT32 d0 = dither_matrix[cinfo->output_scanline & DITHER_MASK]; JLONG d0 = dither_matrix[cinfo->output_scanline & DITHER_MASK];
SHIFT_TEMPS SHIFT_TEMPS
while (--num_rows >= 0) { while (--num_rows >= 0) {
INT32 rgb; JLONG rgb;
unsigned int r, g, b; unsigned int r, g, b;
inptr0 = input_buf[0][input_row]; inptr0 = input_buf[0][input_row];
@@ -193,7 +193,7 @@ rgb_rgb565_convert_internal (j_decompress_ptr cinfo,
SHIFT_TEMPS SHIFT_TEMPS
while (--num_rows >= 0) { while (--num_rows >= 0) {
INT32 rgb; JLONG rgb;
unsigned int r, g, b; unsigned int r, g, b;
inptr0 = input_buf[0][input_row]; inptr0 = input_buf[0][input_row];
@@ -246,11 +246,11 @@ rgb_rgb565D_convert_internal (j_decompress_ptr cinfo,
register JDIMENSION col; register JDIMENSION col;
register JSAMPLE * range_limit = cinfo->sample_range_limit; register JSAMPLE * range_limit = cinfo->sample_range_limit;
JDIMENSION num_cols = cinfo->output_width; JDIMENSION num_cols = cinfo->output_width;
INT32 d0 = dither_matrix[cinfo->output_scanline & DITHER_MASK]; JLONG d0 = dither_matrix[cinfo->output_scanline & DITHER_MASK];
SHIFT_TEMPS SHIFT_TEMPS
while (--num_rows >= 0) { while (--num_rows >= 0) {
INT32 rgb; JLONG rgb;
unsigned int r, g, b; unsigned int r, g, b;
inptr0 = input_buf[0][input_row]; inptr0 = input_buf[0][input_row];
@@ -305,7 +305,7 @@ gray_rgb565_convert_internal (j_decompress_ptr cinfo,
JDIMENSION num_cols = cinfo->output_width; JDIMENSION num_cols = cinfo->output_width;
while (--num_rows >= 0) { while (--num_rows >= 0) {
INT32 rgb; JLONG rgb;
unsigned int g; unsigned int g;
inptr = input_buf[0][input_row++]; inptr = input_buf[0][input_row++];
@@ -344,10 +344,10 @@ gray_rgb565D_convert_internal (j_decompress_ptr cinfo,
register JDIMENSION col; register JDIMENSION col;
register JSAMPLE * range_limit = cinfo->sample_range_limit; register JSAMPLE * range_limit = cinfo->sample_range_limit;
JDIMENSION num_cols = cinfo->output_width; JDIMENSION num_cols = cinfo->output_width;
INT32 d0 = dither_matrix[cinfo->output_scanline & DITHER_MASK]; JLONG d0 = dither_matrix[cinfo->output_scanline & DITHER_MASK];
while (--num_rows >= 0) { while (--num_rows >= 0) {
INT32 rgb; JLONG rgb;
unsigned int g; unsigned int g;
inptr = input_buf[0][input_row++]; inptr = input_buf[0][input_row++];

View File

@@ -4,7 +4,7 @@
* This file was part of the Independent JPEG Group's software: * This file was part of the Independent JPEG Group's software:
* Copyright (C) 1991-1997, Thomas G. Lane. * Copyright (C) 1991-1997, Thomas G. Lane.
* libjpeg-turbo Modifications: * libjpeg-turbo Modifications:
* Copyright (C) 2009, 2011, D. R. Commander. * Copyright (C) 2009, 2011, 2015, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg * For conditions of distribution and use, see the accompanying README.ijg
* file. * file.
* *
@@ -42,8 +42,8 @@ ycc_rgb_convert_internal (j_decompress_ptr cinfo,
register JSAMPLE * range_limit = cinfo->sample_range_limit; register JSAMPLE * range_limit = cinfo->sample_range_limit;
register int * Crrtab = cconvert->Cr_r_tab; register int * Crrtab = cconvert->Cr_r_tab;
register int * Cbbtab = cconvert->Cb_b_tab; register int * Cbbtab = cconvert->Cb_b_tab;
register INT32 * Crgtab = cconvert->Cr_g_tab; register JLONG * Crgtab = cconvert->Cr_g_tab;
register INT32 * Cbgtab = cconvert->Cb_g_tab; register JLONG * Cbgtab = cconvert->Cb_g_tab;
SHIFT_TEMPS SHIFT_TEMPS
while (--num_rows >= 0) { while (--num_rows >= 0) {

View File

@@ -29,11 +29,11 @@ typedef struct {
/* Private state for YCC->RGB conversion */ /* Private state for YCC->RGB conversion */
int * Cr_r_tab; /* => table for Cr to R conversion */ int * Cr_r_tab; /* => table for Cr to R conversion */
int * Cb_b_tab; /* => table for Cb to B conversion */ int * Cb_b_tab; /* => table for Cb to B conversion */
INT32 * Cr_g_tab; /* => table for Cr to G conversion */ JLONG * Cr_g_tab; /* => table for Cr to G conversion */
INT32 * Cb_g_tab; /* => table for Cb to G conversion */ JLONG * Cb_g_tab; /* => table for Cb to G conversion */
/* Private state for RGB->Y conversion */ /* Private state for RGB->Y conversion */
INT32 * rgb_y_tab; /* => table for RGB to Y conversion */ JLONG * rgb_y_tab; /* => table for RGB to Y conversion */
} my_color_deconverter; } my_color_deconverter;
typedef my_color_deconverter * my_cconvert_ptr; typedef my_color_deconverter * my_cconvert_ptr;
@@ -74,8 +74,8 @@ typedef my_color_deconverter * my_cconvert_ptr;
*/ */
#define SCALEBITS 16 /* speediest right-shift on some machines */ #define SCALEBITS 16 /* speediest right-shift on some machines */
#define ONE_HALF ((INT32) 1 << (SCALEBITS-1)) #define ONE_HALF ((JLONG) 1 << (SCALEBITS-1))
#define FIX(x) ((INT32) ((x) * (1L<<SCALEBITS) + 0.5)) #define FIX(x) ((JLONG) ((x) * (1L<<SCALEBITS) + 0.5))
/* We allocate one big table for RGB->Y conversion and divide it up into /* We allocate one big table for RGB->Y conversion and divide it up into
* three parts, instead of doing three alloc_small requests. This lets us * three parts, instead of doing three alloc_small requests. This lets us
@@ -212,7 +212,7 @@ build_ycc_rgb_table (j_decompress_ptr cinfo)
{ {
my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
int i; int i;
INT32 x; JLONG x;
SHIFT_TEMPS SHIFT_TEMPS
cconvert->Cr_r_tab = (int *) cconvert->Cr_r_tab = (int *)
@@ -221,12 +221,12 @@ build_ycc_rgb_table (j_decompress_ptr cinfo)
cconvert->Cb_b_tab = (int *) cconvert->Cb_b_tab = (int *)
(*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
(MAXJSAMPLE+1) * sizeof(int)); (MAXJSAMPLE+1) * sizeof(int));
cconvert->Cr_g_tab = (INT32 *) cconvert->Cr_g_tab = (JLONG *)
(*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
(MAXJSAMPLE+1) * sizeof(INT32)); (MAXJSAMPLE+1) * sizeof(JLONG));
cconvert->Cb_g_tab = (INT32 *) cconvert->Cb_g_tab = (JLONG *)
(*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
(MAXJSAMPLE+1) * sizeof(INT32)); (MAXJSAMPLE+1) * sizeof(JLONG));
for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) { for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) {
/* i is the actual input pixel value, in the range 0..MAXJSAMPLE */ /* i is the actual input pixel value, in the range 0..MAXJSAMPLE */
@@ -303,13 +303,13 @@ LOCAL(void)
build_rgb_y_table (j_decompress_ptr cinfo) build_rgb_y_table (j_decompress_ptr cinfo)
{ {
my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
INT32 * rgb_y_tab; JLONG * rgb_y_tab;
INT32 i; JLONG i;
/* Allocate and fill in the conversion tables. */ /* Allocate and fill in the conversion tables. */
cconvert->rgb_y_tab = rgb_y_tab = (INT32 *) cconvert->rgb_y_tab = rgb_y_tab = (JLONG *)
(*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
(TABLE_SIZE * sizeof(INT32))); (TABLE_SIZE * sizeof(JLONG)));
for (i = 0; i <= MAXJSAMPLE; i++) { for (i = 0; i <= MAXJSAMPLE; i++) {
rgb_y_tab[i+R_Y_OFF] = FIX(0.29900) * i; rgb_y_tab[i+R_Y_OFF] = FIX(0.29900) * i;
@@ -330,7 +330,7 @@ rgb_gray_convert (j_decompress_ptr cinfo,
{ {
my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert; my_cconvert_ptr cconvert = (my_cconvert_ptr) cinfo->cconvert;
register int r, g, b; register int r, g, b;
register INT32 * ctab = cconvert->rgb_y_tab; register JLONG * ctab = cconvert->rgb_y_tab;
register JSAMPROW outptr; register JSAMPROW outptr;
register JSAMPROW inptr0, inptr1, inptr2; register JSAMPROW inptr0, inptr1, inptr2;
register JDIMENSION col; register JDIMENSION col;
@@ -546,8 +546,8 @@ ycck_cmyk_convert (j_decompress_ptr cinfo,
register JSAMPLE * range_limit = cinfo->sample_range_limit; register JSAMPLE * range_limit = cinfo->sample_range_limit;
register int * Crrtab = cconvert->Cr_r_tab; register int * Crrtab = cconvert->Cr_r_tab;
register int * Cbbtab = cconvert->Cb_b_tab; register int * Cbbtab = cconvert->Cb_b_tab;
register INT32 * Crgtab = cconvert->Cr_g_tab; register JLONG * Crgtab = cconvert->Cr_g_tab;
register INT32 * Cbgtab = cconvert->Cb_g_tab; register JLONG * Cbgtab = cconvert->Cb_g_tab;
SHIFT_TEMPS SHIFT_TEMPS
while (--num_rows >= 0) { while (--num_rows >= 0) {
@@ -605,7 +605,7 @@ ycck_cmyk_convert (j_decompress_ptr cinfo,
#define DITHER_MASK 0x3 #define DITHER_MASK 0x3
#define DITHER_ROTATE(x) (((x) << 24) | (((x) >> 8) & 0x00FFFFFF)) #define DITHER_ROTATE(x) (((x) << 24) | (((x) >> 8) & 0x00FFFFFF))
static const INT32 dither_matrix[4] = { static const JLONG dither_matrix[4] = {
0x0008020A, 0x0008020A,
0x0C040E06, 0x0C040E06,
0x030B0109, 0x030B0109,

22
jdct.h
View File

@@ -3,8 +3,8 @@
* *
* This file was part of the Independent JPEG Group's software: * This file was part of the Independent JPEG Group's software:
* Copyright (C) 1994-1996, Thomas G. Lane. * Copyright (C) 1994-1996, Thomas G. Lane.
* It was modified by The libjpeg-turbo Project to include only code relevant * libjpeg-turbo Modifications:
* to libjpeg-turbo. * Copyright (C) 2015, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg * For conditions of distribution and use, see the accompanying README.ijg
* file. * file.
* *
@@ -19,7 +19,7 @@
/* /*
* A forward DCT routine is given a pointer to a work area of type DCTELEM[]; * A forward DCT routine is given a pointer to a work area of type DCTELEM[];
* the DCT is to be performed in-place in that buffer. Type DCTELEM is int * the DCT is to be performed in-place in that buffer. Type DCTELEM is int
* for 8-bit samples, INT32 for 12-bit samples. (NOTE: Floating-point DCT * for 8-bit samples, JLONG for 12-bit samples. (NOTE: Floating-point DCT
* implementations use an array of type FAST_FLOAT, instead.) * implementations use an array of type FAST_FLOAT, instead.)
* The DCT inputs are expected to be signed (range +-CENTERJSAMPLE). * The DCT inputs are expected to be signed (range +-CENTERJSAMPLE).
* The DCT outputs are returned scaled up by a factor of 8; they therefore * The DCT outputs are returned scaled up by a factor of 8; they therefore
@@ -41,7 +41,7 @@ typedef unsigned short UDCTELEM;
typedef unsigned int UDCTELEM2; typedef unsigned int UDCTELEM2;
#endif #endif
#else #else
typedef INT32 DCTELEM; /* must have 32 bits */ typedef JLONG DCTELEM; /* must have 32 bits */
typedef unsigned long long UDCTELEM2; typedef unsigned long long UDCTELEM2;
#endif #endif
@@ -68,7 +68,7 @@ typedef MULTIPLIER ISLOW_MULT_TYPE; /* short or int, whichever is faster */
typedef MULTIPLIER IFAST_MULT_TYPE; /* 16 bits is OK, use short if faster */ typedef MULTIPLIER IFAST_MULT_TYPE; /* 16 bits is OK, use short if faster */
#define IFAST_SCALE_BITS 2 /* fractional bits in scale factors */ #define IFAST_SCALE_BITS 2 /* fractional bits in scale factors */
#else #else
typedef INT32 IFAST_MULT_TYPE; /* need 32 bits for scaled quantizers */ typedef JLONG IFAST_MULT_TYPE; /* need 32 bits for scaled quantizers */
#define IFAST_SCALE_BITS 13 /* fractional bits in scale factors */ #define IFAST_SCALE_BITS 13 /* fractional bits in scale factors */
#endif #endif
typedef FAST_FLOAT FLOAT_MULT_TYPE; /* preferred floating type */ typedef FAST_FLOAT FLOAT_MULT_TYPE; /* preferred floating type */
@@ -154,13 +154,13 @@ EXTERN(void) jpeg_idct_16x16
* Macros for handling fixed-point arithmetic; these are used by many * Macros for handling fixed-point arithmetic; these are used by many
* but not all of the DCT/IDCT modules. * but not all of the DCT/IDCT modules.
* *
* All values are expected to be of type INT32. * All values are expected to be of type JLONG.
* Fractional constants are scaled left by CONST_BITS bits. * Fractional constants are scaled left by CONST_BITS bits.
* CONST_BITS is defined within each module using these macros, * CONST_BITS is defined within each module using these macros,
* and may differ from one module to the next. * and may differ from one module to the next.
*/ */
#define ONE ((INT32) 1) #define ONE ((JLONG) 1)
#define CONST_SCALE (ONE << CONST_BITS) #define CONST_SCALE (ONE << CONST_BITS)
/* Convert a positive real constant to an integer scaled by CONST_SCALE. /* Convert a positive real constant to an integer scaled by CONST_SCALE.
@@ -168,16 +168,16 @@ EXTERN(void) jpeg_idct_16x16
* thus causing a lot of useless floating-point operations at run time. * thus causing a lot of useless floating-point operations at run time.
*/ */
#define FIX(x) ((INT32) ((x) * CONST_SCALE + 0.5)) #define FIX(x) ((JLONG) ((x) * CONST_SCALE + 0.5))
/* Descale and correctly round an INT32 value that's scaled by N bits. /* Descale and correctly round a JLONG value that's scaled by N bits.
* We assume RIGHT_SHIFT rounds towards minus infinity, so adding * We assume RIGHT_SHIFT rounds towards minus infinity, so adding
* the fudge factor is correct for either sign of X. * the fudge factor is correct for either sign of X.
*/ */
#define DESCALE(x,n) RIGHT_SHIFT((x) + (ONE << ((n)-1)), n) #define DESCALE(x,n) RIGHT_SHIFT((x) + (ONE << ((n)-1)), n)
/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result. /* Multiply a JLONG variable by a JLONG constant to yield a JLONG result.
* This macro is used only when the two inputs will actually be no more than * This macro is used only when the two inputs will actually be no more than
* 16 bits wide, so that a 16x16->32 bit multiply can be used instead of a * 16 bits wide, so that a 16x16->32 bit multiply can be used instead of a
* full 32x32 multiply. This provides a useful speedup on many machines. * full 32x32 multiply. This provides a useful speedup on many machines.
@@ -190,7 +190,7 @@ EXTERN(void) jpeg_idct_16x16
#define MULTIPLY16C16(var,const) (((INT16) (var)) * ((INT16) (const))) #define MULTIPLY16C16(var,const) (((INT16) (var)) * ((INT16) (const)))
#endif #endif
#ifdef SHORTxLCONST_32 /* known to work with Microsoft C 6.0 */ #ifdef SHORTxLCONST_32 /* known to work with Microsoft C 6.0 */
#define MULTIPLY16C16(var,const) (((INT16) (var)) * ((INT32) (const))) #define MULTIPLY16C16(var,const) (((INT16) (var)) * ((JLONG) (const)))
#endif #endif
#ifndef MULTIPLY16C16 /* default definition */ #ifndef MULTIPLY16C16 /* default definition */

View File

@@ -6,7 +6,7 @@
* Modified 2002-2010 by Guido Vollbeding. * Modified 2002-2010 by Guido Vollbeding.
* libjpeg-turbo Modifications: * libjpeg-turbo Modifications:
* Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
* Copyright (C) 2010, D. R. Commander. * Copyright (C) 2010, 2015, D. R. Commander.
* Copyright (C) 2013, MIPS Technologies, Inc., California * Copyright (C) 2013, MIPS Technologies, Inc., California
* For conditions of distribution and use, see the accompanying README.ijg * For conditions of distribution and use, see the accompanying README.ijg
* file. * file.
@@ -280,8 +280,8 @@ start_pass (j_decompress_ptr cinfo)
for (i = 0; i < DCTSIZE2; i++) { for (i = 0; i < DCTSIZE2; i++) {
ifmtbl[i] = (IFAST_MULT_TYPE) ifmtbl[i] = (IFAST_MULT_TYPE)
DESCALE(MULTIPLY16V16((INT32) qtbl->quantval[i], DESCALE(MULTIPLY16V16((JLONG) qtbl->quantval[i],
(INT32) aanscales[i]), (JLONG) aanscales[i]),
CONST_BITS-IFAST_SCALE_BITS); CONST_BITS-IFAST_SCALE_BITS);
} }
} }

View File

@@ -210,7 +210,7 @@ jpeg_make_d_derived_tbl (j_decompress_ptr cinfo, boolean isDC, int tblno,
/* code is now 1 more than the last code used for codelength si; but /* code is now 1 more than the last code used for codelength si; but
* it must still fit in si bits, since no code is allowed to be all ones. * it must still fit in si bits, since no code is allowed to be all ones.
*/ */
if (((INT32) code) >= (((INT32) 1) << si)) if (((JLONG) code) >= (((JLONG) 1) << si))
ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
code <<= 1; code <<= 1;
si++; si++;
@@ -224,7 +224,7 @@ jpeg_make_d_derived_tbl (j_decompress_ptr cinfo, boolean isDC, int tblno,
/* valoffset[l] = huffval[] index of 1st symbol of code length l, /* valoffset[l] = huffval[] index of 1st symbol of code length l,
* minus the minimum code of length l * minus the minimum code of length l
*/ */
dtbl->valoffset[l] = (INT32) p - (INT32) huffcode[p]; dtbl->valoffset[l] = (JLONG) p - (JLONG) huffcode[p];
p += htbl->bits[l]; p += htbl->bits[l];
dtbl->maxcode[l] = huffcode[p-1]; /* maximum code of length l */ dtbl->maxcode[l] = huffcode[p-1]; /* maximum code of length l */
} else { } else {
@@ -451,7 +451,7 @@ jpeg_huff_decode (bitread_working_state * state,
d_derived_tbl * htbl, int min_bits) d_derived_tbl * htbl, int min_bits)
{ {
register int l = min_bits; register int l = min_bits;
register INT32 code; register JLONG code;
/* HUFF_DECODE has determined that the code is at least min_bits */ /* HUFF_DECODE has determined that the code is at least min_bits */
/* bits long, so fetch that many bits in one swoop. */ /* bits long, so fetch that many bits in one swoop. */

View File

@@ -4,7 +4,7 @@
* This file was part of the Independent JPEG Group's software: * This file was part of the Independent JPEG Group's software:
* Copyright (C) 1991-1997, Thomas G. Lane. * Copyright (C) 1991-1997, Thomas G. Lane.
* libjpeg-turbo Modifications: * libjpeg-turbo Modifications:
* Copyright (C) 2010-2011, D. R. Commander. * Copyright (C) 2010-2011, 2015, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg * For conditions of distribution and use, see the accompanying README.ijg
* file. * file.
* *
@@ -20,9 +20,9 @@
typedef struct { typedef struct {
/* Basic tables: (element [0] of each array is unused) */ /* Basic tables: (element [0] of each array is unused) */
INT32 maxcode[18]; /* largest code of length k (-1 if none) */ JLONG maxcode[18]; /* largest code of length k (-1 if none) */
/* (maxcode[17] is a sentinel to ensure jpeg_huff_decode terminates) */ /* (maxcode[17] is a sentinel to ensure jpeg_huff_decode terminates) */
INT32 valoffset[18]; /* huffval[] offset for codes of length k */ JLONG valoffset[18]; /* huffval[] offset for codes of length k */
/* valoffset[k] = huffval[] index of 1st symbol of code length k, less /* valoffset[k] = huffval[] index of 1st symbol of code length k, less
* the smallest code of length k; so given a code of length k, the * the smallest code of length k; so given a code of length k, the
* corresponding symbol is huffval[code + valoffset[k]] * corresponding symbol is huffval[code + valoffset[k]]
@@ -79,7 +79,7 @@ typedef size_t bit_buf_type; /* type of bit-extraction buffer */
#else #else
typedef INT32 bit_buf_type; /* type of bit-extraction buffer */ typedef JLONG bit_buf_type; /* type of bit-extraction buffer */
#define BIT_BUF_SIZE 32 /* size of buffer in bits */ #define BIT_BUF_SIZE 32 /* size of buffer in bits */
#endif #endif

View File

@@ -4,7 +4,7 @@
* This file was part of the Independent JPEG Group's software: * This file was part of the Independent JPEG Group's software:
* Copyright (C) 1991-1998, Thomas G. Lane. * Copyright (C) 1991-1998, Thomas G. Lane.
* libjpeg-turbo Modifications: * libjpeg-turbo Modifications:
* Copyright (C) 2012, D. R. Commander. * Copyright (C) 2012, 2015, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg * For conditions of distribution and use, see the accompanying README.ijg
* file. * file.
* *
@@ -154,7 +154,7 @@ typedef my_marker_reader * my_marker_ptr;
V = GETJOCTET(*next_input_byte++); ) V = GETJOCTET(*next_input_byte++); )
/* As above, but read two bytes interpreted as an unsigned 16-bit integer. /* As above, but read two bytes interpreted as an unsigned 16-bit integer.
* V should be declared unsigned int or perhaps INT32. * V should be declared unsigned int or perhaps JLONG.
*/ */
#define INPUT_2BYTES(cinfo,V,action) \ #define INPUT_2BYTES(cinfo,V,action) \
MAKESTMT( MAKE_BYTE_AVAIL(cinfo,action); \ MAKESTMT( MAKE_BYTE_AVAIL(cinfo,action); \
@@ -240,7 +240,7 @@ LOCAL(boolean)
get_sof (j_decompress_ptr cinfo, boolean is_prog, boolean is_arith) get_sof (j_decompress_ptr cinfo, boolean is_prog, boolean is_arith)
/* Process a SOFn marker */ /* Process a SOFn marker */
{ {
INT32 length; JLONG length;
int c, ci; int c, ci;
jpeg_component_info * compptr; jpeg_component_info * compptr;
INPUT_VARS(cinfo); INPUT_VARS(cinfo);
@@ -304,7 +304,7 @@ LOCAL(boolean)
get_sos (j_decompress_ptr cinfo) get_sos (j_decompress_ptr cinfo)
/* Process a SOS marker */ /* Process a SOS marker */
{ {
INT32 length; JLONG length;
int i, ci, n, c, cc, pi; int i, ci, n, c, cc, pi;
jpeg_component_info * compptr; jpeg_component_info * compptr;
INPUT_VARS(cinfo); INPUT_VARS(cinfo);
@@ -387,7 +387,7 @@ LOCAL(boolean)
get_dac (j_decompress_ptr cinfo) get_dac (j_decompress_ptr cinfo)
/* Process a DAC marker */ /* Process a DAC marker */
{ {
INT32 length; JLONG length;
int index, val; int index, val;
INPUT_VARS(cinfo); INPUT_VARS(cinfo);
@@ -433,7 +433,7 @@ LOCAL(boolean)
get_dht (j_decompress_ptr cinfo) get_dht (j_decompress_ptr cinfo)
/* Process a DHT marker */ /* Process a DHT marker */
{ {
INT32 length; JLONG length;
UINT8 bits[17]; UINT8 bits[17];
UINT8 huffval[256]; UINT8 huffval[256];
int i, index, count; int i, index, count;
@@ -467,7 +467,7 @@ get_dht (j_decompress_ptr cinfo)
/* Here we just do minimal validation of the counts to avoid walking /* Here we just do minimal validation of the counts to avoid walking
* off the end of our table space. jdhuff.c will check more carefully. * off the end of our table space. jdhuff.c will check more carefully.
*/ */
if (count > 256 || ((INT32) count) > length) if (count > 256 || ((JLONG) count) > length)
ERREXIT(cinfo, JERR_BAD_HUFF_TABLE); ERREXIT(cinfo, JERR_BAD_HUFF_TABLE);
for (i = 0; i < count; i++) for (i = 0; i < count; i++)
@@ -507,7 +507,7 @@ LOCAL(boolean)
get_dqt (j_decompress_ptr cinfo) get_dqt (j_decompress_ptr cinfo)
/* Process a DQT marker */ /* Process a DQT marker */
{ {
INT32 length; JLONG length;
int n, i, prec; int n, i, prec;
unsigned int tmp; unsigned int tmp;
JQUANT_TBL *quant_ptr; JQUANT_TBL *quant_ptr;
@@ -565,7 +565,7 @@ LOCAL(boolean)
get_dri (j_decompress_ptr cinfo) get_dri (j_decompress_ptr cinfo)
/* Process a DRI marker */ /* Process a DRI marker */
{ {
INT32 length; JLONG length;
unsigned int tmp; unsigned int tmp;
INPUT_VARS(cinfo); INPUT_VARS(cinfo);
@@ -599,13 +599,13 @@ get_dri (j_decompress_ptr cinfo)
LOCAL(void) LOCAL(void)
examine_app0 (j_decompress_ptr cinfo, JOCTET * data, examine_app0 (j_decompress_ptr cinfo, JOCTET * data,
unsigned int datalen, INT32 remaining) unsigned int datalen, JLONG remaining)
/* Examine first few bytes from an APP0. /* Examine first few bytes from an APP0.
* Take appropriate action if it is a JFIF marker. * Take appropriate action if it is a JFIF marker.
* datalen is # of bytes at data[], remaining is length of rest of marker data. * datalen is # of bytes at data[], remaining is length of rest of marker data.
*/ */
{ {
INT32 totallen = (INT32) datalen + remaining; JLONG totallen = (JLONG) datalen + remaining;
if (datalen >= APP0_DATA_LEN && if (datalen >= APP0_DATA_LEN &&
GETJOCTET(data[0]) == 0x4A && GETJOCTET(data[0]) == 0x4A &&
@@ -639,7 +639,7 @@ examine_app0 (j_decompress_ptr cinfo, JOCTET * data,
GETJOCTET(data[12]), GETJOCTET(data[13])); GETJOCTET(data[12]), GETJOCTET(data[13]));
totallen -= APP0_DATA_LEN; totallen -= APP0_DATA_LEN;
if (totallen != if (totallen !=
((INT32)GETJOCTET(data[12]) * (INT32)GETJOCTET(data[13]) * (INT32) 3)) ((JLONG)GETJOCTET(data[12]) * (JLONG)GETJOCTET(data[13]) * (JLONG) 3))
TRACEMS1(cinfo, 1, JTRC_JFIF_BADTHUMBNAILSIZE, (int) totallen); TRACEMS1(cinfo, 1, JTRC_JFIF_BADTHUMBNAILSIZE, (int) totallen);
} else if (datalen >= 6 && } else if (datalen >= 6 &&
GETJOCTET(data[0]) == 0x4A && GETJOCTET(data[0]) == 0x4A &&
@@ -675,7 +675,7 @@ examine_app0 (j_decompress_ptr cinfo, JOCTET * data,
LOCAL(void) LOCAL(void)
examine_app14 (j_decompress_ptr cinfo, JOCTET * data, examine_app14 (j_decompress_ptr cinfo, JOCTET * data,
unsigned int datalen, INT32 remaining) unsigned int datalen, JLONG remaining)
/* Examine first few bytes from an APP14. /* Examine first few bytes from an APP14.
* Take appropriate action if it is an Adobe marker. * Take appropriate action if it is an Adobe marker.
* datalen is # of bytes at data[], remaining is length of rest of marker data. * datalen is # of bytes at data[], remaining is length of rest of marker data.
@@ -708,7 +708,7 @@ METHODDEF(boolean)
get_interesting_appn (j_decompress_ptr cinfo) get_interesting_appn (j_decompress_ptr cinfo)
/* Process an APP0 or APP14 marker without saving it */ /* Process an APP0 or APP14 marker without saving it */
{ {
INT32 length; JLONG length;
JOCTET b[APPN_DATA_LEN]; JOCTET b[APPN_DATA_LEN];
unsigned int i, numtoread; unsigned int i, numtoread;
INPUT_VARS(cinfo); INPUT_VARS(cinfo);
@@ -760,7 +760,7 @@ save_marker (j_decompress_ptr cinfo)
jpeg_saved_marker_ptr cur_marker = marker->cur_marker; jpeg_saved_marker_ptr cur_marker = marker->cur_marker;
unsigned int bytes_read, data_length; unsigned int bytes_read, data_length;
JOCTET * data; JOCTET * data;
INT32 length = 0; JLONG length = 0;
INPUT_VARS(cinfo); INPUT_VARS(cinfo);
if (cur_marker == NULL) { if (cur_marker == NULL) {
@@ -862,7 +862,7 @@ METHODDEF(boolean)
skip_variable (j_decompress_ptr cinfo) skip_variable (j_decompress_ptr cinfo)
/* Skip over an unknown or uninteresting variable-length marker */ /* Skip over an unknown or uninteresting variable-length marker */
{ {
INT32 length; JLONG length;
INPUT_VARS(cinfo); INPUT_VARS(cinfo);
INPUT_2BYTES(cinfo, length, return FALSE); INPUT_2BYTES(cinfo, length, return FALSE);

View File

@@ -5,7 +5,7 @@
* Copyright (C) 1994-1996, Thomas G. Lane. * Copyright (C) 1994-1996, Thomas G. Lane.
* Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
* libjpeg-turbo Modifications: * libjpeg-turbo Modifications:
* Copyright (C) 2009, 2011, 2014 D. R. Commander. * Copyright (C) 2009, 2011, 2014-2015, D. R. Commander.
* Copyright (C) 2013, Linaro Limited. * Copyright (C) 2013, Linaro Limited.
* For conditions of distribution and use, see the accompanying README.ijg * For conditions of distribution and use, see the accompanying README.ijg
* file. * file.
@@ -58,8 +58,8 @@ typedef struct {
/* Private state for YCC->RGB conversion */ /* Private state for YCC->RGB conversion */
int * Cr_r_tab; /* => table for Cr to R conversion */ int * Cr_r_tab; /* => table for Cr to R conversion */
int * Cb_b_tab; /* => table for Cb to B conversion */ int * Cb_b_tab; /* => table for Cb to B conversion */
INT32 * Cr_g_tab; /* => table for Cr to G conversion */ JLONG * Cr_g_tab; /* => table for Cr to G conversion */
INT32 * Cb_g_tab; /* => table for Cb to G conversion */ JLONG * Cb_g_tab; /* => table for Cb to G conversion */
/* For 2:1 vertical sampling, we produce two output rows at a time. /* For 2:1 vertical sampling, we produce two output rows at a time.
* We need a "spare" row buffer to hold the second output row if the * We need a "spare" row buffer to hold the second output row if the
@@ -76,8 +76,8 @@ typedef struct {
typedef my_upsampler * my_upsample_ptr; typedef my_upsampler * my_upsample_ptr;
#define SCALEBITS 16 /* speediest right-shift on some machines */ #define SCALEBITS 16 /* speediest right-shift on some machines */
#define ONE_HALF ((INT32) 1 << (SCALEBITS-1)) #define ONE_HALF ((JLONG) 1 << (SCALEBITS-1))
#define FIX(x) ((INT32) ((x) * (1L<<SCALEBITS) + 0.5)) #define FIX(x) ((JLONG) ((x) * (1L<<SCALEBITS) + 0.5))
/* Include inline routines for colorspace extensions */ /* Include inline routines for colorspace extensions */
@@ -191,7 +191,7 @@ build_ycc_rgb_table (j_decompress_ptr cinfo)
{ {
my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample; my_upsample_ptr upsample = (my_upsample_ptr) cinfo->upsample;
int i; int i;
INT32 x; JLONG x;
SHIFT_TEMPS SHIFT_TEMPS
upsample->Cr_r_tab = (int *) upsample->Cr_r_tab = (int *)
@@ -200,12 +200,12 @@ build_ycc_rgb_table (j_decompress_ptr cinfo)
upsample->Cb_b_tab = (int *) upsample->Cb_b_tab = (int *)
(*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
(MAXJSAMPLE+1) * sizeof(int)); (MAXJSAMPLE+1) * sizeof(int));
upsample->Cr_g_tab = (INT32 *) upsample->Cr_g_tab = (JLONG *)
(*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
(MAXJSAMPLE+1) * sizeof(INT32)); (MAXJSAMPLE+1) * sizeof(JLONG));
upsample->Cb_g_tab = (INT32 *) upsample->Cb_g_tab = (JLONG *)
(*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
(MAXJSAMPLE+1) * sizeof(INT32)); (MAXJSAMPLE+1) * sizeof(JLONG));
for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) { for (i = 0, x = -CENTERJSAMPLE; i <= MAXJSAMPLE; i++, x++) {
/* i is the actual input pixel value, in the range 0..MAXJSAMPLE */ /* i is the actual input pixel value, in the range 0..MAXJSAMPLE */
@@ -457,7 +457,7 @@ h2v2_merged_upsample (j_decompress_ptr cinfo,
#define DITHER_MASK 0x3 #define DITHER_MASK 0x3
#define DITHER_ROTATE(x) (((x) << 24) | (((x) >> 8) & 0x00FFFFFF)) #define DITHER_ROTATE(x) (((x) << 24) | (((x) >> 8) & 0x00FFFFFF))
static const INT32 dither_matrix[4] = { static const JLONG dither_matrix[4] = {
0x0008020A, 0x0008020A,
0x0C040E06, 0x0C040E06,
0x030B0109, 0x030B0109,

View File

@@ -5,7 +5,7 @@
* Copyright (C) 1994-1996, Thomas G. Lane. * Copyright (C) 1994-1996, Thomas G. Lane.
* libjpeg-turbo Modifications: * libjpeg-turbo Modifications:
* Copyright (C) 2013, Linaro Limited. * Copyright (C) 2013, Linaro Limited.
* Copyright (C) 2014, D. R. Commander. * Copyright (C) 2014-2015, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg * For conditions of distribution and use, see the accompanying README.ijg
* file. * file.
* *
@@ -30,10 +30,10 @@ h2v1_merged_upsample_565_internal (j_decompress_ptr cinfo,
register JSAMPLE * range_limit = cinfo->sample_range_limit; register JSAMPLE * range_limit = cinfo->sample_range_limit;
int * Crrtab = upsample->Cr_r_tab; int * Crrtab = upsample->Cr_r_tab;
int * Cbbtab = upsample->Cb_b_tab; int * Cbbtab = upsample->Cb_b_tab;
INT32 * Crgtab = upsample->Cr_g_tab; JLONG * Crgtab = upsample->Cr_g_tab;
INT32 * Cbgtab = upsample->Cb_g_tab; JLONG * Cbgtab = upsample->Cb_g_tab;
unsigned int r, g, b; unsigned int r, g, b;
INT32 rgb; JLONG rgb;
SHIFT_TEMPS SHIFT_TEMPS
inptr0 = input_buf[0][in_row_group_ctr]; inptr0 = input_buf[0][in_row_group_ctr];
@@ -101,11 +101,11 @@ h2v1_merged_upsample_565D_internal (j_decompress_ptr cinfo,
register JSAMPLE * range_limit = cinfo->sample_range_limit; register JSAMPLE * range_limit = cinfo->sample_range_limit;
int * Crrtab = upsample->Cr_r_tab; int * Crrtab = upsample->Cr_r_tab;
int * Cbbtab = upsample->Cb_b_tab; int * Cbbtab = upsample->Cb_b_tab;
INT32 * Crgtab = upsample->Cr_g_tab; JLONG * Crgtab = upsample->Cr_g_tab;
INT32 * Cbgtab = upsample->Cb_g_tab; JLONG * Cbgtab = upsample->Cb_g_tab;
INT32 d0 = dither_matrix[cinfo->output_scanline & DITHER_MASK]; JLONG d0 = dither_matrix[cinfo->output_scanline & DITHER_MASK];
unsigned int r, g, b; unsigned int r, g, b;
INT32 rgb; JLONG rgb;
SHIFT_TEMPS SHIFT_TEMPS
inptr0 = input_buf[0][in_row_group_ctr]; inptr0 = input_buf[0][in_row_group_ctr];
@@ -175,10 +175,10 @@ h2v2_merged_upsample_565_internal (j_decompress_ptr cinfo,
register JSAMPLE * range_limit = cinfo->sample_range_limit; register JSAMPLE * range_limit = cinfo->sample_range_limit;
int * Crrtab = upsample->Cr_r_tab; int * Crrtab = upsample->Cr_r_tab;
int * Cbbtab = upsample->Cb_b_tab; int * Cbbtab = upsample->Cb_b_tab;
INT32 * Crgtab = upsample->Cr_g_tab; JLONG * Crgtab = upsample->Cr_g_tab;
INT32 * Cbgtab = upsample->Cb_g_tab; JLONG * Cbgtab = upsample->Cb_g_tab;
unsigned int r, g, b; unsigned int r, g, b;
INT32 rgb; JLONG rgb;
SHIFT_TEMPS SHIFT_TEMPS
inptr00 = input_buf[0][in_row_group_ctr * 2]; inptr00 = input_buf[0][in_row_group_ctr * 2];
@@ -271,12 +271,12 @@ h2v2_merged_upsample_565D_internal (j_decompress_ptr cinfo,
register JSAMPLE * range_limit = cinfo->sample_range_limit; register JSAMPLE * range_limit = cinfo->sample_range_limit;
int * Crrtab = upsample->Cr_r_tab; int * Crrtab = upsample->Cr_r_tab;
int * Cbbtab = upsample->Cb_b_tab; int * Cbbtab = upsample->Cb_b_tab;
INT32 * Crgtab = upsample->Cr_g_tab; JLONG * Crgtab = upsample->Cr_g_tab;
INT32 * Cbgtab = upsample->Cb_g_tab; JLONG * Cbgtab = upsample->Cb_g_tab;
INT32 d0 = dither_matrix[cinfo->output_scanline & DITHER_MASK]; JLONG d0 = dither_matrix[cinfo->output_scanline & DITHER_MASK];
INT32 d1 = dither_matrix[(cinfo->output_scanline+1) & DITHER_MASK]; JLONG d1 = dither_matrix[(cinfo->output_scanline+1) & DITHER_MASK];
unsigned int r, g, b; unsigned int r, g, b;
INT32 rgb; JLONG rgb;
SHIFT_TEMPS SHIFT_TEMPS
inptr00 = input_buf[0][in_row_group_ctr*2]; inptr00 = input_buf[0][in_row_group_ctr*2];

View File

@@ -4,7 +4,7 @@
* This file was part of the Independent JPEG Group's software: * This file was part of the Independent JPEG Group's software:
* Copyright (C) 1994-1996, Thomas G. Lane. * Copyright (C) 1994-1996, Thomas G. Lane.
* libjpeg-turbo Modifications: * libjpeg-turbo Modifications:
* Copyright (C) 2011, D. R. Commander. * Copyright (C) 2011, 2015, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg * For conditions of distribution and use, see the accompanying README.ijg
* file. * file.
* *
@@ -36,8 +36,8 @@ h2v1_merged_upsample_internal (j_decompress_ptr cinfo,
register JSAMPLE * range_limit = cinfo->sample_range_limit; register JSAMPLE * range_limit = cinfo->sample_range_limit;
int * Crrtab = upsample->Cr_r_tab; int * Crrtab = upsample->Cr_r_tab;
int * Cbbtab = upsample->Cb_b_tab; int * Cbbtab = upsample->Cb_b_tab;
INT32 * Crgtab = upsample->Cr_g_tab; JLONG * Crgtab = upsample->Cr_g_tab;
INT32 * Cbgtab = upsample->Cb_g_tab; JLONG * Cbgtab = upsample->Cb_g_tab;
SHIFT_TEMPS SHIFT_TEMPS
inptr0 = input_buf[0][in_row_group_ctr]; inptr0 = input_buf[0][in_row_group_ctr];
@@ -109,8 +109,8 @@ h2v2_merged_upsample_internal (j_decompress_ptr cinfo,
register JSAMPLE * range_limit = cinfo->sample_range_limit; register JSAMPLE * range_limit = cinfo->sample_range_limit;
int * Crrtab = upsample->Cr_r_tab; int * Crrtab = upsample->Cr_r_tab;
int * Cbbtab = upsample->Cb_b_tab; int * Cbbtab = upsample->Cb_b_tab;
INT32 * Crgtab = upsample->Cr_g_tab; JLONG * Crgtab = upsample->Cr_g_tab;
INT32 * Cbgtab = upsample->Cb_g_tab; JLONG * Cbgtab = upsample->Cb_g_tab;
SHIFT_TEMPS SHIFT_TEMPS
inptr00 = input_buf[0][in_row_group_ctr*2]; inptr00 = input_buf[0][in_row_group_ctr*2];

View File

@@ -5,7 +5,7 @@
* Copyright (C) 1991-1996, Thomas G. Lane. * Copyright (C) 1991-1996, Thomas G. Lane.
* libjpeg-turbo Modifications: * libjpeg-turbo Modifications:
* Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
* Copyright (C) 2010, D. R. Commander. * Copyright (C) 2010, 2015, D. R. Commander.
* Copyright (C) 2014, MIPS Technologies, Inc., California * Copyright (C) 2014, MIPS Technologies, Inc., California
* For conditions of distribution and use, see the accompanying README.ijg * For conditions of distribution and use, see the accompanying README.ijg
* file. * file.
@@ -318,7 +318,7 @@ h2v2_fancy_upsample (j_decompress_ptr cinfo, jpeg_component_info * compptr,
#if BITS_IN_JSAMPLE == 8 #if BITS_IN_JSAMPLE == 8
register int thiscolsum, lastcolsum, nextcolsum; register int thiscolsum, lastcolsum, nextcolsum;
#else #else
register INT32 thiscolsum, lastcolsum, nextcolsum; register JLONG thiscolsum, lastcolsum, nextcolsum;
#endif #endif
register JDIMENSION colctr; register JDIMENSION colctr;
int inrow, outrow, v; int inrow, outrow, v;

View File

@@ -1,8 +1,10 @@
/* /*
* jfdctfst.c * jfdctfst.c
* *
* This file was part of the Independent JPEG Group's software:
* Copyright (C) 1994-1996, Thomas G. Lane. * Copyright (C) 1994-1996, Thomas G. Lane.
* This file is part of the Independent JPEG Group's software. * libjpeg-turbo Modifications:
* Copyright (C) 2015, D. R. Commander
* For conditions of distribution and use, see the accompanying README.ijg * For conditions of distribution and use, see the accompanying README.ijg
* file. * file.
* *
@@ -77,10 +79,10 @@
*/ */
#if CONST_BITS == 8 #if CONST_BITS == 8
#define FIX_0_382683433 ((INT32) 98) /* FIX(0.382683433) */ #define FIX_0_382683433 ((JLONG) 98) /* FIX(0.382683433) */
#define FIX_0_541196100 ((INT32) 139) /* FIX(0.541196100) */ #define FIX_0_541196100 ((JLONG) 139) /* FIX(0.541196100) */
#define FIX_0_707106781 ((INT32) 181) /* FIX(0.707106781) */ #define FIX_0_707106781 ((JLONG) 181) /* FIX(0.707106781) */
#define FIX_1_306562965 ((INT32) 334) /* FIX(1.306562965) */ #define FIX_1_306562965 ((JLONG) 334) /* FIX(1.306562965) */
#else #else
#define FIX_0_382683433 FIX(0.382683433) #define FIX_0_382683433 FIX(0.382683433)
#define FIX_0_541196100 FIX(0.541196100) #define FIX_0_541196100 FIX(0.541196100)
@@ -100,7 +102,7 @@
#endif #endif
/* Multiply a DCTELEM variable by an INT32 constant, and immediately /* Multiply a DCTELEM variable by an JLONG constant, and immediately
* descale to yield a DCTELEM result. * descale to yield a DCTELEM result.
*/ */

View File

@@ -70,7 +70,7 @@
* they are represented to better-than-integral precision. These outputs * they are represented to better-than-integral precision. These outputs
* require BITS_IN_JSAMPLE + PASS1_BITS + 3 bits; this fits in a 16-bit word * require BITS_IN_JSAMPLE + PASS1_BITS + 3 bits; this fits in a 16-bit word
* with the recommended scaling. (For 12-bit sample data, the intermediate * with the recommended scaling. (For 12-bit sample data, the intermediate
* array is INT32 anyway.) * array is JLONG anyway.)
* *
* To avoid overflow of the 32-bit intermediate results in pass 2, we must * To avoid overflow of the 32-bit intermediate results in pass 2, we must
* have BITS_IN_JSAMPLE + CONST_BITS + PASS1_BITS <= 26. Error analysis * have BITS_IN_JSAMPLE + CONST_BITS + PASS1_BITS <= 26. Error analysis
@@ -93,18 +93,18 @@
*/ */
#if CONST_BITS == 13 #if CONST_BITS == 13
#define FIX_0_298631336 ((INT32) 2446) /* FIX(0.298631336) */ #define FIX_0_298631336 ((JLONG) 2446) /* FIX(0.298631336) */
#define FIX_0_390180644 ((INT32) 3196) /* FIX(0.390180644) */ #define FIX_0_390180644 ((JLONG) 3196) /* FIX(0.390180644) */
#define FIX_0_541196100 ((INT32) 4433) /* FIX(0.541196100) */ #define FIX_0_541196100 ((JLONG) 4433) /* FIX(0.541196100) */
#define FIX_0_765366865 ((INT32) 6270) /* FIX(0.765366865) */ #define FIX_0_765366865 ((JLONG) 6270) /* FIX(0.765366865) */
#define FIX_0_899976223 ((INT32) 7373) /* FIX(0.899976223) */ #define FIX_0_899976223 ((JLONG) 7373) /* FIX(0.899976223) */
#define FIX_1_175875602 ((INT32) 9633) /* FIX(1.175875602) */ #define FIX_1_175875602 ((JLONG) 9633) /* FIX(1.175875602) */
#define FIX_1_501321110 ((INT32) 12299) /* FIX(1.501321110) */ #define FIX_1_501321110 ((JLONG) 12299) /* FIX(1.501321110) */
#define FIX_1_847759065 ((INT32) 15137) /* FIX(1.847759065) */ #define FIX_1_847759065 ((JLONG) 15137) /* FIX(1.847759065) */
#define FIX_1_961570560 ((INT32) 16069) /* FIX(1.961570560) */ #define FIX_1_961570560 ((JLONG) 16069) /* FIX(1.961570560) */
#define FIX_2_053119869 ((INT32) 16819) /* FIX(2.053119869) */ #define FIX_2_053119869 ((JLONG) 16819) /* FIX(2.053119869) */
#define FIX_2_562915447 ((INT32) 20995) /* FIX(2.562915447) */ #define FIX_2_562915447 ((JLONG) 20995) /* FIX(2.562915447) */
#define FIX_3_072711026 ((INT32) 25172) /* FIX(3.072711026) */ #define FIX_3_072711026 ((JLONG) 25172) /* FIX(3.072711026) */
#else #else
#define FIX_0_298631336 FIX(0.298631336) #define FIX_0_298631336 FIX(0.298631336)
#define FIX_0_390180644 FIX(0.390180644) #define FIX_0_390180644 FIX(0.390180644)
@@ -121,7 +121,7 @@
#endif #endif
/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result. /* Multiply an JLONG variable by an JLONG constant to yield an JLONG result.
* For 8-bit samples with the recommended scaling, all the variable * For 8-bit samples with the recommended scaling, all the variable
* and constant values involved are no more than 16 bits wide, so a * and constant values involved are no more than 16 bits wide, so a
* 16x16->32 bit multiply can be used instead of a full 32x32 multiply. * 16x16->32 bit multiply can be used instead of a full 32x32 multiply.
@@ -142,9 +142,9 @@
GLOBAL(void) GLOBAL(void)
jpeg_fdct_islow (DCTELEM * data) jpeg_fdct_islow (DCTELEM * data)
{ {
INT32 tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7; JLONG tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
INT32 tmp10, tmp11, tmp12, tmp13; JLONG tmp10, tmp11, tmp12, tmp13;
INT32 z1, z2, z3, z4, z5; JLONG z1, z2, z3, z4, z5;
DCTELEM *dataptr; DCTELEM *dataptr;
int ctr; int ctr;
SHIFT_TEMPS SHIFT_TEMPS

View File

@@ -1,8 +1,10 @@
/* /*
* jidctfst.c * jidctfst.c
* *
* This file was part of the Independent JPEG Group's software:
* Copyright (C) 1994-1998, Thomas G. Lane. * Copyright (C) 1994-1998, Thomas G. Lane.
* This file is part of the Independent JPEG Group's software. * libjpeg-turbo Modifications:
* Copyright (C) 2015, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg * For conditions of distribution and use, see the accompanying README.ijg
* file. * file.
* *
@@ -90,10 +92,10 @@
*/ */
#if CONST_BITS == 8 #if CONST_BITS == 8
#define FIX_1_082392200 ((INT32) 277) /* FIX(1.082392200) */ #define FIX_1_082392200 ((JLONG) 277) /* FIX(1.082392200) */
#define FIX_1_414213562 ((INT32) 362) /* FIX(1.414213562) */ #define FIX_1_414213562 ((JLONG) 362) /* FIX(1.414213562) */
#define FIX_1_847759065 ((INT32) 473) /* FIX(1.847759065) */ #define FIX_1_847759065 ((JLONG) 473) /* FIX(1.847759065) */
#define FIX_2_613125930 ((INT32) 669) /* FIX(2.613125930) */ #define FIX_2_613125930 ((JLONG) 669) /* FIX(2.613125930) */
#else #else
#define FIX_1_082392200 FIX(1.082392200) #define FIX_1_082392200 FIX(1.082392200)
#define FIX_1_414213562 FIX(1.414213562) #define FIX_1_414213562 FIX(1.414213562)
@@ -113,7 +115,7 @@
#endif #endif
/* Multiply a DCTELEM variable by an INT32 constant, and immediately /* Multiply a DCTELEM variable by an JLONG constant, and immediately
* descale to yield a DCTELEM result. * descale to yield a DCTELEM result.
*/ */
@@ -123,7 +125,7 @@
/* Dequantize a coefficient by multiplying it by the multiplier-table /* Dequantize a coefficient by multiplying it by the multiplier-table
* entry; produce a DCTELEM result. For 8-bit data a 16x16->16 * entry; produce a DCTELEM result. For 8-bit data a 16x16->16
* multiplication will do. For 12-bit data, the multiplier table is * multiplication will do. For 12-bit data, the multiplier table is
* declared INT32, so a 32-bit multiply will be used. * declared JLONG, so a 32-bit multiply will be used.
*/ */
#if BITS_IN_JSAMPLE == 8 #if BITS_IN_JSAMPLE == 8
@@ -135,7 +137,7 @@
/* Like DESCALE, but applies to a DCTELEM and produces an int. /* Like DESCALE, but applies to a DCTELEM and produces an int.
* We assume that int right shift is unsigned if INT32 right shift is. * We assume that int right shift is unsigned if JLONG right shift is.
*/ */
#ifdef RIGHT_SHIFT_IS_UNSIGNED #ifdef RIGHT_SHIFT_IS_UNSIGNED

View File

@@ -92,7 +92,7 @@
* they are represented to better-than-integral precision. These outputs * they are represented to better-than-integral precision. These outputs
* require BITS_IN_JSAMPLE + PASS1_BITS + 3 bits; this fits in a 16-bit word * require BITS_IN_JSAMPLE + PASS1_BITS + 3 bits; this fits in a 16-bit word
* with the recommended scaling. (To scale up 12-bit sample data further, an * with the recommended scaling. (To scale up 12-bit sample data further, an
* intermediate INT32 array would be needed.) * intermediate JLONG array would be needed.)
* *
* To avoid overflow of the 32-bit intermediate results in pass 2, we must * To avoid overflow of the 32-bit intermediate results in pass 2, we must
* have BITS_IN_JSAMPLE + CONST_BITS + PASS1_BITS <= 26. Error analysis * have BITS_IN_JSAMPLE + CONST_BITS + PASS1_BITS <= 26. Error analysis
@@ -115,18 +115,18 @@
*/ */
#if CONST_BITS == 13 #if CONST_BITS == 13
#define FIX_0_298631336 ((INT32) 2446) /* FIX(0.298631336) */ #define FIX_0_298631336 ((JLONG) 2446) /* FIX(0.298631336) */
#define FIX_0_390180644 ((INT32) 3196) /* FIX(0.390180644) */ #define FIX_0_390180644 ((JLONG) 3196) /* FIX(0.390180644) */
#define FIX_0_541196100 ((INT32) 4433) /* FIX(0.541196100) */ #define FIX_0_541196100 ((JLONG) 4433) /* FIX(0.541196100) */
#define FIX_0_765366865 ((INT32) 6270) /* FIX(0.765366865) */ #define FIX_0_765366865 ((JLONG) 6270) /* FIX(0.765366865) */
#define FIX_0_899976223 ((INT32) 7373) /* FIX(0.899976223) */ #define FIX_0_899976223 ((JLONG) 7373) /* FIX(0.899976223) */
#define FIX_1_175875602 ((INT32) 9633) /* FIX(1.175875602) */ #define FIX_1_175875602 ((JLONG) 9633) /* FIX(1.175875602) */
#define FIX_1_501321110 ((INT32) 12299) /* FIX(1.501321110) */ #define FIX_1_501321110 ((JLONG) 12299) /* FIX(1.501321110) */
#define FIX_1_847759065 ((INT32) 15137) /* FIX(1.847759065) */ #define FIX_1_847759065 ((JLONG) 15137) /* FIX(1.847759065) */
#define FIX_1_961570560 ((INT32) 16069) /* FIX(1.961570560) */ #define FIX_1_961570560 ((JLONG) 16069) /* FIX(1.961570560) */
#define FIX_2_053119869 ((INT32) 16819) /* FIX(2.053119869) */ #define FIX_2_053119869 ((JLONG) 16819) /* FIX(2.053119869) */
#define FIX_2_562915447 ((INT32) 20995) /* FIX(2.562915447) */ #define FIX_2_562915447 ((JLONG) 20995) /* FIX(2.562915447) */
#define FIX_3_072711026 ((INT32) 25172) /* FIX(3.072711026) */ #define FIX_3_072711026 ((JLONG) 25172) /* FIX(3.072711026) */
#else #else
#define FIX_0_298631336 FIX(0.298631336) #define FIX_0_298631336 FIX(0.298631336)
#define FIX_0_390180644 FIX(0.390180644) #define FIX_0_390180644 FIX(0.390180644)
@@ -143,7 +143,7 @@
#endif #endif
/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result. /* Multiply an JLONG variable by an JLONG constant to yield an JLONG result.
* For 8-bit samples with the recommended scaling, all the variable * For 8-bit samples with the recommended scaling, all the variable
* and constant values involved are no more than 16 bits wide, so a * and constant values involved are no more than 16 bits wide, so a
* 16x16->32 bit multiply can be used instead of a full 32x32 multiply. * 16x16->32 bit multiply can be used instead of a full 32x32 multiply.
@@ -174,9 +174,9 @@ jpeg_idct_islow (j_decompress_ptr cinfo, jpeg_component_info * compptr,
JCOEFPTR coef_block, JCOEFPTR coef_block,
JSAMPARRAY output_buf, JDIMENSION output_col) JSAMPARRAY output_buf, JDIMENSION output_col)
{ {
INT32 tmp0, tmp1, tmp2, tmp3; JLONG tmp0, tmp1, tmp2, tmp3;
INT32 tmp10, tmp11, tmp12, tmp13; JLONG tmp10, tmp11, tmp12, tmp13;
INT32 z1, z2, z3, z4, z5; JLONG z1, z2, z3, z4, z5;
JCOEFPTR inptr; JCOEFPTR inptr;
ISLOW_MULT_TYPE * quantptr; ISLOW_MULT_TYPE * quantptr;
int * wsptr; int * wsptr;
@@ -314,7 +314,7 @@ jpeg_idct_islow (j_decompress_ptr cinfo, jpeg_component_info * compptr,
if (wsptr[1] == 0 && wsptr[2] == 0 && wsptr[3] == 0 && wsptr[4] == 0 && if (wsptr[1] == 0 && wsptr[2] == 0 && wsptr[3] == 0 && wsptr[4] == 0 &&
wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) { wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) {
/* AC terms all zero */ /* AC terms all zero */
JSAMPLE dcval = range_limit[(int) DESCALE((INT32) wsptr[0], PASS1_BITS+3) JSAMPLE dcval = range_limit[(int) DESCALE((JLONG) wsptr[0], PASS1_BITS+3)
& RANGE_MASK]; & RANGE_MASK];
outptr[0] = dcval; outptr[0] = dcval;
@@ -334,15 +334,15 @@ jpeg_idct_islow (j_decompress_ptr cinfo, jpeg_component_info * compptr,
/* Even part: reverse the even part of the forward DCT. */ /* Even part: reverse the even part of the forward DCT. */
/* The rotator is sqrt(2)*c(-6). */ /* The rotator is sqrt(2)*c(-6). */
z2 = (INT32) wsptr[2]; z2 = (JLONG) wsptr[2];
z3 = (INT32) wsptr[6]; z3 = (JLONG) wsptr[6];
z1 = MULTIPLY(z2 + z3, FIX_0_541196100); z1 = MULTIPLY(z2 + z3, FIX_0_541196100);
tmp2 = z1 + MULTIPLY(z3, - FIX_1_847759065); tmp2 = z1 + MULTIPLY(z3, - FIX_1_847759065);
tmp3 = z1 + MULTIPLY(z2, FIX_0_765366865); tmp3 = z1 + MULTIPLY(z2, FIX_0_765366865);
tmp0 = LEFT_SHIFT((INT32) wsptr[0] + (INT32) wsptr[4], CONST_BITS); tmp0 = LEFT_SHIFT((JLONG) wsptr[0] + (JLONG) wsptr[4], CONST_BITS);
tmp1 = LEFT_SHIFT((INT32) wsptr[0] - (INT32) wsptr[4], CONST_BITS); tmp1 = LEFT_SHIFT((JLONG) wsptr[0] - (JLONG) wsptr[4], CONST_BITS);
tmp10 = tmp0 + tmp3; tmp10 = tmp0 + tmp3;
tmp13 = tmp0 - tmp3; tmp13 = tmp0 - tmp3;
@@ -353,10 +353,10 @@ jpeg_idct_islow (j_decompress_ptr cinfo, jpeg_component_info * compptr,
* transpose is its inverse. i0..i3 are y7,y5,y3,y1 respectively. * transpose is its inverse. i0..i3 are y7,y5,y3,y1 respectively.
*/ */
tmp0 = (INT32) wsptr[7]; tmp0 = (JLONG) wsptr[7];
tmp1 = (INT32) wsptr[5]; tmp1 = (JLONG) wsptr[5];
tmp2 = (INT32) wsptr[3]; tmp2 = (JLONG) wsptr[3];
tmp3 = (INT32) wsptr[1]; tmp3 = (JLONG) wsptr[1];
z1 = tmp0 + tmp3; z1 = tmp0 + tmp3;
z2 = tmp1 + tmp2; z2 = tmp1 + tmp2;
@@ -428,8 +428,8 @@ jpeg_idct_7x7 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
JCOEFPTR coef_block, JCOEFPTR coef_block,
JSAMPARRAY output_buf, JDIMENSION output_col) JSAMPARRAY output_buf, JDIMENSION output_col)
{ {
INT32 tmp0, tmp1, tmp2, tmp10, tmp11, tmp12, tmp13; JLONG tmp0, tmp1, tmp2, tmp10, tmp11, tmp12, tmp13;
INT32 z1, z2, z3; JLONG z1, z2, z3;
JCOEFPTR inptr; JCOEFPTR inptr;
ISLOW_MULT_TYPE * quantptr; ISLOW_MULT_TYPE * quantptr;
int * wsptr; int * wsptr;
@@ -502,12 +502,12 @@ jpeg_idct_7x7 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
/* Even part */ /* Even part */
/* Add fudge factor here for final descale. */ /* Add fudge factor here for final descale. */
tmp13 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); tmp13 = (JLONG) wsptr[0] + (ONE << (PASS1_BITS+2));
tmp13 = LEFT_SHIFT(tmp13, CONST_BITS); tmp13 = LEFT_SHIFT(tmp13, CONST_BITS);
z1 = (INT32) wsptr[2]; z1 = (JLONG) wsptr[2];
z2 = (INT32) wsptr[4]; z2 = (JLONG) wsptr[4];
z3 = (INT32) wsptr[6]; z3 = (JLONG) wsptr[6];
tmp10 = MULTIPLY(z2 - z3, FIX(0.881747734)); /* c4 */ tmp10 = MULTIPLY(z2 - z3, FIX(0.881747734)); /* c4 */
tmp12 = MULTIPLY(z1 - z2, FIX(0.314692123)); /* c6 */ tmp12 = MULTIPLY(z1 - z2, FIX(0.314692123)); /* c6 */
@@ -521,9 +521,9 @@ jpeg_idct_7x7 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
/* Odd part */ /* Odd part */
z1 = (INT32) wsptr[1]; z1 = (JLONG) wsptr[1];
z2 = (INT32) wsptr[3]; z2 = (JLONG) wsptr[3];
z3 = (INT32) wsptr[5]; z3 = (JLONG) wsptr[5];
tmp1 = MULTIPLY(z1 + z2, FIX(0.935414347)); /* (c3+c1-c5)/2 */ tmp1 = MULTIPLY(z1 + z2, FIX(0.935414347)); /* (c3+c1-c5)/2 */
tmp2 = MULTIPLY(z1 - z2, FIX(0.170262339)); /* (c3+c5-c1)/2 */ tmp2 = MULTIPLY(z1 - z2, FIX(0.170262339)); /* (c3+c5-c1)/2 */
@@ -577,8 +577,8 @@ jpeg_idct_6x6 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
JCOEFPTR coef_block, JCOEFPTR coef_block,
JSAMPARRAY output_buf, JDIMENSION output_col) JSAMPARRAY output_buf, JDIMENSION output_col)
{ {
INT32 tmp0, tmp1, tmp2, tmp10, tmp11, tmp12; JLONG tmp0, tmp1, tmp2, tmp10, tmp11, tmp12;
INT32 z1, z2, z3; JLONG z1, z2, z3;
JCOEFPTR inptr; JCOEFPTR inptr;
ISLOW_MULT_TYPE * quantptr; ISLOW_MULT_TYPE * quantptr;
int * wsptr; int * wsptr;
@@ -638,22 +638,22 @@ jpeg_idct_6x6 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
/* Even part */ /* Even part */
/* Add fudge factor here for final descale. */ /* Add fudge factor here for final descale. */
tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); tmp0 = (JLONG) wsptr[0] + (ONE << (PASS1_BITS+2));
tmp0 = LEFT_SHIFT(tmp0, CONST_BITS); tmp0 = LEFT_SHIFT(tmp0, CONST_BITS);
tmp2 = (INT32) wsptr[4]; tmp2 = (JLONG) wsptr[4];
tmp10 = MULTIPLY(tmp2, FIX(0.707106781)); /* c4 */ tmp10 = MULTIPLY(tmp2, FIX(0.707106781)); /* c4 */
tmp1 = tmp0 + tmp10; tmp1 = tmp0 + tmp10;
tmp11 = tmp0 - tmp10 - tmp10; tmp11 = tmp0 - tmp10 - tmp10;
tmp10 = (INT32) wsptr[2]; tmp10 = (JLONG) wsptr[2];
tmp0 = MULTIPLY(tmp10, FIX(1.224744871)); /* c2 */ tmp0 = MULTIPLY(tmp10, FIX(1.224744871)); /* c2 */
tmp10 = tmp1 + tmp0; tmp10 = tmp1 + tmp0;
tmp12 = tmp1 - tmp0; tmp12 = tmp1 - tmp0;
/* Odd part */ /* Odd part */
z1 = (INT32) wsptr[1]; z1 = (JLONG) wsptr[1];
z2 = (INT32) wsptr[3]; z2 = (JLONG) wsptr[3];
z3 = (INT32) wsptr[5]; z3 = (JLONG) wsptr[5];
tmp1 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */ tmp1 = MULTIPLY(z1 + z3, FIX(0.366025404)); /* c5 */
tmp0 = tmp1 + LEFT_SHIFT(z1 + z2, CONST_BITS); tmp0 = tmp1 + LEFT_SHIFT(z1 + z2, CONST_BITS);
tmp2 = tmp1 + LEFT_SHIFT(z3 - z2, CONST_BITS); tmp2 = tmp1 + LEFT_SHIFT(z3 - z2, CONST_BITS);
@@ -698,8 +698,8 @@ jpeg_idct_5x5 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
JCOEFPTR coef_block, JCOEFPTR coef_block,
JSAMPARRAY output_buf, JDIMENSION output_col) JSAMPARRAY output_buf, JDIMENSION output_col)
{ {
INT32 tmp0, tmp1, tmp10, tmp11, tmp12; JLONG tmp0, tmp1, tmp10, tmp11, tmp12;
INT32 z1, z2, z3; JLONG z1, z2, z3;
JCOEFPTR inptr; JCOEFPTR inptr;
ISLOW_MULT_TYPE * quantptr; ISLOW_MULT_TYPE * quantptr;
int * wsptr; int * wsptr;
@@ -757,10 +757,10 @@ jpeg_idct_5x5 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
/* Even part */ /* Even part */
/* Add fudge factor here for final descale. */ /* Add fudge factor here for final descale. */
tmp12 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); tmp12 = (JLONG) wsptr[0] + (ONE << (PASS1_BITS+2));
tmp12 = LEFT_SHIFT(tmp12, CONST_BITS); tmp12 = LEFT_SHIFT(tmp12, CONST_BITS);
tmp0 = (INT32) wsptr[2]; tmp0 = (JLONG) wsptr[2];
tmp1 = (INT32) wsptr[4]; tmp1 = (JLONG) wsptr[4];
z1 = MULTIPLY(tmp0 + tmp1, FIX(0.790569415)); /* (c2+c4)/2 */ z1 = MULTIPLY(tmp0 + tmp1, FIX(0.790569415)); /* (c2+c4)/2 */
z2 = MULTIPLY(tmp0 - tmp1, FIX(0.353553391)); /* (c2-c4)/2 */ z2 = MULTIPLY(tmp0 - tmp1, FIX(0.353553391)); /* (c2-c4)/2 */
z3 = tmp12 + z2; z3 = tmp12 + z2;
@@ -770,8 +770,8 @@ jpeg_idct_5x5 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
/* Odd part */ /* Odd part */
z2 = (INT32) wsptr[1]; z2 = (JLONG) wsptr[1];
z3 = (INT32) wsptr[3]; z3 = (JLONG) wsptr[3];
z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c3 */ z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c3 */
tmp0 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c1-c3 */ tmp0 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c1-c3 */
@@ -813,7 +813,7 @@ jpeg_idct_3x3 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
JCOEFPTR coef_block, JCOEFPTR coef_block,
JSAMPARRAY output_buf, JDIMENSION output_col) JSAMPARRAY output_buf, JDIMENSION output_col)
{ {
INT32 tmp0, tmp2, tmp10, tmp12; JLONG tmp0, tmp2, tmp10, tmp12;
JCOEFPTR inptr; JCOEFPTR inptr;
ISLOW_MULT_TYPE * quantptr; ISLOW_MULT_TYPE * quantptr;
int * wsptr; int * wsptr;
@@ -861,16 +861,16 @@ jpeg_idct_3x3 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
/* Even part */ /* Even part */
/* Add fudge factor here for final descale. */ /* Add fudge factor here for final descale. */
tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); tmp0 = (JLONG) wsptr[0] + (ONE << (PASS1_BITS+2));
tmp0 = LEFT_SHIFT(tmp0, CONST_BITS); tmp0 = LEFT_SHIFT(tmp0, CONST_BITS);
tmp2 = (INT32) wsptr[2]; tmp2 = (JLONG) wsptr[2];
tmp12 = MULTIPLY(tmp2, FIX(0.707106781)); /* c2 */ tmp12 = MULTIPLY(tmp2, FIX(0.707106781)); /* c2 */
tmp10 = tmp0 + tmp12; tmp10 = tmp0 + tmp12;
tmp2 = tmp0 - tmp12 - tmp12; tmp2 = tmp0 - tmp12 - tmp12;
/* Odd part */ /* Odd part */
tmp12 = (INT32) wsptr[1]; tmp12 = (JLONG) wsptr[1];
tmp0 = MULTIPLY(tmp12, FIX(1.224744871)); /* c1 */ tmp0 = MULTIPLY(tmp12, FIX(1.224744871)); /* c1 */
/* Final output stage */ /* Final output stage */
@@ -903,8 +903,8 @@ jpeg_idct_9x9 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
JCOEFPTR coef_block, JCOEFPTR coef_block,
JSAMPARRAY output_buf, JDIMENSION output_col) JSAMPARRAY output_buf, JDIMENSION output_col)
{ {
INT32 tmp0, tmp1, tmp2, tmp3, tmp10, tmp11, tmp12, tmp13, tmp14; JLONG tmp0, tmp1, tmp2, tmp3, tmp10, tmp11, tmp12, tmp13, tmp14;
INT32 z1, z2, z3, z4; JLONG z1, z2, z3, z4;
JCOEFPTR inptr; JCOEFPTR inptr;
ISLOW_MULT_TYPE * quantptr; ISLOW_MULT_TYPE * quantptr;
int * wsptr; int * wsptr;
@@ -986,12 +986,12 @@ jpeg_idct_9x9 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
/* Even part */ /* Even part */
/* Add fudge factor here for final descale. */ /* Add fudge factor here for final descale. */
tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); tmp0 = (JLONG) wsptr[0] + (ONE << (PASS1_BITS+2));
tmp0 = LEFT_SHIFT(tmp0, CONST_BITS); tmp0 = LEFT_SHIFT(tmp0, CONST_BITS);
z1 = (INT32) wsptr[2]; z1 = (JLONG) wsptr[2];
z2 = (INT32) wsptr[4]; z2 = (JLONG) wsptr[4];
z3 = (INT32) wsptr[6]; z3 = (JLONG) wsptr[6];
tmp3 = MULTIPLY(z3, FIX(0.707106781)); /* c6 */ tmp3 = MULTIPLY(z3, FIX(0.707106781)); /* c6 */
tmp1 = tmp0 + tmp3; tmp1 = tmp0 + tmp3;
@@ -1011,10 +1011,10 @@ jpeg_idct_9x9 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
/* Odd part */ /* Odd part */
z1 = (INT32) wsptr[1]; z1 = (JLONG) wsptr[1];
z2 = (INT32) wsptr[3]; z2 = (JLONG) wsptr[3];
z3 = (INT32) wsptr[5]; z3 = (JLONG) wsptr[5];
z4 = (INT32) wsptr[7]; z4 = (JLONG) wsptr[7];
z2 = MULTIPLY(z2, - FIX(1.224744871)); /* -c3 */ z2 = MULTIPLY(z2, - FIX(1.224744871)); /* -c3 */
@@ -1074,9 +1074,9 @@ jpeg_idct_10x10 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
JCOEFPTR coef_block, JCOEFPTR coef_block,
JSAMPARRAY output_buf, JDIMENSION output_col) JSAMPARRAY output_buf, JDIMENSION output_col)
{ {
INT32 tmp10, tmp11, tmp12, tmp13, tmp14; JLONG tmp10, tmp11, tmp12, tmp13, tmp14;
INT32 tmp20, tmp21, tmp22, tmp23, tmp24; JLONG tmp20, tmp21, tmp22, tmp23, tmp24;
INT32 z1, z2, z3, z4, z5; JLONG z1, z2, z3, z4, z5;
JCOEFPTR inptr; JCOEFPTR inptr;
ISLOW_MULT_TYPE * quantptr; ISLOW_MULT_TYPE * quantptr;
int * wsptr; int * wsptr;
@@ -1169,9 +1169,9 @@ jpeg_idct_10x10 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
/* Even part */ /* Even part */
/* Add fudge factor here for final descale. */ /* Add fudge factor here for final descale. */
z3 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); z3 = (JLONG) wsptr[0] + (ONE << (PASS1_BITS+2));
z3 = LEFT_SHIFT(z3, CONST_BITS); z3 = LEFT_SHIFT(z3, CONST_BITS);
z4 = (INT32) wsptr[4]; z4 = (JLONG) wsptr[4];
z1 = MULTIPLY(z4, FIX(1.144122806)); /* c4 */ z1 = MULTIPLY(z4, FIX(1.144122806)); /* c4 */
z2 = MULTIPLY(z4, FIX(0.437016024)); /* c8 */ z2 = MULTIPLY(z4, FIX(0.437016024)); /* c8 */
tmp10 = z3 + z1; tmp10 = z3 + z1;
@@ -1179,8 +1179,8 @@ jpeg_idct_10x10 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
tmp22 = z3 - LEFT_SHIFT(z1 - z2, 1); /* c0 = (c4-c8)*2 */ tmp22 = z3 - LEFT_SHIFT(z1 - z2, 1); /* c0 = (c4-c8)*2 */
z2 = (INT32) wsptr[2]; z2 = (JLONG) wsptr[2];
z3 = (INT32) wsptr[6]; z3 = (JLONG) wsptr[6];
z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c6 */ z1 = MULTIPLY(z2 + z3, FIX(0.831253876)); /* c6 */
tmp12 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c2-c6 */ tmp12 = z1 + MULTIPLY(z2, FIX(0.513743148)); /* c2-c6 */
@@ -1193,11 +1193,11 @@ jpeg_idct_10x10 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
/* Odd part */ /* Odd part */
z1 = (INT32) wsptr[1]; z1 = (JLONG) wsptr[1];
z2 = (INT32) wsptr[3]; z2 = (JLONG) wsptr[3];
z3 = (INT32) wsptr[5]; z3 = (JLONG) wsptr[5];
z3 = LEFT_SHIFT(z3, CONST_BITS); z3 = LEFT_SHIFT(z3, CONST_BITS);
z4 = (INT32) wsptr[7]; z4 = (JLONG) wsptr[7];
tmp11 = z2 + z4; tmp11 = z2 + z4;
tmp13 = z2 - z4; tmp13 = z2 - z4;
@@ -1269,9 +1269,9 @@ jpeg_idct_11x11 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
JCOEFPTR coef_block, JCOEFPTR coef_block,
JSAMPARRAY output_buf, JDIMENSION output_col) JSAMPARRAY output_buf, JDIMENSION output_col)
{ {
INT32 tmp10, tmp11, tmp12, tmp13, tmp14; JLONG tmp10, tmp11, tmp12, tmp13, tmp14;
INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25; JLONG tmp20, tmp21, tmp22, tmp23, tmp24, tmp25;
INT32 z1, z2, z3, z4; JLONG z1, z2, z3, z4;
JCOEFPTR inptr; JCOEFPTR inptr;
ISLOW_MULT_TYPE * quantptr; ISLOW_MULT_TYPE * quantptr;
int * wsptr; int * wsptr;
@@ -1362,12 +1362,12 @@ jpeg_idct_11x11 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
/* Even part */ /* Even part */
/* Add fudge factor here for final descale. */ /* Add fudge factor here for final descale. */
tmp10 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); tmp10 = (JLONG) wsptr[0] + (ONE << (PASS1_BITS+2));
tmp10 = LEFT_SHIFT(tmp10, CONST_BITS); tmp10 = LEFT_SHIFT(tmp10, CONST_BITS);
z1 = (INT32) wsptr[2]; z1 = (JLONG) wsptr[2];
z2 = (INT32) wsptr[4]; z2 = (JLONG) wsptr[4];
z3 = (INT32) wsptr[6]; z3 = (JLONG) wsptr[6];
tmp20 = MULTIPLY(z2 - z3, FIX(2.546640132)); /* c2+c4 */ tmp20 = MULTIPLY(z2 - z3, FIX(2.546640132)); /* c2+c4 */
tmp23 = MULTIPLY(z2 - z1, FIX(0.430815045)); /* c2-c6 */ tmp23 = MULTIPLY(z2 - z1, FIX(0.430815045)); /* c2-c6 */
@@ -1387,10 +1387,10 @@ jpeg_idct_11x11 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
/* Odd part */ /* Odd part */
z1 = (INT32) wsptr[1]; z1 = (JLONG) wsptr[1];
z2 = (INT32) wsptr[3]; z2 = (JLONG) wsptr[3];
z3 = (INT32) wsptr[5]; z3 = (JLONG) wsptr[5];
z4 = (INT32) wsptr[7]; z4 = (JLONG) wsptr[7];
tmp11 = z1 + z2; tmp11 = z1 + z2;
tmp14 = MULTIPLY(tmp11 + z3 + z4, FIX(0.398430003)); /* c9 */ tmp14 = MULTIPLY(tmp11 + z3 + z4, FIX(0.398430003)); /* c9 */
@@ -1463,9 +1463,9 @@ jpeg_idct_12x12 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
JCOEFPTR coef_block, JCOEFPTR coef_block,
JSAMPARRAY output_buf, JDIMENSION output_col) JSAMPARRAY output_buf, JDIMENSION output_col)
{ {
INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15; JLONG tmp10, tmp11, tmp12, tmp13, tmp14, tmp15;
INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25; JLONG tmp20, tmp21, tmp22, tmp23, tmp24, tmp25;
INT32 z1, z2, z3, z4; JLONG z1, z2, z3, z4;
JCOEFPTR inptr; JCOEFPTR inptr;
ISLOW_MULT_TYPE * quantptr; ISLOW_MULT_TYPE * quantptr;
int * wsptr; int * wsptr;
@@ -1566,19 +1566,19 @@ jpeg_idct_12x12 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
/* Even part */ /* Even part */
/* Add fudge factor here for final descale. */ /* Add fudge factor here for final descale. */
z3 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); z3 = (JLONG) wsptr[0] + (ONE << (PASS1_BITS+2));
z3 = LEFT_SHIFT(z3, CONST_BITS); z3 = LEFT_SHIFT(z3, CONST_BITS);
z4 = (INT32) wsptr[4]; z4 = (JLONG) wsptr[4];
z4 = MULTIPLY(z4, FIX(1.224744871)); /* c4 */ z4 = MULTIPLY(z4, FIX(1.224744871)); /* c4 */
tmp10 = z3 + z4; tmp10 = z3 + z4;
tmp11 = z3 - z4; tmp11 = z3 - z4;
z1 = (INT32) wsptr[2]; z1 = (JLONG) wsptr[2];
z4 = MULTIPLY(z1, FIX(1.366025404)); /* c2 */ z4 = MULTIPLY(z1, FIX(1.366025404)); /* c2 */
z1 = LEFT_SHIFT(z1, CONST_BITS); z1 = LEFT_SHIFT(z1, CONST_BITS);
z2 = (INT32) wsptr[6]; z2 = (JLONG) wsptr[6];
z2 = LEFT_SHIFT(z2, CONST_BITS); z2 = LEFT_SHIFT(z2, CONST_BITS);
tmp12 = z1 - z2; tmp12 = z1 - z2;
@@ -1598,10 +1598,10 @@ jpeg_idct_12x12 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
/* Odd part */ /* Odd part */
z1 = (INT32) wsptr[1]; z1 = (JLONG) wsptr[1];
z2 = (INT32) wsptr[3]; z2 = (JLONG) wsptr[3];
z3 = (INT32) wsptr[5]; z3 = (JLONG) wsptr[5];
z4 = (INT32) wsptr[7]; z4 = (JLONG) wsptr[7];
tmp11 = MULTIPLY(z2, FIX(1.306562965)); /* c3 */ tmp11 = MULTIPLY(z2, FIX(1.306562965)); /* c3 */
tmp14 = MULTIPLY(z2, - FIX_0_541196100); /* -c9 */ tmp14 = MULTIPLY(z2, - FIX_0_541196100); /* -c9 */
@@ -1679,9 +1679,9 @@ jpeg_idct_13x13 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
JCOEFPTR coef_block, JCOEFPTR coef_block,
JSAMPARRAY output_buf, JDIMENSION output_col) JSAMPARRAY output_buf, JDIMENSION output_col)
{ {
INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15; JLONG tmp10, tmp11, tmp12, tmp13, tmp14, tmp15;
INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26; JLONG tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26;
INT32 z1, z2, z3, z4; JLONG z1, z2, z3, z4;
JCOEFPTR inptr; JCOEFPTR inptr;
ISLOW_MULT_TYPE * quantptr; ISLOW_MULT_TYPE * quantptr;
int * wsptr; int * wsptr;
@@ -1787,12 +1787,12 @@ jpeg_idct_13x13 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
/* Even part */ /* Even part */
/* Add fudge factor here for final descale. */ /* Add fudge factor here for final descale. */
z1 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); z1 = (JLONG) wsptr[0] + (ONE << (PASS1_BITS+2));
z1 = LEFT_SHIFT(z1, CONST_BITS); z1 = LEFT_SHIFT(z1, CONST_BITS);
z2 = (INT32) wsptr[2]; z2 = (JLONG) wsptr[2];
z3 = (INT32) wsptr[4]; z3 = (JLONG) wsptr[4];
z4 = (INT32) wsptr[6]; z4 = (JLONG) wsptr[6];
tmp10 = z3 + z4; tmp10 = z3 + z4;
tmp11 = z3 - z4; tmp11 = z3 - z4;
@@ -1819,10 +1819,10 @@ jpeg_idct_13x13 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
/* Odd part */ /* Odd part */
z1 = (INT32) wsptr[1]; z1 = (JLONG) wsptr[1];
z2 = (INT32) wsptr[3]; z2 = (JLONG) wsptr[3];
z3 = (INT32) wsptr[5]; z3 = (JLONG) wsptr[5];
z4 = (INT32) wsptr[7]; z4 = (JLONG) wsptr[7];
tmp11 = MULTIPLY(z1 + z2, FIX(1.322312651)); /* c3 */ tmp11 = MULTIPLY(z1 + z2, FIX(1.322312651)); /* c3 */
tmp12 = MULTIPLY(z1 + z3, FIX(1.163874945)); /* c5 */ tmp12 = MULTIPLY(z1 + z3, FIX(1.163874945)); /* c5 */
@@ -1907,9 +1907,9 @@ jpeg_idct_14x14 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
JCOEFPTR coef_block, JCOEFPTR coef_block,
JSAMPARRAY output_buf, JDIMENSION output_col) JSAMPARRAY output_buf, JDIMENSION output_col)
{ {
INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16; JLONG tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16;
INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26; JLONG tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26;
INT32 z1, z2, z3, z4; JLONG z1, z2, z3, z4;
JCOEFPTR inptr; JCOEFPTR inptr;
ISLOW_MULT_TYPE * quantptr; ISLOW_MULT_TYPE * quantptr;
int * wsptr; int * wsptr;
@@ -2014,9 +2014,9 @@ jpeg_idct_14x14 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
/* Even part */ /* Even part */
/* Add fudge factor here for final descale. */ /* Add fudge factor here for final descale. */
z1 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); z1 = (JLONG) wsptr[0] + (ONE << (PASS1_BITS+2));
z1 = LEFT_SHIFT(z1, CONST_BITS); z1 = LEFT_SHIFT(z1, CONST_BITS);
z4 = (INT32) wsptr[4]; z4 = (JLONG) wsptr[4];
z2 = MULTIPLY(z4, FIX(1.274162392)); /* c4 */ z2 = MULTIPLY(z4, FIX(1.274162392)); /* c4 */
z3 = MULTIPLY(z4, FIX(0.314692123)); /* c12 */ z3 = MULTIPLY(z4, FIX(0.314692123)); /* c12 */
z4 = MULTIPLY(z4, FIX(0.881747734)); /* c8 */ z4 = MULTIPLY(z4, FIX(0.881747734)); /* c8 */
@@ -2027,8 +2027,8 @@ jpeg_idct_14x14 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
tmp23 = z1 - LEFT_SHIFT(z2 + z3 - z4, 1); /* c0 = (c4+c12-c8)*2 */ tmp23 = z1 - LEFT_SHIFT(z2 + z3 - z4, 1); /* c0 = (c4+c12-c8)*2 */
z1 = (INT32) wsptr[2]; z1 = (JLONG) wsptr[2];
z2 = (INT32) wsptr[6]; z2 = (JLONG) wsptr[6];
z3 = MULTIPLY(z1 + z2, FIX(1.105676686)); /* c6 */ z3 = MULTIPLY(z1 + z2, FIX(1.105676686)); /* c6 */
@@ -2046,10 +2046,10 @@ jpeg_idct_14x14 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
/* Odd part */ /* Odd part */
z1 = (INT32) wsptr[1]; z1 = (JLONG) wsptr[1];
z2 = (INT32) wsptr[3]; z2 = (JLONG) wsptr[3];
z3 = (INT32) wsptr[5]; z3 = (JLONG) wsptr[5];
z4 = (INT32) wsptr[7]; z4 = (JLONG) wsptr[7];
z4 = LEFT_SHIFT(z4, CONST_BITS); z4 = LEFT_SHIFT(z4, CONST_BITS);
tmp14 = z1 + z3; tmp14 = z1 + z3;
@@ -2133,9 +2133,9 @@ jpeg_idct_15x15 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
JCOEFPTR coef_block, JCOEFPTR coef_block,
JSAMPARRAY output_buf, JDIMENSION output_col) JSAMPARRAY output_buf, JDIMENSION output_col)
{ {
INT32 tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16; JLONG tmp10, tmp11, tmp12, tmp13, tmp14, tmp15, tmp16;
INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26, tmp27; JLONG tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26, tmp27;
INT32 z1, z2, z3, z4; JLONG z1, z2, z3, z4;
JCOEFPTR inptr; JCOEFPTR inptr;
ISLOW_MULT_TYPE * quantptr; ISLOW_MULT_TYPE * quantptr;
int * wsptr; int * wsptr;
@@ -2246,12 +2246,12 @@ jpeg_idct_15x15 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
/* Even part */ /* Even part */
/* Add fudge factor here for final descale. */ /* Add fudge factor here for final descale. */
z1 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); z1 = (JLONG) wsptr[0] + (ONE << (PASS1_BITS+2));
z1 = LEFT_SHIFT(z1, CONST_BITS); z1 = LEFT_SHIFT(z1, CONST_BITS);
z2 = (INT32) wsptr[2]; z2 = (JLONG) wsptr[2];
z3 = (INT32) wsptr[4]; z3 = (JLONG) wsptr[4];
z4 = (INT32) wsptr[6]; z4 = (JLONG) wsptr[6];
tmp10 = MULTIPLY(z4, FIX(0.437016024)); /* c12 */ tmp10 = MULTIPLY(z4, FIX(0.437016024)); /* c12 */
tmp11 = MULTIPLY(z4, FIX(1.144122806)); /* c6 */ tmp11 = MULTIPLY(z4, FIX(1.144122806)); /* c6 */
@@ -2286,11 +2286,11 @@ jpeg_idct_15x15 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
/* Odd part */ /* Odd part */
z1 = (INT32) wsptr[1]; z1 = (JLONG) wsptr[1];
z2 = (INT32) wsptr[3]; z2 = (JLONG) wsptr[3];
z4 = (INT32) wsptr[5]; z4 = (JLONG) wsptr[5];
z3 = MULTIPLY(z4, FIX(1.224744871)); /* c5 */ z3 = MULTIPLY(z4, FIX(1.224744871)); /* c5 */
z4 = (INT32) wsptr[7]; z4 = (JLONG) wsptr[7];
tmp13 = z2 - z4; tmp13 = z2 - z4;
tmp15 = MULTIPLY(z1 + tmp13, FIX(0.831253876)); /* c9 */ tmp15 = MULTIPLY(z1 + tmp13, FIX(0.831253876)); /* c9 */
@@ -2375,9 +2375,9 @@ jpeg_idct_16x16 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
JCOEFPTR coef_block, JCOEFPTR coef_block,
JSAMPARRAY output_buf, JDIMENSION output_col) JSAMPARRAY output_buf, JDIMENSION output_col)
{ {
INT32 tmp0, tmp1, tmp2, tmp3, tmp10, tmp11, tmp12, tmp13; JLONG tmp0, tmp1, tmp2, tmp3, tmp10, tmp11, tmp12, tmp13;
INT32 tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26, tmp27; JLONG tmp20, tmp21, tmp22, tmp23, tmp24, tmp25, tmp26, tmp27;
INT32 z1, z2, z3, z4; JLONG z1, z2, z3, z4;
JCOEFPTR inptr; JCOEFPTR inptr;
ISLOW_MULT_TYPE * quantptr; ISLOW_MULT_TYPE * quantptr;
int * wsptr; int * wsptr;
@@ -2497,10 +2497,10 @@ jpeg_idct_16x16 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
/* Even part */ /* Even part */
/* Add fudge factor here for final descale. */ /* Add fudge factor here for final descale. */
tmp0 = (INT32) wsptr[0] + (ONE << (PASS1_BITS+2)); tmp0 = (JLONG) wsptr[0] + (ONE << (PASS1_BITS+2));
tmp0 = LEFT_SHIFT(tmp0, CONST_BITS); tmp0 = LEFT_SHIFT(tmp0, CONST_BITS);
z1 = (INT32) wsptr[4]; z1 = (JLONG) wsptr[4];
tmp1 = MULTIPLY(z1, FIX(1.306562965)); /* c4[16] = c2[8] */ tmp1 = MULTIPLY(z1, FIX(1.306562965)); /* c4[16] = c2[8] */
tmp2 = MULTIPLY(z1, FIX_0_541196100); /* c12[16] = c6[8] */ tmp2 = MULTIPLY(z1, FIX_0_541196100); /* c12[16] = c6[8] */
@@ -2509,8 +2509,8 @@ jpeg_idct_16x16 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
tmp12 = tmp0 + tmp2; tmp12 = tmp0 + tmp2;
tmp13 = tmp0 - tmp2; tmp13 = tmp0 - tmp2;
z1 = (INT32) wsptr[2]; z1 = (JLONG) wsptr[2];
z2 = (INT32) wsptr[6]; z2 = (JLONG) wsptr[6];
z3 = z1 - z2; z3 = z1 - z2;
z4 = MULTIPLY(z3, FIX(0.275899379)); /* c14[16] = c7[8] */ z4 = MULTIPLY(z3, FIX(0.275899379)); /* c14[16] = c7[8] */
z3 = MULTIPLY(z3, FIX(1.387039845)); /* c2[16] = c1[8] */ z3 = MULTIPLY(z3, FIX(1.387039845)); /* c2[16] = c1[8] */
@@ -2531,10 +2531,10 @@ jpeg_idct_16x16 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
/* Odd part */ /* Odd part */
z1 = (INT32) wsptr[1]; z1 = (JLONG) wsptr[1];
z2 = (INT32) wsptr[3]; z2 = (JLONG) wsptr[3];
z3 = (INT32) wsptr[5]; z3 = (JLONG) wsptr[5];
z4 = (INT32) wsptr[7]; z4 = (JLONG) wsptr[7];
tmp11 = z1 + z3; tmp11 = z1 + z3;

View File

@@ -58,20 +58,20 @@
*/ */
#if CONST_BITS == 13 #if CONST_BITS == 13
#define FIX_0_211164243 ((INT32) 1730) /* FIX(0.211164243) */ #define FIX_0_211164243 ((JLONG) 1730) /* FIX(0.211164243) */
#define FIX_0_509795579 ((INT32) 4176) /* FIX(0.509795579) */ #define FIX_0_509795579 ((JLONG) 4176) /* FIX(0.509795579) */
#define FIX_0_601344887 ((INT32) 4926) /* FIX(0.601344887) */ #define FIX_0_601344887 ((JLONG) 4926) /* FIX(0.601344887) */
#define FIX_0_720959822 ((INT32) 5906) /* FIX(0.720959822) */ #define FIX_0_720959822 ((JLONG) 5906) /* FIX(0.720959822) */
#define FIX_0_765366865 ((INT32) 6270) /* FIX(0.765366865) */ #define FIX_0_765366865 ((JLONG) 6270) /* FIX(0.765366865) */
#define FIX_0_850430095 ((INT32) 6967) /* FIX(0.850430095) */ #define FIX_0_850430095 ((JLONG) 6967) /* FIX(0.850430095) */
#define FIX_0_899976223 ((INT32) 7373) /* FIX(0.899976223) */ #define FIX_0_899976223 ((JLONG) 7373) /* FIX(0.899976223) */
#define FIX_1_061594337 ((INT32) 8697) /* FIX(1.061594337) */ #define FIX_1_061594337 ((JLONG) 8697) /* FIX(1.061594337) */
#define FIX_1_272758580 ((INT32) 10426) /* FIX(1.272758580) */ #define FIX_1_272758580 ((JLONG) 10426) /* FIX(1.272758580) */
#define FIX_1_451774981 ((INT32) 11893) /* FIX(1.451774981) */ #define FIX_1_451774981 ((JLONG) 11893) /* FIX(1.451774981) */
#define FIX_1_847759065 ((INT32) 15137) /* FIX(1.847759065) */ #define FIX_1_847759065 ((JLONG) 15137) /* FIX(1.847759065) */
#define FIX_2_172734803 ((INT32) 17799) /* FIX(2.172734803) */ #define FIX_2_172734803 ((JLONG) 17799) /* FIX(2.172734803) */
#define FIX_2_562915447 ((INT32) 20995) /* FIX(2.562915447) */ #define FIX_2_562915447 ((JLONG) 20995) /* FIX(2.562915447) */
#define FIX_3_624509785 ((INT32) 29692) /* FIX(3.624509785) */ #define FIX_3_624509785 ((JLONG) 29692) /* FIX(3.624509785) */
#else #else
#define FIX_0_211164243 FIX(0.211164243) #define FIX_0_211164243 FIX(0.211164243)
#define FIX_0_509795579 FIX(0.509795579) #define FIX_0_509795579 FIX(0.509795579)
@@ -90,7 +90,7 @@
#endif #endif
/* Multiply an INT32 variable by an INT32 constant to yield an INT32 result. /* Multiply a JLONG variable by a JLONG constant to yield a JLONG result.
* For 8-bit samples with the recommended scaling, all the variable * For 8-bit samples with the recommended scaling, all the variable
* and constant values involved are no more than 16 bits wide, so a * and constant values involved are no more than 16 bits wide, so a
* 16x16->32 bit multiply can be used instead of a full 32x32 multiply. * 16x16->32 bit multiply can be used instead of a full 32x32 multiply.
@@ -122,8 +122,8 @@ jpeg_idct_4x4 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
JCOEFPTR coef_block, JCOEFPTR coef_block,
JSAMPARRAY output_buf, JDIMENSION output_col) JSAMPARRAY output_buf, JDIMENSION output_col)
{ {
INT32 tmp0, tmp2, tmp10, tmp12; JLONG tmp0, tmp2, tmp10, tmp12;
INT32 z1, z2, z3, z4; JLONG z1, z2, z3, z4;
JCOEFPTR inptr; JCOEFPTR inptr;
ISLOW_MULT_TYPE * quantptr; ISLOW_MULT_TYPE * quantptr;
int * wsptr; int * wsptr;
@@ -206,7 +206,7 @@ jpeg_idct_4x4 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
if (wsptr[1] == 0 && wsptr[2] == 0 && wsptr[3] == 0 && if (wsptr[1] == 0 && wsptr[2] == 0 && wsptr[3] == 0 &&
wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) { wsptr[5] == 0 && wsptr[6] == 0 && wsptr[7] == 0) {
/* AC terms all zero */ /* AC terms all zero */
JSAMPLE dcval = range_limit[(int) DESCALE((INT32) wsptr[0], PASS1_BITS+3) JSAMPLE dcval = range_limit[(int) DESCALE((JLONG) wsptr[0], PASS1_BITS+3)
& RANGE_MASK]; & RANGE_MASK];
outptr[0] = dcval; outptr[0] = dcval;
@@ -221,20 +221,20 @@ jpeg_idct_4x4 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
/* Even part */ /* Even part */
tmp0 = LEFT_SHIFT((INT32) wsptr[0], CONST_BITS+1); tmp0 = LEFT_SHIFT((JLONG) wsptr[0], CONST_BITS+1);
tmp2 = MULTIPLY((INT32) wsptr[2], FIX_1_847759065) tmp2 = MULTIPLY((JLONG) wsptr[2], FIX_1_847759065)
+ MULTIPLY((INT32) wsptr[6], - FIX_0_765366865); + MULTIPLY((JLONG) wsptr[6], - FIX_0_765366865);
tmp10 = tmp0 + tmp2; tmp10 = tmp0 + tmp2;
tmp12 = tmp0 - tmp2; tmp12 = tmp0 - tmp2;
/* Odd part */ /* Odd part */
z1 = (INT32) wsptr[7]; z1 = (JLONG) wsptr[7];
z2 = (INT32) wsptr[5]; z2 = (JLONG) wsptr[5];
z3 = (INT32) wsptr[3]; z3 = (JLONG) wsptr[3];
z4 = (INT32) wsptr[1]; z4 = (JLONG) wsptr[1];
tmp0 = MULTIPLY(z1, - FIX_0_211164243) /* sqrt(2) * (c3-c1) */ tmp0 = MULTIPLY(z1, - FIX_0_211164243) /* sqrt(2) * (c3-c1) */
+ MULTIPLY(z2, FIX_1_451774981) /* sqrt(2) * (c3+c7) */ + MULTIPLY(z2, FIX_1_451774981) /* sqrt(2) * (c3+c7) */
@@ -276,7 +276,7 @@ jpeg_idct_2x2 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
JCOEFPTR coef_block, JCOEFPTR coef_block,
JSAMPARRAY output_buf, JDIMENSION output_col) JSAMPARRAY output_buf, JDIMENSION output_col)
{ {
INT32 tmp0, tmp10, z1; JLONG tmp0, tmp10, z1;
JCOEFPTR inptr; JCOEFPTR inptr;
ISLOW_MULT_TYPE * quantptr; ISLOW_MULT_TYPE * quantptr;
int * wsptr; int * wsptr;
@@ -339,7 +339,7 @@ jpeg_idct_2x2 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
#ifndef NO_ZERO_ROW_TEST #ifndef NO_ZERO_ROW_TEST
if (wsptr[1] == 0 && wsptr[3] == 0 && wsptr[5] == 0 && wsptr[7] == 0) { if (wsptr[1] == 0 && wsptr[3] == 0 && wsptr[5] == 0 && wsptr[7] == 0) {
/* AC terms all zero */ /* AC terms all zero */
JSAMPLE dcval = range_limit[(int) DESCALE((INT32) wsptr[0], PASS1_BITS+3) JSAMPLE dcval = range_limit[(int) DESCALE((JLONG) wsptr[0], PASS1_BITS+3)
& RANGE_MASK]; & RANGE_MASK];
outptr[0] = dcval; outptr[0] = dcval;
@@ -352,14 +352,14 @@ jpeg_idct_2x2 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
/* Even part */ /* Even part */
tmp10 = LEFT_SHIFT((INT32) wsptr[0], CONST_BITS+2); tmp10 = LEFT_SHIFT((JLONG) wsptr[0], CONST_BITS+2);
/* Odd part */ /* Odd part */
tmp0 = MULTIPLY((INT32) wsptr[7], - FIX_0_720959822) /* sqrt(2) * (c7-c5+c3-c1) */ tmp0 = MULTIPLY((JLONG) wsptr[7], - FIX_0_720959822) /* sqrt(2) * (c7-c5+c3-c1) */
+ MULTIPLY((INT32) wsptr[5], FIX_0_850430095) /* sqrt(2) * (-c1+c3+c5+c7) */ + MULTIPLY((JLONG) wsptr[5], FIX_0_850430095) /* sqrt(2) * (-c1+c3+c5+c7) */
+ MULTIPLY((INT32) wsptr[3], - FIX_1_272758580) /* sqrt(2) * (-c1+c3-c5-c7) */ + MULTIPLY((JLONG) wsptr[3], - FIX_1_272758580) /* sqrt(2) * (-c1+c3-c5-c7) */
+ MULTIPLY((INT32) wsptr[1], FIX_3_624509785); /* sqrt(2) * (c1+c3+c5+c7) */ + MULTIPLY((JLONG) wsptr[1], FIX_3_624509785); /* sqrt(2) * (c1+c3+c5+c7) */
/* Final output stage */ /* Final output stage */
@@ -395,7 +395,7 @@ jpeg_idct_1x1 (j_decompress_ptr cinfo, jpeg_component_info * compptr,
*/ */
quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table; quantptr = (ISLOW_MULT_TYPE *) compptr->dct_table;
dcval = DEQUANTIZE(coef_block[0], quantptr[0]); dcval = DEQUANTIZE(coef_block[0], quantptr[0]);
dcval = (int) DESCALE((INT32) dcval, 3); dcval = (int) DESCALE((JLONG) dcval, 3);
output_buf[0][output_col] = range_limit[dcval & RANGE_MASK]; output_buf[0][output_col] = range_limit[dcval & RANGE_MASK];
} }

View File

@@ -147,13 +147,35 @@ typedef unsigned int UINT16;
typedef short INT16; typedef short INT16;
#endif #endif
/* INT32 must hold at least signed 32-bit values. */ /* INT32 must hold at least signed 32-bit values.
*
* NOTE: The INT32 typedef dates back to libjpeg v5 (1994.) Integers were
* sometimes 16-bit back then (MS-DOS), which is why INT32 is typedef'd to
* long. It also wasn't common (or at least as common) in 1994 for INT32 to be
* defined by platform headers. Since then, however, INT32 is defined in
* several other common places:
*
* Xmd.h (X11 header) typedefs INT32 to int on 64-bit platforms and long on
* 32-bit platforms (i.e always a 32-bit signed type.)
*
* basetsd.h (Win32 header) typedefs INT32 to int (always a 32-bit signed type
* on modern platforms.)
*
* qglobal.h (Qt header) typedefs INT32 to int (always a 32-bit signed type on
* modern platforms.)
*
* This is a recipe for conflict, since "long" and "int" aren't always
* compatible types. Since the definition of INT32 has technically been part
* of the libjpeg API for more than 20 years, we can't remove it, but we do not
* use it internally any longer. We instead define a separate type (JLONG)
* for internal use, which ensures that internal behavior will always be the
* same regardless of any external headers that may be included.
*/
#ifndef XMD_H /* X11/xmd.h correctly defines INT32 */ #ifndef XMD_H /* X11/xmd.h correctly defines INT32 */
#ifndef _BASETSD_H_ /* Microsoft defines it in basetsd.h */ #ifndef _BASETSD_H_ /* Microsoft defines it in basetsd.h */
#ifndef _BASETSD_H /* MinGW is slightly different */ #ifndef _BASETSD_H /* MinGW is slightly different */
#ifndef QGLOBAL_H /* Qt defines it in qglobal.h */ #ifndef QGLOBAL_H /* Qt defines it in qglobal.h */
#define __INT32_IS_ACTUALLY_LONG
typedef long INT32; typedef long INT32;
#endif #endif
#endif #endif

View File

@@ -43,16 +43,16 @@ typedef enum { /* Operating modes for buffer controllers */
#define DSTATE_STOPPING 210 /* looking for EOI in jpeg_finish_decompress */ #define DSTATE_STOPPING 210 /* looking for EOI in jpeg_finish_decompress */
/* JLONG must hold at least signed 32-bit values. */
typedef long JLONG;
/* /*
* Left shift macro that handles a negative operand without causing any * Left shift macro that handles a negative operand without causing any
* sanitizer warnings * sanitizer warnings
*/ */
#ifdef __INT32_IS_ACTUALLY_LONG #define LEFT_SHIFT(a, b) ((JLONG)((unsigned long)(a) << (b)))
#define LEFT_SHIFT(a, b) ((INT32)((unsigned long)(a) << (b)))
#else
#define LEFT_SHIFT(a, b) ((INT32)((unsigned int)(a) << (b)))
#endif
/* Declarations for compression modules */ /* Declarations for compression modules */
@@ -276,16 +276,16 @@ struct jpeg_color_quantizer {
* shift" instructions that shift in copies of the sign bit. But some * shift" instructions that shift in copies of the sign bit. But some
* C compilers implement >> with an unsigned shift. For these machines you * C compilers implement >> with an unsigned shift. For these machines you
* must define RIGHT_SHIFT_IS_UNSIGNED. * must define RIGHT_SHIFT_IS_UNSIGNED.
* RIGHT_SHIFT provides a proper signed right shift of an INT32 quantity. * RIGHT_SHIFT provides a proper signed right shift of a JLONG quantity.
* It is only applied with constant shift counts. SHIFT_TEMPS must be * It is only applied with constant shift counts. SHIFT_TEMPS must be
* included in the variables of any routine using RIGHT_SHIFT. * included in the variables of any routine using RIGHT_SHIFT.
*/ */
#ifdef RIGHT_SHIFT_IS_UNSIGNED #ifdef RIGHT_SHIFT_IS_UNSIGNED
#define SHIFT_TEMPS INT32 shift_temp; #define SHIFT_TEMPS JLONG shift_temp;
#define RIGHT_SHIFT(x,shft) \ #define RIGHT_SHIFT(x,shft) \
((shift_temp = (x)) < 0 ? \ ((shift_temp = (x)) < 0 ? \
(shift_temp >> (shft)) | ((~((INT32) 0)) << (32-(shft))) : \ (shift_temp >> (shft)) | ((~((JLONG) 0)) << (32-(shft))) : \
(shift_temp >> (shft))) (shift_temp >> (shft)))
#else #else
#define SHIFT_TEMPS #define SHIFT_TEMPS
@@ -348,7 +348,7 @@ extern const int jpeg_zigzag_order[]; /* natural coef order to zigzag order */
extern const int jpeg_natural_order[]; /* zigzag coef order to natural order */ extern const int jpeg_natural_order[]; /* zigzag coef order to natural order */
/* Arithmetic coding probability estimation tables in jaricom.c */ /* Arithmetic coding probability estimation tables in jaricom.c */
extern const INT32 jpeg_aritab[]; extern const JLONG jpeg_aritab[];
/* Suppress undefined-structure complaints if necessary. */ /* Suppress undefined-structure complaints if necessary. */

View File

@@ -4,7 +4,7 @@
* This file was part of the Independent JPEG Group's software: * This file was part of the Independent JPEG Group's software:
* Copyright (C) 1991-1996, Thomas G. Lane. * Copyright (C) 1991-1996, Thomas G. Lane.
* libjpeg-turbo Modifications: * libjpeg-turbo Modifications:
* Copyright (C) 2009, D. R. Commander * Copyright (C) 2009, 2015, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg * For conditions of distribution and use, see the accompanying README.ijg
* file. * file.
* *
@@ -128,8 +128,8 @@ static const UINT8 base_dither_matrix[ODITHER_SIZE][ODITHER_SIZE] = {
typedef INT16 FSERROR; /* 16 bits should be enough */ typedef INT16 FSERROR; /* 16 bits should be enough */
typedef int LOCFSERROR; /* use 'int' for calculation temps */ typedef int LOCFSERROR; /* use 'int' for calculation temps */
#else #else
typedef INT32 FSERROR; /* may need more than 16 bits */ typedef JLONG FSERROR; /* may need more than 16 bits */
typedef INT32 LOCFSERROR; /* be sure calculation temps are big enough */ typedef JLONG LOCFSERROR; /* be sure calculation temps are big enough */
#endif #endif
typedef FSERROR *FSERRPTR; /* pointer to error array */ typedef FSERROR *FSERRPTR; /* pointer to error array */
@@ -254,7 +254,7 @@ output_value (j_decompress_ptr cinfo, int ci, int j, int maxj)
* (Forcing the upper and lower values to the limits ensures that * (Forcing the upper and lower values to the limits ensures that
* dithering can't produce a color outside the selected gamut.) * dithering can't produce a color outside the selected gamut.)
*/ */
return (int) (((INT32) j * MAXJSAMPLE + maxj/2) / maxj); return (int) (((JLONG) j * MAXJSAMPLE + maxj/2) / maxj);
} }
@@ -264,7 +264,7 @@ largest_input_value (j_decompress_ptr cinfo, int ci, int j, int maxj)
/* Must have largest(j=0) >= 0, and largest(j=maxj) >= MAXJSAMPLE */ /* Must have largest(j=0) >= 0, and largest(j=maxj) >= MAXJSAMPLE */
{ {
/* Breakpoints are halfway between values returned by output_value */ /* Breakpoints are halfway between values returned by output_value */
return (int) (((INT32) (2*j + 1) * MAXJSAMPLE + maxj) / (2*maxj)); return (int) (((JLONG) (2*j + 1) * MAXJSAMPLE + maxj) / (2*maxj));
} }
@@ -400,7 +400,7 @@ make_odither_array (j_decompress_ptr cinfo, int ncolors)
{ {
ODITHER_MATRIX_PTR odither; ODITHER_MATRIX_PTR odither;
int j,k; int j,k;
INT32 num,den; JLONG num,den;
odither = (ODITHER_MATRIX_PTR) odither = (ODITHER_MATRIX_PTR)
(*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
@@ -410,10 +410,10 @@ make_odither_array (j_decompress_ptr cinfo, int ncolors)
* (f=0..N-1) should be (N-1-2*f)/(2*N) * MAXJSAMPLE/(ncolors-1). * (f=0..N-1) should be (N-1-2*f)/(2*N) * MAXJSAMPLE/(ncolors-1).
* On 16-bit-int machine, be careful to avoid overflow. * On 16-bit-int machine, be careful to avoid overflow.
*/ */
den = 2 * ODITHER_CELLS * ((INT32) (ncolors - 1)); den = 2 * ODITHER_CELLS * ((JLONG) (ncolors - 1));
for (j = 0; j < ODITHER_SIZE; j++) { for (j = 0; j < ODITHER_SIZE; j++) {
for (k = 0; k < ODITHER_SIZE; k++) { for (k = 0; k < ODITHER_SIZE; k++) {
num = ((INT32) (ODITHER_CELLS-1 - 2*((int)base_dither_matrix[j][k]))) num = ((JLONG) (ODITHER_CELLS-1 - 2*((int)base_dither_matrix[j][k])))
* MAXJSAMPLE; * MAXJSAMPLE;
/* Ensure round towards zero despite C's lack of consistency /* Ensure round towards zero despite C's lack of consistency
* about rounding negative values in integer division... * about rounding negative values in integer division...

View File

@@ -4,7 +4,7 @@
* This file was part of the Independent JPEG Group's software: * This file was part of the Independent JPEG Group's software:
* Copyright (C) 1991-1996, Thomas G. Lane. * Copyright (C) 1991-1996, Thomas G. Lane.
* libjpeg-turbo Modifications: * libjpeg-turbo Modifications:
* Copyright (C) 2009, 2014, D. R. Commander. * Copyright (C) 2009, 2014-2015, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg * For conditions of distribution and use, see the accompanying README.ijg
* file. * file.
* *
@@ -160,8 +160,8 @@ typedef hist2d * hist3d; /* type for top-level pointer */
typedef INT16 FSERROR; /* 16 bits should be enough */ typedef INT16 FSERROR; /* 16 bits should be enough */
typedef int LOCFSERROR; /* use 'int' for calculation temps */ typedef int LOCFSERROR; /* use 'int' for calculation temps */
#else #else
typedef INT32 FSERROR; /* may need more than 16 bits */ typedef JLONG FSERROR; /* may need more than 16 bits */
typedef INT32 LOCFSERROR; /* be sure calculation temps are big enough */ typedef JLONG LOCFSERROR; /* be sure calculation temps are big enough */
#endif #endif
typedef FSERROR *FSERRPTR; /* pointer to error array */ typedef FSERROR *FSERRPTR; /* pointer to error array */
@@ -240,7 +240,7 @@ typedef struct {
int c1min, c1max; int c1min, c1max;
int c2min, c2max; int c2min, c2max;
/* The volume (actually 2-norm) of the box */ /* The volume (actually 2-norm) of the box */
INT32 volume; JLONG volume;
/* The number of nonzero histogram cells within this box */ /* The number of nonzero histogram cells within this box */
long colorcount; long colorcount;
} box; } box;
@@ -275,7 +275,7 @@ find_biggest_volume (boxptr boxlist, int numboxes)
{ {
register boxptr boxp; register boxptr boxp;
register int i; register int i;
register INT32 maxv = 0; register JLONG maxv = 0;
boxptr which = NULL; boxptr which = NULL;
for (i = 0, boxp = boxlist; i < numboxes; i++, boxp++) { for (i = 0, boxp = boxlist; i < numboxes; i++, boxp++) {
@@ -298,7 +298,7 @@ update_box (j_decompress_ptr cinfo, boxptr boxp)
histptr histp; histptr histp;
int c0,c1,c2; int c0,c1,c2;
int c0min,c0max,c1min,c1max,c2min,c2max; int c0min,c0max,c1min,c1max,c2min,c2max;
INT32 dist0,dist1,dist2; JLONG dist0,dist1,dist2;
long ccount; long ccount;
c0min = boxp->c0min; c0max = boxp->c0max; c0min = boxp->c0min; c0max = boxp->c0max;
@@ -572,7 +572,7 @@ select_colors (j_decompress_ptr cinfo, int desired_colors)
* distance from every colormap entry to every histogram cell. Unfortunately, * distance from every colormap entry to every histogram cell. Unfortunately,
* it needs a work array to hold the best-distance-so-far for each histogram * it needs a work array to hold the best-distance-so-far for each histogram
* cell (because the inner loop has to be over cells, not colormap entries). * cell (because the inner loop has to be over cells, not colormap entries).
* The work array elements have to be INT32s, so the work array would need * The work array elements have to be JLONGs, so the work array would need
* 256Kb at our recommended precision. This is not feasible in DOS machines. * 256Kb at our recommended precision. This is not feasible in DOS machines.
* *
* To get around these problems, we apply Thomas' method to compute the * To get around these problems, we apply Thomas' method to compute the
@@ -638,8 +638,8 @@ find_nearby_colors (j_decompress_ptr cinfo, int minc0, int minc1, int minc2,
int maxc0, maxc1, maxc2; int maxc0, maxc1, maxc2;
int centerc0, centerc1, centerc2; int centerc0, centerc1, centerc2;
int i, x, ncolors; int i, x, ncolors;
INT32 minmaxdist, min_dist, max_dist, tdist; JLONG minmaxdist, min_dist, max_dist, tdist;
INT32 mindist[MAXNUMCOLORS]; /* min distance to colormap entry i */ JLONG mindist[MAXNUMCOLORS]; /* min distance to colormap entry i */
/* Compute true coordinates of update box's upper corner and center. /* Compute true coordinates of update box's upper corner and center.
* Actually we compute the coordinates of the center of the upper-corner * Actually we compute the coordinates of the center of the upper-corner
@@ -763,15 +763,15 @@ find_best_colors (j_decompress_ptr cinfo, int minc0, int minc1, int minc2,
{ {
int ic0, ic1, ic2; int ic0, ic1, ic2;
int i, icolor; int i, icolor;
register INT32 * bptr; /* pointer into bestdist[] array */ register JLONG * bptr; /* pointer into bestdist[] array */
JSAMPLE * cptr; /* pointer into bestcolor[] array */ JSAMPLE * cptr; /* pointer into bestcolor[] array */
INT32 dist0, dist1; /* initial distance values */ JLONG dist0, dist1; /* initial distance values */
register INT32 dist2; /* current distance in inner loop */ register JLONG dist2; /* current distance in inner loop */
INT32 xx0, xx1; /* distance increments */ JLONG xx0, xx1; /* distance increments */
register INT32 xx2; register JLONG xx2;
INT32 inc0, inc1, inc2; /* initial values for increments */ JLONG inc0, inc1, inc2; /* initial values for increments */
/* This array holds the distance to the nearest-so-far color for each cell */ /* This array holds the distance to the nearest-so-far color for each cell */
INT32 bestdist[BOX_C0_ELEMS * BOX_C1_ELEMS * BOX_C2_ELEMS]; JLONG bestdist[BOX_C0_ELEMS * BOX_C1_ELEMS * BOX_C2_ELEMS];
/* Initialize best-distance for each cell of the update box */ /* Initialize best-distance for each cell of the update box */
bptr = bestdist; bptr = bestdist;

View File

@@ -4,8 +4,8 @@
* This file was part of the Independent JPEG Group's software: * This file was part of the Independent JPEG Group's software:
* Copyright (C) 1991-1997, Thomas G. Lane. * Copyright (C) 1991-1997, Thomas G. Lane.
* Modified 2009 by Bill Allombert, Guido Vollbeding. * Modified 2009 by Bill Allombert, Guido Vollbeding.
* It was modified by The libjpeg-turbo Project to include only code and * libjpeg-turbo Modifications:
* information relevant to libjpeg-turbo. * Copyright (C) 2015, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg * For conditions of distribution and use, see the accompanying README.ijg
* file. * file.
* *
@@ -410,14 +410,14 @@ start_input_ppm (j_compress_ptr cinfo, cjpeg_source_ptr sinfo)
/* Compute the rescaling array if required. */ /* Compute the rescaling array if required. */
if (need_rescale) { if (need_rescale) {
INT32 val, half_maxval; long val, half_maxval;
/* On 16-bit-int machines we have to be careful of maxval = 65535 */ /* On 16-bit-int machines we have to be careful of maxval = 65535 */
source->rescale = (JSAMPLE *) source->rescale = (JSAMPLE *)
(*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE, (*cinfo->mem->alloc_small) ((j_common_ptr) cinfo, JPOOL_IMAGE,
(size_t) (((long) maxval + 1L) * sizeof(JSAMPLE))); (size_t) (((long) maxval + 1L) * sizeof(JSAMPLE)));
half_maxval = maxval / 2; half_maxval = maxval / 2;
for (val = 0; val <= (INT32) maxval; val++) { for (val = 0; val <= (long) maxval; val++) {
/* The multiplication here must be done in 32 bits to avoid overflow */ /* The multiplication here must be done in 32 bits to avoid overflow */
source->rescale[val] = (JSAMPLE) ((val*MAXJSAMPLE + half_maxval)/maxval); source->rescale[val] = (JSAMPLE) ((val*MAXJSAMPLE + half_maxval)/maxval);
} }

View File

@@ -6,7 +6,7 @@
* Author: Siarhei Siamashka <siarhei.siamashka@nokia.com> * Author: Siarhei Siamashka <siarhei.siamashka@nokia.com>
* Copyright (C) 2013-2014, Linaro Limited * Copyright (C) 2013-2014, Linaro Limited
* Author: Ragesh Radhakrishnan <ragesh.r@linaro.org> * Author: Ragesh Radhakrishnan <ragesh.r@linaro.org>
* Copyright (C) 2014, D. R. Commander. All rights reserved. * Copyright (C) 2014-2015, D. R. Commander. All Rights Reserved.
* *
* This software is provided 'as-is', without any express or implied * This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages * warranty. In no event will the authors be held liable for any damages
@@ -134,8 +134,8 @@ _\fname:
#define REF_1D_IDCT(xrow0, xrow1, xrow2, xrow3, xrow4, xrow5, xrow6, xrow7) \ #define REF_1D_IDCT(xrow0, xrow1, xrow2, xrow3, xrow4, xrow5, xrow6, xrow7) \
{ \ { \
DCTELEM row0, row1, row2, row3, row4, row5, row6, row7; \ DCTELEM row0, row1, row2, row3, row4, row5, row6, row7; \
INT32 q1, q2, q3, q4, q5, q6, q7; \ JLONG q1, q2, q3, q4, q5, q6, q7; \
INT32 tmp11_plus_tmp2, tmp11_minus_tmp2; \ JLONG tmp11_plus_tmp2, tmp11_minus_tmp2; \
\ \
/* 1-D iDCT input data */ \ /* 1-D iDCT input data */ \
row0 = xrow0; \ row0 = xrow0; \
@@ -156,7 +156,7 @@ _\fname:
q2 = MULTIPLY(row2, FIX_0_541196100) + \ q2 = MULTIPLY(row2, FIX_0_541196100) + \
MULTIPLY(row6, FIX_0_541196100_MINUS_1_847759065); \ MULTIPLY(row6, FIX_0_541196100_MINUS_1_847759065); \
q4 = q6; \ q4 = q6; \
q3 = ((INT32) row0 - (INT32) row4) << 13; \ q3 = ((JLONG) row0 - (JLONG) row4) << 13; \
q6 += MULTIPLY(row5, -FIX_2_562915447) + \ q6 += MULTIPLY(row5, -FIX_2_562915447) + \
MULTIPLY(row3, FIX_3_072711026_MINUS_2_562915447); \ MULTIPLY(row3, FIX_3_072711026_MINUS_2_562915447); \
/* now we can use q1 (reloadable constants have been used up) */ \ /* now we can use q1 (reloadable constants have been used up) */ \
@@ -183,7 +183,7 @@ _\fname:
/* (tmp11 - tmp2) has been calculated (out_row6 before descale) */ \ /* (tmp11 - tmp2) has been calculated (out_row6 before descale) */ \
tmp11_minus_tmp2 = q1; \ tmp11_minus_tmp2 = q1; \
\ \
q1 = ((INT32) row0 + (INT32) row4) << 13; \ q1 = ((JLONG) row0 + (JLONG) row4) << 13; \
q2 = q1 + q6; \ q2 = q1 + q6; \
q1 = q1 - q6; \ q1 = q1 - q6; \
\ \

View File

@@ -6,6 +6,7 @@
* Author: Siarhei Siamashka <siarhei.siamashka@nokia.com> * Author: Siarhei Siamashka <siarhei.siamashka@nokia.com>
* Copyright (C) 2014 Siarhei Siamashka. All Rights Reserved. * Copyright (C) 2014 Siarhei Siamashka. All Rights Reserved.
* Copyright (C) 2014 Linaro Limited. All Rights Reserved. * Copyright (C) 2014 Linaro Limited. All Rights Reserved.
* Copyright (C) 2015 D. R. Commander. All Rights Reserved.
* *
* This software is provided 'as-is', without any express or implied * This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages * warranty. In no event will the authors be held liable for any damages
@@ -105,8 +106,8 @@ _\fname:
#define REF_1D_IDCT(xrow0, xrow1, xrow2, xrow3, xrow4, xrow5, xrow6, xrow7) \ #define REF_1D_IDCT(xrow0, xrow1, xrow2, xrow3, xrow4, xrow5, xrow6, xrow7) \
{ \ { \
DCTELEM row0, row1, row2, row3, row4, row5, row6, row7; \ DCTELEM row0, row1, row2, row3, row4, row5, row6, row7; \
INT32 q1, q2, q3, q4, q5, q6, q7; \ JLONG q1, q2, q3, q4, q5, q6, q7; \
INT32 tmp11_plus_tmp2, tmp11_minus_tmp2; \ JLONG tmp11_plus_tmp2, tmp11_minus_tmp2; \
\ \
/* 1-D iDCT input data */ \ /* 1-D iDCT input data */ \
row0 = xrow0; \ row0 = xrow0; \
@@ -127,7 +128,7 @@ _\fname:
q2 = MULTIPLY(row2, FIX_0_541196100) + \ q2 = MULTIPLY(row2, FIX_0_541196100) + \
MULTIPLY(row6, FIX_0_541196100_MINUS_1_847759065); \ MULTIPLY(row6, FIX_0_541196100_MINUS_1_847759065); \
q4 = q6; \ q4 = q6; \
q3 = ((INT32) row0 - (INT32) row4) << 13; \ q3 = ((JLONG) row0 - (JLONG) row4) << 13; \
q6 += MULTIPLY(row5, -FIX_2_562915447) + \ q6 += MULTIPLY(row5, -FIX_2_562915447) + \
MULTIPLY(row3, FIX_3_072711026_MINUS_2_562915447); \ MULTIPLY(row3, FIX_3_072711026_MINUS_2_562915447); \
/* now we can use q1 (reloadable constants have been used up) */ \ /* now we can use q1 (reloadable constants have been used up) */ \
@@ -154,7 +155,7 @@ _\fname:
/* (tmp11 - tmp2) has been calculated (out_row6 before descale) */ \ /* (tmp11 - tmp2) has been calculated (out_row6 before descale) */ \
tmp11_minus_tmp2 = q1; \ tmp11_minus_tmp2 = q1; \
\ \
q1 = ((INT32) row0 + (INT32) row4) << 13; \ q1 = ((JLONG) row0 + (JLONG) row4) << 13; \
q2 = q1 + q6; \ q2 = q1 + q6; \
q1 = q1 - q6; \ q1 = q1 - q6; \
\ \

View File

@@ -5,6 +5,7 @@
* All rights reserved. * All rights reserved.
* Authors: Teodora Novkovic (teodora.novkovic@imgtec.com) * Authors: Teodora Novkovic (teodora.novkovic@imgtec.com)
* Darko Laus (darko.laus@imgtec.com) * Darko Laus (darko.laus@imgtec.com)
* Copyright (C) 2015, D. R. Commander. All Rights Reserved.
* This software is provided 'as-is', without any express or implied * This software is provided 'as-is', without any express or implied
* warranty. In no event will the authors be held liable for any damages * warranty. In no event will the authors be held liable for any damages
* arising from the use of this software. * arising from the use of this software.
@@ -1992,14 +1993,14 @@ LEAF_MIPS_DSPR2(jsimd_idct_islow_mips_dspr2)
move v0, sp move v0, sp
addiu v1, zero, 8 addiu v1, zero, 8
4: 4:
lw t0, 8(v0) // z2 = (INT32) wsptr[2] lw t0, 8(v0) // z2 = (JLONG) wsptr[2]
lw t1, 24(v0) // z3 = (INT32) wsptr[6] lw t1, 24(v0) // z3 = (JLONG) wsptr[6]
lw t2, 0(v0) // (INT32) wsptr[0] lw t2, 0(v0) // (JLONG) wsptr[0]
lw t3, 16(v0) // (INT32) wsptr[4] lw t3, 16(v0) // (JLONG) wsptr[4]
lw s4, 4(v0) // (INT32) wsptr[1] lw s4, 4(v0) // (JLONG) wsptr[1]
lw s5, 12(v0) // (INT32) wsptr[3] lw s5, 12(v0) // (JLONG) wsptr[3]
lw s6, 20(v0) // (INT32) wsptr[5] lw s6, 20(v0) // (JLONG) wsptr[5]
lw s7, 28(v0) // (INT32) wsptr[7] lw s7, 28(v0) // (JLONG) wsptr[7]
or s4, s4, t0 or s4, s4, t0
or s4, s4, t1 or s4, s4, t1
or s4, s4, t3 or s4, s4, t3
@@ -2025,8 +2026,8 @@ LEAF_MIPS_DSPR2(jsimd_idct_islow_mips_dspr2)
mul t1, t1, t8 // MULTIPLY(z3, FIX_1_847759065) mul t1, t1, t8 // MULTIPLY(z3, FIX_1_847759065)
addiu t8, zero, 6270 // FIX_0_765366865 addiu t8, zero, 6270 // FIX_0_765366865
mul t0, t0, t8 // MULTIPLY(z2, FIX_0_765366865) mul t0, t0, t8 // MULTIPLY(z2, FIX_0_765366865)
addu t4, t2, t3 // (INT32) wsptr[0] + (INT32) wsptr[4] addu t4, t2, t3 // (JLONG) wsptr[0] + (JLONG) wsptr[4]
subu t2, t2, t3 // (INT32) wsptr[0] - (INT32) wsptr[4] subu t2, t2, t3 // (JLONG) wsptr[0] - (JLONG) wsptr[4]
sll t4, t4, 13 // tmp0 = ((wsptr[0] + wsptr[4]) << CONST_BITS sll t4, t4, 13 // tmp0 = ((wsptr[0] + wsptr[4]) << CONST_BITS
sll t2, t2, 13 // tmp1 = ((wsptr[0] - wsptr[4]) << CONST_BITS sll t2, t2, 13 // tmp1 = ((wsptr[0] - wsptr[4]) << CONST_BITS
subu t1, t5, t1 // tmp2 = z1 + MULTIPLY(z3, - FIX_1_847759065) subu t1, t5, t1 // tmp2 = z1 + MULTIPLY(z3, - FIX_1_847759065)
@@ -2035,10 +2036,10 @@ LEAF_MIPS_DSPR2(jsimd_idct_islow_mips_dspr2)
addu t5, t5, t0 // tmp3 = z1 + MULTIPLY(z2, FIX_0_765366865) addu t5, t5, t0 // tmp3 = z1 + MULTIPLY(z2, FIX_0_765366865)
subu t1, t4, t5 // tmp13 = tmp0 - tmp3 subu t1, t4, t5 // tmp13 = tmp0 - tmp3
addu t0, t4, t5 // tmp10 = tmp0 + tmp3 addu t0, t4, t5 // tmp10 = tmp0 + tmp3
lw t4, 28(v0) // tmp0 = (INT32) wsptr[7] lw t4, 28(v0) // tmp0 = (JLONG) wsptr[7]
lw t6, 12(v0) // tmp2 = (INT32) wsptr[3] lw t6, 12(v0) // tmp2 = (JLONG) wsptr[3]
lw t5, 20(v0) // tmp1 = (INT32) wsptr[5] lw t5, 20(v0) // tmp1 = (JLONG) wsptr[5]
lw t7, 4(v0) // tmp3 = (INT32) wsptr[1] lw t7, 4(v0) // tmp3 = (JLONG) wsptr[1]
addu s0, t4, t6 // z3 = tmp0 + tmp2 addu s0, t4, t6 // z3 = tmp0 + tmp2
addiu t8, zero, 9633 // FIX_1_175875602 addiu t8, zero, 9633 // FIX_1_175875602
addu s1, t5, t7 // z4 = tmp1 + tmp3 addu s1, t5, t7 // z4 = tmp1 + tmp3
@@ -3269,9 +3270,9 @@ LEAF_MIPS_DSPR2(jsimd_idct_4x4_mips_dspr2)
lw s6, 8(t1) // wsptr[2] lw s6, 8(t1) // wsptr[2]
li s5, 6270 li s5, 6270
lw s7, 24(t1) // wsptr[6] lw s7, 24(t1) // wsptr[6]
mul s4, s4, s6 // MULTIPLY((INT32) wsptr[2], FIX_1_847759065) mul s4, s4, s6 // MULTIPLY((JLONG) wsptr[2], FIX_1_847759065)
lw t2, 0(t1) // wsptr[0] lw t2, 0(t1) // wsptr[0]
mul s5, s5, s7 // MULTIPLY((INT32) wsptr[6], - FIX_0_765366865) mul s5, s5, s7 // MULTIPLY((JLONG) wsptr[6], - FIX_0_765366865)
lh t5, 28(t1) // wsptr[7] lh t5, 28(t1) // wsptr[7]
lh t6, 20(t1) // wsptr[5] lh t6, 20(t1) // wsptr[5]
lh t7, 12(t1) // wsptr[3] lh t7, 12(t1) // wsptr[3]
@@ -3284,7 +3285,7 @@ LEAF_MIPS_DSPR2(jsimd_idct_4x4_mips_dspr2)
mult $ac1, zero, zero mult $ac1, zero, zero
dpa.w.ph $ac1, t5, s2 dpa.w.ph $ac1, t5, s2
dpa.w.ph $ac1, t7, s3 dpa.w.ph $ac1, t7, s3
sll t2, t2, 14 // tmp0 = ((INT32) wsptr[0]) << (CONST_BITS+1) sll t2, t2, 14 // tmp0 = ((JLONG) wsptr[0]) << (CONST_BITS+1)
mflo s6, $ac0 mflo s6, $ac0
// MULTIPLY(wsptr[2], FIX_1_847759065 + MULTIPLY(wsptr[6], -FIX_0_765366865) // MULTIPLY(wsptr[2], FIX_1_847759065 + MULTIPLY(wsptr[6], -FIX_0_765366865)
subu s4, s4, s5 subu s4, s4, s5
@@ -3323,9 +3324,9 @@ LEAF_MIPS_DSPR2(jsimd_idct_4x4_mips_dspr2)
lw s6, 40(t1) // wsptr[2] lw s6, 40(t1) // wsptr[2]
li s5, 6270 li s5, 6270
lw s7, 56(t1) // wsptr[6] lw s7, 56(t1) // wsptr[6]
mul s4, s4, s6 // MULTIPLY((INT32) wsptr[2], FIX_1_847759065) mul s4, s4, s6 // MULTIPLY((JLONG) wsptr[2], FIX_1_847759065)
lw t2, 32(t1) // wsptr[0] lw t2, 32(t1) // wsptr[0]
mul s5, s5, s7 // MULTIPLY((INT32) wsptr[6], - FIX_0_765366865) mul s5, s5, s7 // MULTIPLY((JLONG) wsptr[6], - FIX_0_765366865)
lh t5, 60(t1) // wsptr[7] lh t5, 60(t1) // wsptr[7]
lh t6, 52(t1) // wsptr[5] lh t6, 52(t1) // wsptr[5]
lh t7, 44(t1) // wsptr[3] lh t7, 44(t1) // wsptr[3]
@@ -3338,7 +3339,7 @@ LEAF_MIPS_DSPR2(jsimd_idct_4x4_mips_dspr2)
mult $ac1, zero, zero mult $ac1, zero, zero
dpa.w.ph $ac1, t5, s2 dpa.w.ph $ac1, t5, s2
dpa.w.ph $ac1, t7, s3 dpa.w.ph $ac1, t7, s3
sll t2, t2, 14 // tmp0 = ((INT32) wsptr[0]) << (CONST_BITS+1) sll t2, t2, 14 // tmp0 = ((JLONG) wsptr[0]) << (CONST_BITS+1)
mflo s6, $ac0 mflo s6, $ac0
// MULTIPLY(wsptr[2], FIX_1_847759065 + MULTIPLY(wsptr[6], -FIX_0_765366865) // MULTIPLY(wsptr[2], FIX_1_847759065 + MULTIPLY(wsptr[6], -FIX_0_765366865)
subu s4, s4, s5 subu s4, s4, s5
@@ -3377,9 +3378,9 @@ LEAF_MIPS_DSPR2(jsimd_idct_4x4_mips_dspr2)
lw s6, 72(t1) // wsptr[2] lw s6, 72(t1) // wsptr[2]
li s5, 6270 li s5, 6270
lw s7, 88(t1) // wsptr[6] lw s7, 88(t1) // wsptr[6]
mul s4, s4, s6 // MULTIPLY((INT32) wsptr[2], FIX_1_847759065) mul s4, s4, s6 // MULTIPLY((JLONG) wsptr[2], FIX_1_847759065)
lw t2, 64(t1) // wsptr[0] lw t2, 64(t1) // wsptr[0]
mul s5, s5, s7 // MULTIPLY((INT32) wsptr[6], - FIX_0_765366865) mul s5, s5, s7 // MULTIPLY((JLONG) wsptr[6], - FIX_0_765366865)
lh t5, 92(t1) // wsptr[7] lh t5, 92(t1) // wsptr[7]
lh t6, 84(t1) // wsptr[5] lh t6, 84(t1) // wsptr[5]
lh t7, 76(t1) // wsptr[3] lh t7, 76(t1) // wsptr[3]
@@ -3392,7 +3393,7 @@ LEAF_MIPS_DSPR2(jsimd_idct_4x4_mips_dspr2)
mult $ac1, zero, zero mult $ac1, zero, zero
dpa.w.ph $ac1, t5, s2 dpa.w.ph $ac1, t5, s2
dpa.w.ph $ac1, t7, s3 dpa.w.ph $ac1, t7, s3
sll t2, t2, 14 // tmp0 = ((INT32) wsptr[0]) << (CONST_BITS+1) sll t2, t2, 14 // tmp0 = ((JLONG) wsptr[0]) << (CONST_BITS+1)
mflo s6, $ac0 mflo s6, $ac0
// MULTIPLY(wsptr[2], FIX_1_847759065 + MULTIPLY(wsptr[6], -FIX_0_765366865) // MULTIPLY(wsptr[2], FIX_1_847759065 + MULTIPLY(wsptr[6], -FIX_0_765366865)
subu s4, s4, s5 subu s4, s4, s5
@@ -3430,9 +3431,9 @@ LEAF_MIPS_DSPR2(jsimd_idct_4x4_mips_dspr2)
lw s6, 104(t1) // wsptr[2] lw s6, 104(t1) // wsptr[2]
li s5, 6270 li s5, 6270
lw s7, 120(t1) // wsptr[6] lw s7, 120(t1) // wsptr[6]
mul s4, s4, s6 // MULTIPLY((INT32) wsptr[2], FIX_1_847759065) mul s4, s4, s6 // MULTIPLY((JLONG) wsptr[2], FIX_1_847759065)
lw t2, 96(t1) // wsptr[0] lw t2, 96(t1) // wsptr[0]
mul s5, s5, s7 // MULTIPLY((INT32) wsptr[6], -FIX_0_765366865) mul s5, s5, s7 // MULTIPLY((JLONG) wsptr[6], -FIX_0_765366865)
lh t5, 124(t1) // wsptr[7] lh t5, 124(t1) // wsptr[7]
lh t6, 116(t1) // wsptr[5] lh t6, 116(t1) // wsptr[5]
lh t7, 108(t1) // wsptr[3] lh t7, 108(t1) // wsptr[3]
@@ -3445,7 +3446,7 @@ LEAF_MIPS_DSPR2(jsimd_idct_4x4_mips_dspr2)
mult $ac1, zero, zero mult $ac1, zero, zero
dpa.w.ph $ac1, t5, s2 dpa.w.ph $ac1, t5, s2
dpa.w.ph $ac1, t7, s3 dpa.w.ph $ac1, t7, s3
sll t2, t2, 14 // tmp0 = ((INT32) wsptr[0]) << (CONST_BITS+1) sll t2, t2, 14 // tmp0 = ((JLONG) wsptr[0]) << (CONST_BITS+1)
mflo s6, $ac0 mflo s6, $ac0
// MULTIPLY(wsptr[2], FIX_1_847759065 + MULTIPLY(wsptr[6], -FIX_0_765366865) // MULTIPLY(wsptr[2], FIX_1_847759065 + MULTIPLY(wsptr[6], -FIX_0_765366865)
subu s4, s4, s5 subu s4, s4, s5

14
wrbmp.c
View File

@@ -5,7 +5,7 @@
* Copyright (C) 1994-1996, Thomas G. Lane. * Copyright (C) 1994-1996, Thomas G. Lane.
* libjpeg-turbo Modifications: * libjpeg-turbo Modifications:
* Copyright (C) 2013, Linaro Limited. * Copyright (C) 2013, Linaro Limited.
* Copyright (C) 2014, D. R. Commander. * Copyright (C) 2014-2015, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg * For conditions of distribution and use, see the accompanying README.ijg
* file. * file.
* *
@@ -200,7 +200,7 @@ write_bmp_header (j_decompress_ptr cinfo, bmp_dest_ptr dest)
array[offset+1] = (char) (((value) >> 8) & 0xFF), \ array[offset+1] = (char) (((value) >> 8) & 0xFF), \
array[offset+2] = (char) (((value) >> 16) & 0xFF), \ array[offset+2] = (char) (((value) >> 16) & 0xFF), \
array[offset+3] = (char) (((value) >> 24) & 0xFF)) array[offset+3] = (char) (((value) >> 24) & 0xFF))
INT32 headersize, bfSize; long headersize, bfSize;
int bits_per_pixel, cmap_entries; int bits_per_pixel, cmap_entries;
/* Compute colormap size and total file size */ /* Compute colormap size and total file size */
@@ -224,7 +224,7 @@ write_bmp_header (j_decompress_ptr cinfo, bmp_dest_ptr dest)
} }
/* File size */ /* File size */
headersize = 14 + 40 + cmap_entries * 4; /* Header and colormap */ headersize = 14 + 40 + cmap_entries * 4; /* Header and colormap */
bfSize = headersize + (INT32) dest->row_width * (INT32) cinfo->output_height; bfSize = headersize + (long) dest->row_width * (long) cinfo->output_height;
/* Set unused fields of header to 0 */ /* Set unused fields of header to 0 */
MEMZERO(bmpfileheader, sizeof(bmpfileheader)); MEMZERO(bmpfileheader, sizeof(bmpfileheader));
@@ -246,8 +246,8 @@ write_bmp_header (j_decompress_ptr cinfo, bmp_dest_ptr dest)
/* we leave biCompression = 0, for none */ /* we leave biCompression = 0, for none */
/* we leave biSizeImage = 0; this is correct for uncompressed data */ /* we leave biSizeImage = 0; this is correct for uncompressed data */
if (cinfo->density_unit == 2) { /* if have density in dots/cm, then */ if (cinfo->density_unit == 2) { /* if have density in dots/cm, then */
PUT_4B(bmpinfoheader, 24, (INT32) (cinfo->X_density*100)); /* XPels/M */ PUT_4B(bmpinfoheader, 24, (long) (cinfo->X_density*100)); /* XPels/M */
PUT_4B(bmpinfoheader, 28, (INT32) (cinfo->Y_density*100)); /* XPels/M */ PUT_4B(bmpinfoheader, 28, (long) (cinfo->Y_density*100)); /* XPels/M */
} }
PUT_2B(bmpinfoheader, 32, cmap_entries); /* biClrUsed */ PUT_2B(bmpinfoheader, 32, cmap_entries); /* biClrUsed */
/* we leave biClrImportant = 0 */ /* we leave biClrImportant = 0 */
@@ -268,7 +268,7 @@ write_os2_header (j_decompress_ptr cinfo, bmp_dest_ptr dest)
{ {
char bmpfileheader[14]; char bmpfileheader[14];
char bmpcoreheader[12]; char bmpcoreheader[12];
INT32 headersize, bfSize; long headersize, bfSize;
int bits_per_pixel, cmap_entries; int bits_per_pixel, cmap_entries;
/* Compute colormap size and total file size */ /* Compute colormap size and total file size */
@@ -292,7 +292,7 @@ write_os2_header (j_decompress_ptr cinfo, bmp_dest_ptr dest)
} }
/* File size */ /* File size */
headersize = 14 + 12 + cmap_entries * 3; /* Header and colormap */ headersize = 14 + 12 + cmap_entries * 3; /* Header and colormap */
bfSize = headersize + (INT32) dest->row_width * (INT32) cinfo->output_height; bfSize = headersize + (long) dest->row_width * (long) cinfo->output_height;
/* Set unused fields of header to 0 */ /* Set unused fields of header to 0 */
MEMZERO(bmpfileheader, sizeof(bmpfileheader)); MEMZERO(bmpfileheader, sizeof(bmpfileheader));

View File

@@ -3,8 +3,8 @@
* *
* This file was part of the Independent JPEG Group's software: * This file was part of the Independent JPEG Group's software:
* Copyright (C) 1991-1997, Thomas G. Lane. * Copyright (C) 1991-1997, Thomas G. Lane.
* It was modified by The libjpeg-turbo Project to include only code relevant * libjpeg-turbo Modifications:
* to libjpeg-turbo. * Copyright (C) 2015, D. R. Commander.
* For conditions of distribution and use, see the accompanying README.ijg * For conditions of distribution and use, see the accompanying README.ijg
* file. * file.
* *
@@ -55,7 +55,7 @@ typedef struct {
/* State for packing variable-width codes into a bitstream */ /* State for packing variable-width codes into a bitstream */
int n_bits; /* current number of bits/code */ int n_bits; /* current number of bits/code */
int maxcode; /* maximum code, given n_bits */ int maxcode; /* maximum code, given n_bits */
INT32 cur_accum; /* holds bits not yet output */ long cur_accum; /* holds bits not yet output */
int cur_bits; /* # of bits in cur_accum */ int cur_bits; /* # of bits in cur_accum */
/* State for GIF code assignment */ /* State for GIF code assignment */
@@ -109,7 +109,7 @@ output (gif_dest_ptr dinfo, int code)
/* Emit a code of n_bits bits */ /* Emit a code of n_bits bits */
/* Uses cur_accum and cur_bits to reblock into 8-bit bytes */ /* Uses cur_accum and cur_bits to reblock into 8-bit bytes */
{ {
dinfo->cur_accum |= ((INT32) code) << dinfo->cur_bits; dinfo->cur_accum |= ((long) code) << dinfo->cur_bits;
dinfo->cur_bits += dinfo->n_bits; dinfo->cur_bits += dinfo->n_bits;
while (dinfo->cur_bits >= 8) { while (dinfo->cur_bits >= 8) {