| Index: third_party/libjpeg_turbo/jcdctmgr.c
|
| ===================================================================
|
| --- third_party/libjpeg_turbo/jcdctmgr.c (revision 95020)
|
| +++ third_party/libjpeg_turbo/jcdctmgr.c (working copy)
|
| @@ -4,6 +4,7 @@
|
| * Copyright (C) 1994-1996, Thomas G. Lane.
|
| * Copyright (C) 1999-2006, MIYASAKA Masaru.
|
| * Copyright 2009 Pierre Ossman <ossman@cendio.se> for Cendio AB
|
| + * Copyright (C) 2011 D. R. Commander
|
| * This file is part of the Independent JPEG Group's software.
|
| * For conditions of distribution and use, see the accompanying README file.
|
| *
|
| @@ -39,6 +40,8 @@
|
| (JCOEFPTR coef_block, FAST_FLOAT * divisors,
|
| FAST_FLOAT * workspace));
|
|
|
| +METHODDEF(void) quantize (JCOEFPTR, DCTELEM *, DCTELEM *);
|
| +
|
| typedef struct {
|
| struct jpeg_forward_dct pub; /* public fields */
|
|
|
| @@ -160,7 +163,7 @@
|
| * of in a consecutive manner, yet again in order to allow SIMD
|
| * routines.
|
| */
|
| -LOCAL(void)
|
| +LOCAL(int)
|
| compute_reciprocal (UINT16 divisor, DCTELEM * dtbl)
|
| {
|
| UDCTELEM2 fq, fr;
|
| @@ -189,6 +192,9 @@
|
| dtbl[DCTSIZE2 * 1] = (DCTELEM) c; /* correction + roundfactor */
|
| dtbl[DCTSIZE2 * 2] = (DCTELEM) (1 << (sizeof(DCTELEM)*8*2 - r)); /* scale */
|
| dtbl[DCTSIZE2 * 3] = (DCTELEM) r - sizeof(DCTELEM)*8; /* shift */
|
| +
|
| + if(r <= 16) return 0;
|
| + else return 1;
|
| }
|
|
|
| /*
|
| @@ -232,7 +238,9 @@
|
| }
|
| dtbl = fdct->divisors[qtblno];
|
| for (i = 0; i < DCTSIZE2; i++) {
|
| - compute_reciprocal(qtbl->quantval[i] << 3, &dtbl[i]);
|
| + if(!compute_reciprocal(qtbl->quantval[i] << 3, &dtbl[i])
|
| + && fdct->quantize == jsimd_quantize)
|
| + fdct->quantize = quantize;
|
| }
|
| break;
|
| #endif
|
| @@ -266,10 +274,12 @@
|
| }
|
| dtbl = fdct->divisors[qtblno];
|
| for (i = 0; i < DCTSIZE2; i++) {
|
| - compute_reciprocal(
|
| + if(!compute_reciprocal(
|
| DESCALE(MULTIPLY16V16((INT32) qtbl->quantval[i],
|
| (INT32) aanscales[i]),
|
| - CONST_BITS-3), &dtbl[i]);
|
| + CONST_BITS-3), &dtbl[i])
|
| + && fdct->quantize == jsimd_quantize)
|
| + fdct->quantize = quantize;
|
| }
|
| }
|
| break;
|
|
|