Skip to content

Commit b333dd0

Browse files
author
n64
committed
fix tabledesign
1 parent 89e8690 commit b333dd0

File tree

8 files changed

+868
-1
lines changed

8 files changed

+868
-1
lines changed

tools/Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ aifc_decode_CFLAGS := -O2 # both runs and compiles faster than -O3
2424

2525
aiff_extract_codebook_SOURCES := aiff_extract_codebook.c
2626

27-
tabledesign_SOURCES := sdk-tools/tabledesign/codebook.c sdk-tools/tabledesign/estimate.c sdk-tools/tabledesign/print.c sdk-tools/tabledesign/tabledesign.c
27+
tabledesign_SOURCES := sdk-tools/tabledesign_src/codebook.c sdk-tools/tabledesign_src/estimate.c sdk-tools/tabledesign_src/print.c sdk-tools/tabledesign_src/tabledesign.c
2828
tabledesign_CFLAGS := -Wno-uninitialized -laudiofile
2929

3030
vadpcm_enc_SOURCES := sdk-tools/adpcm/vadpcm_enc.c sdk-tools/adpcm/vpredictor.c sdk-tools/adpcm/quant.c sdk-tools/adpcm/util.c sdk-tools/adpcm/vencode.c
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
*.o
2+
*.s
3+
*.dump
4+
*.aiff
5+
*.aifc
6+
*.table
7+
/tabledesign_irix
8+
/tabledesign_native
9+
/tabledesign_orig
+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Makefile for building tabledesign for either IRIX or natively.
2+
# For an IRIX build, the env variable IRIX_ROOT should point to the root of an
3+
# IRIX filesystem, and QEMU_IRIX should point to the qemu-irix binary.
4+
5+
IRIX_CC := $(QEMU_IRIX) -silent -L $(IRIX_ROOT) $(IRIX_ROOT)/usr/bin/cc
6+
IRIX_CFLAGS := -fullwarn -Wab,-r4300_mul -Xcpluscomm -mips1 -O2
7+
8+
NATIVE_CC := gcc
9+
NATIVE_CFLAGS := -Wall -Wno-uninitialized -O2
10+
11+
LDFLAGS := -lm -laudiofile
12+
13+
default: native
14+
all: irix native
15+
16+
irix: tabledesign_irix
17+
native: tabledesign_native
18+
19+
clean:
20+
$(RM) *.o tabledesign_irix tabledesign_native
21+
22+
%.o: %.c
23+
$(IRIX_CC) -c $(IRIX_CFLAGS) $< -o $@
24+
25+
tabledesign_irix: tabledesign.o codebook.o estimate.o print.o
26+
$(IRIX_CC) $^ -o $@ $(LDFLAGS)
27+
28+
tabledesign_native: tabledesign.c codebook.c estimate.c print.c
29+
$(NATIVE_CC) $(NATIVE_CFLAGS) $^ -o $@ $(LDFLAGS)
30+
31+
.PHONY: default all irix native clean
+104
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
#include <stdlib.h>
2+
#include "tabledesign.h"
3+
4+
void split(double **table, double *delta, int order, int npredictors, double scale)
5+
{
6+
int i, j;
7+
8+
for (i = 0; i < npredictors; i++)
9+
{
10+
for (j = 0; j <= order; j++)
11+
{
12+
table[i + npredictors][j] = table[i][j] + delta[j] * scale;
13+
}
14+
}
15+
}
16+
17+
void refine(double **table, int order, int npredictors, double **data, int dataSize, int refineIters, UNUSED double unused)
18+
{
19+
int iter; // spD8
20+
double **rsums;
21+
int *counts; // spD0
22+
double *temp_s7;
23+
double dist;
24+
double dummy; // spC0
25+
double bestValue;
26+
int bestIndex;
27+
int i, j;
28+
29+
rsums = malloc(npredictors * sizeof(double*));
30+
for (i = 0; i < npredictors; i++)
31+
{
32+
rsums[i] = malloc((order + 1) * sizeof(double));
33+
}
34+
35+
counts = malloc(npredictors * sizeof(int));
36+
temp_s7 = malloc((order + 1) * sizeof(double));
37+
38+
for (iter = 0; iter < refineIters; iter++)
39+
{
40+
for (i = 0; i < npredictors; i++)
41+
{
42+
counts[i] = 0;
43+
for (j = 0; j <= order; j++)
44+
{
45+
rsums[i][j] = 0.0;
46+
}
47+
}
48+
49+
for (i = 0; i < dataSize; i++)
50+
{
51+
bestValue = 1e30;
52+
bestIndex = 0;
53+
54+
for (j = 0; j < npredictors; j++)
55+
{
56+
dist = model_dist(table[j], data[i], order);
57+
if (dist < bestValue)
58+
{
59+
bestValue = dist;
60+
bestIndex = j;
61+
}
62+
}
63+
64+
counts[bestIndex]++;
65+
rfroma(data[i], order, temp_s7);
66+
for (j = 0; j <= order; j++)
67+
{
68+
rsums[bestIndex][j] += temp_s7[j];
69+
}
70+
}
71+
72+
for (i = 0; i < npredictors; i++)
73+
{
74+
if (counts[i] > 0)
75+
{
76+
for (j = 0; j <= order; j++)
77+
{
78+
rsums[i][j] /= counts[i];
79+
}
80+
}
81+
}
82+
83+
for (i = 0; i < npredictors; i++)
84+
{
85+
durbin(rsums[i], order, temp_s7, table[i], &dummy);
86+
87+
for (j = 1; j <= order; j++)
88+
{
89+
if (temp_s7[j] >= 1.0) temp_s7[j] = 0.9999999999;
90+
if (temp_s7[j] <= -1.0) temp_s7[j] = -0.9999999999;
91+
}
92+
93+
afromk(temp_s7, table[i], order);
94+
}
95+
}
96+
97+
free(counts);
98+
for (i = 0; i < npredictors; i++)
99+
{
100+
free(rsums[i]);
101+
}
102+
free(rsums);
103+
free(temp_s7);
104+
}

0 commit comments

Comments
 (0)