summaryrefslogtreecommitdiff
path: root/songdbj/de/jarnbjo/vorbis/Util.java
diff options
context:
space:
mode:
Diffstat (limited to 'songdbj/de/jarnbjo/vorbis/Util.java')
-rw-r--r--songdbj/de/jarnbjo/vorbis/Util.java127
1 files changed, 127 insertions, 0 deletions
diff --git a/songdbj/de/jarnbjo/vorbis/Util.java b/songdbj/de/jarnbjo/vorbis/Util.java
new file mode 100644
index 0000000000..7e31c9495e
--- /dev/null
+++ b/songdbj/de/jarnbjo/vorbis/Util.java
@@ -0,0 +1,127 @@
1/*
2 * $ProjectName$
3 * $ProjectRevision$
4 * -----------------------------------------------------------
5 * $Id$
6 * -----------------------------------------------------------
7 *
8 * $Author$
9 *
10 * Description:
11 *
12 * Copyright 2002-2003 Tor-Einar Jarnbjo
13 * -----------------------------------------------------------
14 *
15 * Change History
16 * -----------------------------------------------------------
17 * $Log$
18 * Revision 1.1 2005/07/11 15:42:36 hcl
19 * Songdb java version, source. only 1.5 compatible
20 *
21 * Revision 1.1.1.1 2004/04/04 22:09:12 shred
22 * First Import
23 *
24 * Revision 1.3 2003/04/10 19:49:04 jarnbjo
25 * no message
26 *
27 * Revision 1.2 2003/03/16 01:11:12 jarnbjo
28 * no message
29 *
30 *
31 */
32
33package de.jarnbjo.vorbis;
34
35final public class Util {
36
37 public static final int ilog(int x) {
38 int res=0;
39 for(; x>0; x>>=1, res++);
40 return res;
41 }
42
43 public static final float float32unpack(int x) {
44 float mantissa=x&0x1fffff;
45 float e=(x&0x7fe00000)>>21;
46 if((x&0x80000000)!=0) {
47 mantissa=-mantissa;
48 }
49 return mantissa*(float)Math.pow(2.0, e-788.0);
50 }
51
52 public static final int lookup1Values(int a, int b) {
53 int res=(int)Math.pow(Math.E, Math.log(a)/b);
54 return intPow(res+1, b)<=a?res+1:res;
55 }
56
57 public static final int intPow(int base, int e) {
58 int res=1;
59 for(; e>0; e--, res*=base);
60 return res;
61 }
62
63 public static final boolean isBitSet(int value, int bit) {
64 return (value&(1<<bit))!=0;
65 }
66
67 public static final int icount(int value) {
68 int res=0;
69 while(value>0) {
70 res+=value&1;
71 value>>=1;
72 }
73 return res;
74 }
75
76 public static final int lowNeighbour(int[] v, int x) {
77 int max=-1, n=0;
78 for(int i=0; i<v.length && i<x; i++) {
79 if(v[i]>max && v[i]<v[x]) {
80 max=v[i];
81 n=i;
82 }
83 }
84 return n;
85 }
86
87 public static final int highNeighbour(int[] v, int x) {
88 int min=Integer.MAX_VALUE, n=0;
89 for(int i=0; i<v.length && i<x; i++) {
90 if(v[i]<min && v[i]>v[x]) {
91 min=v[i];
92 n=i;
93 }
94 }
95 return n;
96 }
97
98 public static final int renderPoint(int x0, int x1, int y0, int y1, int x) {
99 int dy=y1-y0;
100 int ady=dy<0?-dy:dy;
101 int off=(ady*(x-x0))/(x1-x0);
102 return dy<0?y0-off:y0+off;
103 }
104
105 public static final void renderLine(final int x0, final int y0, final int x1, final int y1, final float[] v) {
106 final int dy=y1-y0;
107 final int adx=x1-x0;
108 final int base=dy/adx;
109 final int sy=dy<0?base-1:base+1;
110 int x=x0;
111 int y=y0;
112 int err=0;
113 final int ady=(dy<0?-dy:dy)-(base>0?base*adx:-base*adx);
114
115 v[x]*=Floor.DB_STATIC_TABLE[y];
116 for(x=x0+1; x<x1; x++) {
117 err+=ady;
118 if(err>=adx) {
119 err-=adx;
120 v[x]*=Floor.DB_STATIC_TABLE[y+=sy];
121 }
122 else {
123 v[x]*=Floor.DB_STATIC_TABLE[y+=base];
124 }
125 }
126 }
127} \ No newline at end of file