Index: third_party/tiff_v403/tif_color.c |
diff --git a/third_party/tiff_v403/tif_color.c b/third_party/tiff_v403/tif_color.c |
deleted file mode 100644 |
index c55a4afeb24393f8c542122c9fc97baa988eb26e..0000000000000000000000000000000000000000 |
--- a/third_party/tiff_v403/tif_color.c |
+++ /dev/null |
@@ -1,287 +0,0 @@ |
-/* $Id: tif_color.c,v 1.19 2010-12-14 02:22:42 faxguy Exp $ */ |
- |
-/* |
- * Copyright (c) 1988-1997 Sam Leffler |
- * Copyright (c) 1991-1997 Silicon Graphics, Inc. |
- * |
- * Permission to use, copy, modify, distribute, and sell this software and |
- * its documentation for any purpose is hereby granted without fee, provided |
- * that (i) the above copyright notices and this permission notice appear in |
- * all copies of the software and related documentation, and (ii) the names of |
- * Sam Leffler and Silicon Graphics may not be used in any advertising or |
- * publicity relating to the software without the specific, prior written |
- * permission of Sam Leffler and Silicon Graphics. |
- * |
- * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, |
- * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY |
- * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. |
- * |
- * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR |
- * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, |
- * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, |
- * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF |
- * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE |
- * OF THIS SOFTWARE. |
- */ |
- |
-/* |
- * CIE L*a*b* to CIE XYZ and CIE XYZ to RGB conversion routines are taken |
- * from the VIPS library (http://www.vips.ecs.soton.ac.uk) with |
- * the permission of John Cupitt, the VIPS author. |
- */ |
- |
-/* |
- * TIFF Library. |
- * |
- * Color space conversion routines. |
- */ |
-#include "tiffiop.h" |
-#include <math.h> |
- |
-/* |
- * Convert color value from the CIE L*a*b* 1976 space to CIE XYZ. |
- */ |
-void |
-TIFFCIELabToXYZ(TIFFCIELabToRGB *cielab, uint32 l, int32 a, int32 b, |
- float *X, float *Y, float *Z) |
-{ |
- float L = (float)l * 100.0F / 255.0F; |
- float cby, tmp; |
- |
- if( L < 8.856F ) { |
- *Y = (L * cielab->Y0) / 903.292F; |
- cby = 7.787F * (*Y / cielab->Y0) + 16.0F / 116.0F; |
- } else { |
- cby = (L + 16.0F) / 116.0F; |
- *Y = cielab->Y0 * cby * cby * cby; |
- } |
- |
- tmp = (float)a / 500.0F + cby; |
- if( tmp < 0.2069F ) |
- *X = cielab->X0 * (tmp - 0.13793F) / 7.787F; |
- else |
- *X = cielab->X0 * tmp * tmp * tmp; |
- |
- tmp = cby - (float)b / 200.0F; |
- if( tmp < 0.2069F ) |
- *Z = cielab->Z0 * (tmp - 0.13793F) / 7.787F; |
- else |
- *Z = cielab->Z0 * tmp * tmp * tmp; |
-} |
- |
-#define RINT(R) ((uint32)((R)>0?((R)+0.5):((R)-0.5))) |
-/* |
- * Convert color value from the XYZ space to RGB. |
- */ |
-void |
-TIFFXYZToRGB(TIFFCIELabToRGB *cielab, float X, float Y, float Z, |
- uint32 *r, uint32 *g, uint32 *b) |
-{ |
- int i; |
- float Yr, Yg, Yb; |
- float *matrix = &cielab->display.d_mat[0][0]; |
- |
- /* Multiply through the matrix to get luminosity values. */ |
- Yr = matrix[0] * X + matrix[1] * Y + matrix[2] * Z; |
- Yg = matrix[3] * X + matrix[4] * Y + matrix[5] * Z; |
- Yb = matrix[6] * X + matrix[7] * Y + matrix[8] * Z; |
- |
- /* Clip input */ |
- Yr = TIFFmax(Yr, cielab->display.d_Y0R); |
- Yg = TIFFmax(Yg, cielab->display.d_Y0G); |
- Yb = TIFFmax(Yb, cielab->display.d_Y0B); |
- |
- /* Avoid overflow in case of wrong input values */ |
- Yr = TIFFmin(Yr, cielab->display.d_YCR); |
- Yg = TIFFmin(Yg, cielab->display.d_YCG); |
- Yb = TIFFmin(Yb, cielab->display.d_YCB); |
- |
- /* Turn luminosity to colour value. */ |
- i = (int)((Yr - cielab->display.d_Y0R) / cielab->rstep); |
- i = TIFFmin(cielab->range, i); |
- *r = RINT(cielab->Yr2r[i]); |
- |
- i = (int)((Yg - cielab->display.d_Y0G) / cielab->gstep); |
- i = TIFFmin(cielab->range, i); |
- *g = RINT(cielab->Yg2g[i]); |
- |
- i = (int)((Yb - cielab->display.d_Y0B) / cielab->bstep); |
- i = TIFFmin(cielab->range, i); |
- *b = RINT(cielab->Yb2b[i]); |
- |
- /* Clip output. */ |
- *r = TIFFmin(*r, cielab->display.d_Vrwr); |
- *g = TIFFmin(*g, cielab->display.d_Vrwg); |
- *b = TIFFmin(*b, cielab->display.d_Vrwb); |
-} |
-#undef RINT |
- |
-/* |
- * Allocate conversion state structures and make look_up tables for |
- * the Yr,Yb,Yg <=> r,g,b conversions. |
- */ |
-int |
-TIFFCIELabToRGBInit(TIFFCIELabToRGB* cielab, |
- const TIFFDisplay *display, float *refWhite) |
-{ |
- int i; |
- double gamma; |
- |
- cielab->range = CIELABTORGB_TABLE_RANGE; |
- |
- _TIFFmemcpy(&cielab->display, display, sizeof(TIFFDisplay)); |
- |
- /* Red */ |
- gamma = 1.0 / cielab->display.d_gammaR ; |
- cielab->rstep = |
- (cielab->display.d_YCR - cielab->display.d_Y0R) / cielab->range; |
- for(i = 0; i <= cielab->range; i++) { |
- cielab->Yr2r[i] = cielab->display.d_Vrwr |
- * ((float)pow((double)i / cielab->range, gamma)); |
- } |
- |
- /* Green */ |
- gamma = 1.0 / cielab->display.d_gammaG ; |
- cielab->gstep = |
- (cielab->display.d_YCR - cielab->display.d_Y0R) / cielab->range; |
- for(i = 0; i <= cielab->range; i++) { |
- cielab->Yg2g[i] = cielab->display.d_Vrwg |
- * ((float)pow((double)i / cielab->range, gamma)); |
- } |
- |
- /* Blue */ |
- gamma = 1.0 / cielab->display.d_gammaB ; |
- cielab->bstep = |
- (cielab->display.d_YCR - cielab->display.d_Y0R) / cielab->range; |
- for(i = 0; i <= cielab->range; i++) { |
- cielab->Yb2b[i] = cielab->display.d_Vrwb |
- * ((float)pow((double)i / cielab->range, gamma)); |
- } |
- |
- /* Init reference white point */ |
- cielab->X0 = refWhite[0]; |
- cielab->Y0 = refWhite[1]; |
- cielab->Z0 = refWhite[2]; |
- |
- return 0; |
-} |
- |
-/* |
- * Convert color value from the YCbCr space to CIE XYZ. |
- * The colorspace conversion algorithm comes from the IJG v5a code; |
- * see below for more information on how it works. |
- */ |
-#define SHIFT 16 |
-#define FIX(x) ((int32)((x) * (1L<<SHIFT) + 0.5)) |
-#define ONE_HALF ((int32)(1<<(SHIFT-1))) |
-#define Code2V(c, RB, RW, CR) ((((c)-(int32)(RB))*(float)(CR))/(float)(((RW)-(RB)) ? ((RW)-(RB)) : 1)) |
-#define CLAMP(f,min,max) ((f)<(min)?(min):(f)>(max)?(max):(f)) |
-#define HICLAMP(f,max) ((f)>(max)?(max):(f)) |
- |
-void |
-TIFFYCbCrtoRGB(TIFFYCbCrToRGB *ycbcr, uint32 Y, int32 Cb, int32 Cr, |
- uint32 *r, uint32 *g, uint32 *b) |
-{ |
- int32 i; |
- |
- /* XXX: Only 8-bit YCbCr input supported for now */ |
- Y = HICLAMP(Y, 255), Cb = CLAMP(Cb, 0, 255), Cr = CLAMP(Cr, 0, 255); |
- |
- i = ycbcr->Y_tab[Y] + ycbcr->Cr_r_tab[Cr]; |
- *r = CLAMP(i, 0, 255); |
- i = ycbcr->Y_tab[Y] |
- + (int)((ycbcr->Cb_g_tab[Cb] + ycbcr->Cr_g_tab[Cr]) >> SHIFT); |
- *g = CLAMP(i, 0, 255); |
- i = ycbcr->Y_tab[Y] + ycbcr->Cb_b_tab[Cb]; |
- *b = CLAMP(i, 0, 255); |
-} |
- |
-/* |
- * Initialize the YCbCr->RGB conversion tables. The conversion |
- * is done according to the 6.0 spec: |
- * |
- * R = Y + Cr*(2 - 2*LumaRed) |
- * B = Y + Cb*(2 - 2*LumaBlue) |
- * G = Y |
- * - LumaBlue*Cb*(2-2*LumaBlue)/LumaGreen |
- * - LumaRed*Cr*(2-2*LumaRed)/LumaGreen |
- * |
- * To avoid floating point arithmetic the fractional constants that |
- * come out of the equations are represented as fixed point values |
- * in the range 0...2^16. We also eliminate multiplications by |
- * pre-calculating possible values indexed by Cb and Cr (this code |
- * assumes conversion is being done for 8-bit samples). |
- */ |
-int |
-TIFFYCbCrToRGBInit(TIFFYCbCrToRGB* ycbcr, float *luma, float *refBlackWhite) |
-{ |
- TIFFRGBValue* clamptab; |
- int i; |
- |
-#define LumaRed luma[0] |
-#define LumaGreen luma[1] |
-#define LumaBlue luma[2] |
- |
- clamptab = (TIFFRGBValue*)( |
- (uint8*) ycbcr+TIFFroundup_32(sizeof (TIFFYCbCrToRGB), sizeof (long))); |
- _TIFFmemset(clamptab, 0, 256); /* v < 0 => 0 */ |
- ycbcr->clamptab = (clamptab += 256); |
- for (i = 0; i < 256; i++) |
- clamptab[i] = (TIFFRGBValue) i; |
- _TIFFmemset(clamptab+256, 255, 2*256); /* v > 255 => 255 */ |
- ycbcr->Cr_r_tab = (int*) (clamptab + 3*256); |
- ycbcr->Cb_b_tab = ycbcr->Cr_r_tab + 256; |
- ycbcr->Cr_g_tab = (int32*) (ycbcr->Cb_b_tab + 256); |
- ycbcr->Cb_g_tab = ycbcr->Cr_g_tab + 256; |
- ycbcr->Y_tab = ycbcr->Cb_g_tab + 256; |
- |
- { float f1 = 2-2*LumaRed; int32 D1 = FIX(f1); |
- float f2 = LumaRed*f1/LumaGreen; int32 D2 = -FIX(f2); |
- float f3 = 2-2*LumaBlue; int32 D3 = FIX(f3); |
- float f4 = LumaBlue*f3/LumaGreen; int32 D4 = -FIX(f4); |
- int x; |
- |
-#undef LumaBlue |
-#undef LumaGreen |
-#undef LumaRed |
- |
- /* |
- * i is the actual input pixel value in the range 0..255 |
- * Cb and Cr values are in the range -128..127 (actually |
- * they are in a range defined by the ReferenceBlackWhite |
- * tag) so there is some range shifting to do here when |
- * constructing tables indexed by the raw pixel data. |
- */ |
- for (i = 0, x = -128; i < 256; i++, x++) { |
- int32 Cr = (int32)Code2V(x, refBlackWhite[4] - 128.0F, |
- refBlackWhite[5] - 128.0F, 127); |
- int32 Cb = (int32)Code2V(x, refBlackWhite[2] - 128.0F, |
- refBlackWhite[3] - 128.0F, 127); |
- |
- ycbcr->Cr_r_tab[i] = (int32)((D1*Cr + ONE_HALF)>>SHIFT); |
- ycbcr->Cb_b_tab[i] = (int32)((D3*Cb + ONE_HALF)>>SHIFT); |
- ycbcr->Cr_g_tab[i] = D2*Cr; |
- ycbcr->Cb_g_tab[i] = D4*Cb + ONE_HALF; |
- ycbcr->Y_tab[i] = |
- (int32)Code2V(x + 128, refBlackWhite[0], refBlackWhite[1], 255); |
- } |
- } |
- |
- return 0; |
-} |
-#undef HICLAMP |
-#undef CLAMP |
-#undef Code2V |
-#undef SHIFT |
-#undef ONE_HALF |
-#undef FIX |
- |
-/* vim: set ts=8 sts=8 sw=8 noet: */ |
-/* |
- * Local Variables: |
- * mode: c |
- * c-basic-offset: 8 |
- * fill-column: 78 |
- * End: |
- */ |
- |