de.jarnbjo.vorbis.Util Maven / Gradle / Ivy
/*
* $ProjectName$
* $ProjectRevision$
* -----------------------------------------------------------
* $Id: Util.java,v 1.3 2003/04/10 19:49:04 jarnbjo Exp $
* -----------------------------------------------------------
*
* $Author: jarnbjo $
*
* Description:
*
* Copyright 2002-2003 Tor-Einar Jarnbjo
* -----------------------------------------------------------
*
* Change History
* -----------------------------------------------------------
* $Log: Util.java,v $
* Revision 1.3 2003/04/10 19:49:04 jarnbjo
* no message
*
* Revision 1.2 2003/03/16 01:11:12 jarnbjo
* no message
*/
package de.jarnbjo.vorbis;
final public class Util {
/**
* A private constructor to inhibit instantiation of this class.
*/
private Util() {
}
public static int ilog(int x) {
int res = 0;
while (x > 0) {
x >>= 1;
++res;
}
return res;
}
public static float float32unpack(int x) {
float mantissa = x & 0x1fffff;
float e = (x & 0x7fe00000) >> 21;
if ((x & 0x80000000) != 0) {
mantissa = -mantissa;
}
return mantissa * (float) Math.pow(2.0, e - 788.0);
}
public static int lookup1Values(int a, int b) {
int res = (int) Math.pow(Math.E, Math.log(a) / b);
return intPow(res + 1, b) <= a ? res + 1 : res;
}
public static int intPow(int base, int e) {
int res = 1;
while (e > 0) {
res *= base;
--e;
}
return res;
}
public static boolean isBitSet(int value, int bit) {
return (value & (1 << bit)) != 0;
}
public static int icount(int value) {
int res = 0;
while (value > 0) {
res += value & 1;
value >>= 1;
}
return res;
}
public static int lowNeighbour(int[] v, int x) {
int max = -1, n = 0;
for (int i = 0; i < v.length && i < x; i++) {
if (v[i] > max && v[i] < v[x]) {
max = v[i];
n = i;
}
}
return n;
}
public static int highNeighbour(int[] v, int x) {
int min = Integer.MAX_VALUE, n = 0;
for (int i = 0; i < v.length && i < x; i++) {
if (v[i] < min && v[i] > v[x]) {
min = v[i];
n = i;
}
}
return n;
}
public static int renderPoint(int x0, int x1, int y0, int y1, int x) {
int dy = y1 - y0;
int ady = dy < 0 ? -dy : dy;
int off = (ady * (x - x0)) / (x1 - x0);
return dy < 0 ? y0 - off : y0 + off;
}
public static void renderLine(final int x0, final int y0, final int x1,
final int y1, final float[] v) {
final int dy = y1 - y0;
final int adx = x1 - x0;
final int base = dy / adx;
final int sy = dy < 0 ? base - 1 : base + 1;
int x = x0;
int y = y0;
int err = 0;
final int ady = (dy < 0 ? -dy : dy)
- (base > 0 ? base * adx : -base * adx);
v[x] *= Floor.DB_STATIC_TABLE[y];
for (x = x0 + 1; x < x1; x++) {
err += ady;
if (err >= adx) {
err -= adx;
v[x] *= Floor.DB_STATIC_TABLE[y += sy];
} else {
v[x] *= Floor.DB_STATIC_TABLE[y += base];
}
}
}
}