Imported GNU Classpath 0.92
2006-08-14 Mark Wielaard <mark@klomp.org> Imported GNU Classpath 0.92 * HACKING: Add more importing hints. Update automake version requirement. * configure.ac (gconf-peer): New enable AC argument. Add --disable-gconf-peer and --enable-default-preferences-peer to classpath configure when gconf is disabled. * scripts/makemake.tcl: Set gnu/java/util/prefs/gconf and gnu/java/awt/dnd/peer/gtk to bc. Classify gnu/java/security/Configuration.java as generated source file. * gnu/java/lang/management/VMGarbageCollectorMXBeanImpl.java, gnu/java/lang/management/VMMemoryPoolMXBeanImpl.java, gnu/java/lang/management/VMClassLoadingMXBeanImpl.java, gnu/java/lang/management/VMRuntimeMXBeanImpl.java, gnu/java/lang/management/VMMemoryManagerMXBeanImpl.java, gnu/java/lang/management/VMThreadMXBeanImpl.java, gnu/java/lang/management/VMMemoryMXBeanImpl.java, gnu/java/lang/management/VMCompilationMXBeanImpl.java: New VM stub classes. * java/lang/management/VMManagementFactory.java: Likewise. * java/net/VMURLConnection.java: Likewise. * gnu/java/nio/VMChannel.java: Likewise. * java/lang/Thread.java (getState): Add stub implementation. * java/lang/Class.java (isEnum): Likewise. * java/lang/Class.h (isEnum): Likewise. * gnu/awt/xlib/XToolkit.java (getClasspathTextLayoutPeer): Removed. * javax/naming/spi/NamingManager.java: New override for StackWalker functionality. * configure, sources.am, Makefile.in, gcj/Makefile.in, include/Makefile.in, testsuite/Makefile.in: Regenerated. From-SVN: r116139
This commit is contained in:
parent
abab460491
commit
ac1ed908de
1294 changed files with 99479 additions and 35933 deletions
347
libjava/classpath/gnu/javax/imageio/jpeg/DCT.java
Normal file
347
libjava/classpath/gnu/javax/imageio/jpeg/DCT.java
Normal file
|
@ -0,0 +1,347 @@
|
|||
/* DCT.java --
|
||||
Copyright (C) 2005 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU Classpath.
|
||||
|
||||
GNU Classpath is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU Classpath is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU Classpath; see the file COPYING. If not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
02110-1301 USA.
|
||||
|
||||
Linking this library statically or dynamically with other modules is
|
||||
making a combined work based on this library. Thus, the terms and
|
||||
conditions of the GNU General Public License cover the whole
|
||||
combination.
|
||||
|
||||
As a special exception, the copyright holders of this library give you
|
||||
permission to link this library with independent modules to produce an
|
||||
executable, regardless of the license terms of these independent
|
||||
modules, and to copy and distribute the resulting executable under
|
||||
terms of your choice, provided that you also meet, for each linked
|
||||
independent module, the terms and conditions of the license of that
|
||||
module. An independent module is a module which is not derived from
|
||||
or based on this library. If you modify this library, you may extend
|
||||
this exception to your version of the library, but you are not
|
||||
obligated to do so. If you do not wish to do so, delete this
|
||||
exception statement from your version. */
|
||||
|
||||
package gnu.javax.imageio.jpeg;
|
||||
|
||||
/**
|
||||
* Discrete Cosine Transformations.
|
||||
*/
|
||||
public class DCT
|
||||
{
|
||||
|
||||
/**
|
||||
* Cosine matrix
|
||||
*/
|
||||
public double c[][] = new double[8][8];
|
||||
|
||||
/**
|
||||
* Transformed cosine matrix
|
||||
*/
|
||||
public double cT[][] = new double[8][8];
|
||||
|
||||
public DCT()
|
||||
{
|
||||
initMatrix();
|
||||
}
|
||||
|
||||
/**
|
||||
* Figure A.3.3 IDCT, Cu Cv on A-5 of the ISO DIS 10918-1. Requirements and
|
||||
* Guidelines.
|
||||
*
|
||||
* @param u
|
||||
* @return
|
||||
*/
|
||||
public static double C(int u)
|
||||
{
|
||||
return ((u == 0) ? (double) 1 / (double) Math.sqrt((double) 2)
|
||||
: (double) 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize matrix values for the fast_idct function
|
||||
*/
|
||||
private void initMatrix()
|
||||
{
|
||||
for (int j = 0; j < 8; j++)
|
||||
{
|
||||
double nn = (double) (8);
|
||||
c[0][j] = 1.0 / Math.sqrt(nn);
|
||||
cT[j][0] = c[0][j];
|
||||
}
|
||||
for (int i = 1; i < 8; i++)
|
||||
{
|
||||
for (int j = 0; j < 8; j++)
|
||||
{
|
||||
double jj = (double) j;
|
||||
double ii = (double) i;
|
||||
c[i][j] =
|
||||
Math.sqrt(2.0 / 8.0)
|
||||
* Math.cos(((2.0 * jj + 1.0) * ii * Math.PI) / (2.0 * 8.0));
|
||||
cT[j][i] = c[i][j];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* slow_idct - Figure A.3.3 IDCT (informative) on A-5 of the ISO DIS
|
||||
* 10918-1. Requirements and Guidelines. This is a slow IDCT, there are
|
||||
* better algorithms to use, it's fairly expensive with processor speed.
|
||||
*
|
||||
* @param matrix
|
||||
* @return
|
||||
*/
|
||||
public static double[][] slow_idct(double[][] matrix)
|
||||
{
|
||||
double[][] output = new double[matrix.length][matrix.length];
|
||||
for (int y = 0; y < 8; y++)
|
||||
{
|
||||
for (int x = 0; x < 8; x++)
|
||||
{
|
||||
double val = 0;
|
||||
for (double v = 0; v < 8; v++)
|
||||
{
|
||||
double innerloop = 0;
|
||||
for (double u = 0; u < 8; u++)
|
||||
innerloop += (DCT.C((int) u) / (double) 2)
|
||||
* matrix[(int) v][(int) u]
|
||||
* Math.cos((2 * x + 1) * u * Math.PI / (double) 16)
|
||||
* Math.cos((2 * y + 1) * v * Math.PI / (double) 16);
|
||||
val += (DCT.C((int) v) / (double) 2) * innerloop;
|
||||
}
|
||||
output[y][x] = (val + 128);
|
||||
}
|
||||
}
|
||||
return (output);
|
||||
}
|
||||
|
||||
public static float[][] slow_fdct(float[][] value)
|
||||
{
|
||||
float[][] buffer = new float[8][8];
|
||||
|
||||
for (int u = 0; u < 8; u++)
|
||||
{
|
||||
for (int v = 0; v < 8; v++)
|
||||
{
|
||||
buffer[u][v] =
|
||||
(float) (1 / 4) * (float) C((int) u) * (float) C((int) v);
|
||||
float innerval = 0;
|
||||
for (int x = 0; x < 8; x++)
|
||||
{
|
||||
for (int y = 0; y < 8; y++)
|
||||
{
|
||||
innerval += value[y][x]
|
||||
* Math.cos(((2 * x + 1) * u * Math.PI) / 16)
|
||||
* Math.cos(((2 * y + 1) * v * Math.PI) / 16);
|
||||
}
|
||||
}
|
||||
buffer[u][v] *= innerval;
|
||||
}
|
||||
}
|
||||
return (buffer);
|
||||
}
|
||||
|
||||
public float[][] fast_fdct(float[][] input)
|
||||
{
|
||||
float output[][] = new float[8][8];
|
||||
double temp[][] = new double[8][8];
|
||||
double temp1;
|
||||
int i;
|
||||
int j;
|
||||
int k;
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
for (j = 0; j < 8; j++)
|
||||
{
|
||||
temp[i][j] = 0.0;
|
||||
for (k = 0; k < 8; k++)
|
||||
{
|
||||
temp[i][j] += (((int) (input[i][k]) - 128) * cT[k][j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
for (j = 0; j < 8; j++)
|
||||
{
|
||||
temp1 = 0.0;
|
||||
|
||||
for (k = 0; k < 8; k++)
|
||||
{
|
||||
temp1 += (c[i][k] * temp[k][j]);
|
||||
}
|
||||
|
||||
output[i][j] = (int) Math.round(temp1) * 8;
|
||||
}
|
||||
}
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
/**
|
||||
* fast_idct - Figure A.3.3 IDCT (informative) on A-5 of the ISO DIS
|
||||
* 10918-1. Requires and Guidelines. This is a fast IDCT, it much more
|
||||
* effecient and only inaccurate at about 1/1000th of a percent of values
|
||||
* analyzed. Cannot be static because initMatrix must run before any
|
||||
* fast_idct values can be computed.
|
||||
*
|
||||
* @param input
|
||||
* @return
|
||||
*/
|
||||
public double[][] fast_idct(double[][] input)
|
||||
{
|
||||
double output[][] = new double[8][8];
|
||||
double temp[][] = new double[8][8];
|
||||
double temp1;
|
||||
int i, j, k;
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
for (j = 0; j < 8; j++)
|
||||
{
|
||||
temp[i][j] = 0.0;
|
||||
for (k = 0; k < 8; k++)
|
||||
{
|
||||
temp[i][j] += input[i][k] * c[k][j];
|
||||
}
|
||||
}
|
||||
}
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
for (j = 0; j < 8; j++)
|
||||
{
|
||||
temp1 = 0.0;
|
||||
for (k = 0; k < 8; k++)
|
||||
temp1 += cT[i][k] * temp[k][j];
|
||||
temp1 += 128.0;
|
||||
if (temp1 < 0)
|
||||
output[i][j] = 0;
|
||||
else if (temp1 > 255)
|
||||
output[i][j] = 255;
|
||||
else
|
||||
output[i][j] = (int) Math.round(temp1);
|
||||
}
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
public double[][] idj_fast_fdct(float input[][])
|
||||
{
|
||||
double output[][] = new double[8][8];
|
||||
double tmp0, tmp1, tmp2, tmp3, tmp4, tmp5, tmp6, tmp7;
|
||||
double tmp10, tmp11, tmp12, tmp13;
|
||||
double z1, z2, z3, z4, z5, z11, z13;
|
||||
int i;
|
||||
int j;
|
||||
|
||||
// Subtracts 128 from the input values
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
for (j = 0; j < 8; j++)
|
||||
{
|
||||
output[i][j] = ((double) input[i][j] - (double) 128.0);
|
||||
// input[i][j] -= 128;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
tmp0 = output[i][0] + output[i][7];
|
||||
tmp7 = output[i][0] - output[i][7];
|
||||
tmp1 = output[i][1] + output[i][6];
|
||||
tmp6 = output[i][1] - output[i][6];
|
||||
tmp2 = output[i][2] + output[i][5];
|
||||
tmp5 = output[i][2] - output[i][5];
|
||||
tmp3 = output[i][3] + output[i][4];
|
||||
tmp4 = output[i][3] - output[i][4];
|
||||
|
||||
tmp10 = tmp0 + tmp3;
|
||||
tmp13 = tmp0 - tmp3;
|
||||
tmp11 = tmp1 + tmp2;
|
||||
tmp12 = tmp1 - tmp2;
|
||||
|
||||
output[i][0] = tmp10 + tmp11;
|
||||
output[i][4] = tmp10 - tmp11;
|
||||
|
||||
z1 = (tmp12 + tmp13) * (double) 0.707106781;
|
||||
output[i][2] = tmp13 + z1;
|
||||
output[i][6] = tmp13 - z1;
|
||||
|
||||
tmp10 = tmp4 + tmp5;
|
||||
tmp11 = tmp5 + tmp6;
|
||||
tmp12 = tmp6 + tmp7;
|
||||
|
||||
z5 = (tmp10 - tmp12) * (double) 0.382683433;
|
||||
z2 = ((double) 0.541196100) * tmp10 + z5;
|
||||
z4 = ((double) 1.306562965) * tmp12 + z5;
|
||||
z3 = tmp11 * ((double) 0.707106781);
|
||||
|
||||
z11 = tmp7 + z3;
|
||||
z13 = tmp7 - z3;
|
||||
|
||||
output[i][5] = z13 + z2;
|
||||
output[i][3] = z13 - z2;
|
||||
output[i][1] = z11 + z4;
|
||||
output[i][7] = z11 - z4;
|
||||
}
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
tmp0 = output[0][i] + output[7][i];
|
||||
tmp7 = output[0][i] - output[7][i];
|
||||
tmp1 = output[1][i] + output[6][i];
|
||||
tmp6 = output[1][i] - output[6][i];
|
||||
tmp2 = output[2][i] + output[5][i];
|
||||
tmp5 = output[2][i] - output[5][i];
|
||||
tmp3 = output[3][i] + output[4][i];
|
||||
tmp4 = output[3][i] - output[4][i];
|
||||
|
||||
tmp10 = tmp0 + tmp3;
|
||||
tmp13 = tmp0 - tmp3;
|
||||
tmp11 = tmp1 + tmp2;
|
||||
tmp12 = tmp1 - tmp2;
|
||||
|
||||
output[0][i] = tmp10 + tmp11;
|
||||
output[4][i] = tmp10 - tmp11;
|
||||
|
||||
z1 = (tmp12 + tmp13) * (double) 0.707106781;
|
||||
output[2][i] = tmp13 + z1;
|
||||
output[6][i] = tmp13 - z1;
|
||||
|
||||
tmp10 = tmp4 + tmp5;
|
||||
tmp11 = tmp5 + tmp6;
|
||||
tmp12 = tmp6 + tmp7;
|
||||
|
||||
z5 = (tmp10 - tmp12) * (double) 0.382683433;
|
||||
z2 = ((double) 0.541196100) * tmp10 + z5;
|
||||
z4 = ((double) 1.306562965) * tmp12 + z5;
|
||||
z3 = tmp11 * ((double) 0.707106781);
|
||||
|
||||
z11 = tmp7 + z3;
|
||||
z13 = tmp7 - z3;
|
||||
|
||||
output[5][i] = z13 + z2;
|
||||
output[3][i] = z13 - z2;
|
||||
output[1][i] = z11 + z4;
|
||||
output[7][i] = z11 - z4;
|
||||
}
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue