~ubuntu-branches/ubuntu/hoary/kdemultimedia/hoary

« back to all changes in this revision

Viewing changes to mpg123_artsplugin/mpg123/dct64_i486-b.c

  • Committer: Bazaar Package Importer
  • Author(s): Martin Schulze
  • Date: 2003-01-22 15:00:51 UTC
  • Revision ID: james.westby@ubuntu.com-20030122150051-uihwkdoxf15mi1tn
Tags: upstream-2.2.2
ImportĀ upstreamĀ versionĀ 2.2.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* Discrete Cosine Tansform (DCT) for subband synthesis.
 
2
 *
 
3
 * This code is optimized for 80486. It should be compiled with gcc
 
4
 * 2.7.2 or higher.
 
5
 *
 
6
 * Note: This code does not give the necessary accuracy. Moreover, no
 
7
 * overflow test are done.
 
8
 *
 
9
 * (c) 1998 Fabrice Bellard.  
 
10
 * 
 
11
 * Rewrite to asm with algorithm and memory optimization 
 
12
 *
 
13
 * (c)  2000 Petr Salinger
 
14
 *
 
15
 * GPL clean
 
16
 *
 
17
 */
 
18
 
 
19
#include "mpg123.h"
 
20
 
 
21
#define COS_0_0 16403
 
22
#define COS_0_1 16563
 
23
#define COS_0_2 16890
 
24
#define COS_0_3 17401
 
25
#define COS_0_4 18124
 
26
#define COS_0_5 19101
 
27
#define COS_0_6 20398
 
28
#define COS_0_7 22112
 
29
#define COS_0_8 24396
 
30
#define COS_0_9 27503
 
31
#define COS_0_10 31869
 
32
#define COS_0_11 38320
 
33
#define COS_0_12 48633
 
34
#define COS_0_13 67429
 
35
#define COS_0_14 111660
 
36
#define COS_0_15 333906
 
37
#define COS_1_0 16463
 
38
#define COS_1_1 17121
 
39
#define COS_1_2 18577
 
40
#define COS_1_3 21195
 
41
#define COS_1_4 25826
 
42
#define COS_1_5 34756
 
43
#define COS_1_6 56441
 
44
#define COS_1_7 167154
 
45
#define COS_2_0 16704
 
46
#define COS_2_1 19704
 
47
#define COS_2_2 29490
 
48
#define COS_2_3 83981
 
49
#define COS_3_0 17733
 
50
#define COS_3_1 42813
 
51
#define COS_4_0 23170         
 
52
 
 
53
#define SETOUT(out,n,expr) out[FIR_BUFFER_SIZE*(n)]=(expr)
 
54
#define MUL(a,b) (((a)*(b)) >> 15)
 
55
#define MULL(a,b) (((long long)(a)*(long long)(b)) >> 15)
 
56
#define TOINT(a) ((int)((a)*32768.0))
 
57
 
 
58
void dct64_1_486_a(real *samples, int *bx);
 
59
 
 
60
void dct64_1_486_b(int *out0, int *out1, int *b1)
 
61
{
 
62
  b1[0x02] += b1[0x03];
 
63
  b1[0x06] += b1[0x07];
 
64
  b1[0x04] += b1[0x06];
 
65
  b1[0x06] += b1[0x05];
 
66
  b1[0x05] += b1[0x07];
 
67
 
 
68
  b1[0x0A] += b1[0x0B];
 
69
  b1[0x0E] += b1[0x0F];
 
70
  b1[0x0C] += b1[0x0E];
 
71
  b1[0x0E] += b1[0x0D];
 
72
  b1[0x0D] += b1[0x0F];
 
73
 
 
74
  b1[0x12] += b1[0x13];
 
75
  b1[0x16] += b1[0x17];
 
76
  b1[0x14] += b1[0x16];
 
77
  b1[0x16] += b1[0x15];
 
78
  b1[0x15] += b1[0x17];
 
79
 
 
80
  b1[0x1A] += b1[0x1B];
 
81
  b1[0x1E] += b1[0x1F];
 
82
  b1[0x1C] += b1[0x1E];
 
83
  b1[0x1E] += b1[0x1D];
 
84
  b1[0x1D] += b1[0x1F];
 
85
 
 
86
 SETOUT(out0,16,b1[0x00]);
 
87
 SETOUT(out0,12,b1[0x04]);
 
88
 SETOUT(out0, 8,b1[0x02]);
 
89
 SETOUT(out0, 4,b1[0x06]);
 
90
 SETOUT(out0, 0,b1[0x01]);
 
91
 SETOUT(out1, 0,b1[0x01]);
 
92
 SETOUT(out1, 4,b1[0x05]);
 
93
 SETOUT(out1, 8,b1[0x03]);
 
94
 SETOUT(out1,12,b1[0x07]);
 
95
 
 
96
 SETOUT(out0,14, b1[0x08] + b1[0x0C]);
 
97
 SETOUT(out0,10, b1[0x0C] + b1[0x0A]);
 
98
 SETOUT(out0, 6, b1[0x0A] + b1[0x0E]);
 
99
 SETOUT(out0, 2, b1[0x0E] + b1[0x09]);
 
100
 SETOUT(out1, 2, b1[0x09] + b1[0x0D]);
 
101
 SETOUT(out1, 6, b1[0x0D] + b1[0x0B]);
 
102
 SETOUT(out1,10, b1[0x0B] + b1[0x0F]);
 
103
 SETOUT(out1,14, b1[0x0F]);
 
104
 
 
105
 b1[0x18] += b1[0x1C];
 
106
 SETOUT(out0,15,b1[0x10] + b1[0x18]);
 
107
 SETOUT(out0,13,b1[0x18] + b1[0x14]);
 
108
 b1[0x1C] += b1[0x1a];
 
109
 SETOUT(out0,11,b1[0x14] + b1[0x1C]);
 
110
 SETOUT(out0, 9,b1[0x1C] + b1[0x12]);
 
111
 b1[0x1A] += b1[0x1E];
 
112
 SETOUT(out0, 7,b1[0x12] + b1[0x1A]);
 
113
 SETOUT(out0, 5,b1[0x1A] + b1[0x16]);
 
114
 b1[0x1E] += b1[0x19];
 
115
 SETOUT(out0, 3,b1[0x16] + b1[0x1E]);
 
116
 SETOUT(out0, 1,b1[0x1E] + b1[0x11]);
 
117
 b1[0x19] += b1[0x1D];
 
118
 SETOUT(out1, 1,b1[0x11] + b1[0x19]);
 
119
 SETOUT(out1, 3,b1[0x19] + b1[0x15]);
 
120
 b1[0x1D] += b1[0x1B];
 
121
 SETOUT(out1, 5,b1[0x15] + b1[0x1D]);
 
122
 SETOUT(out1, 7,b1[0x1D] + b1[0x13]);
 
123
 b1[0x1B] += b1[0x1F];
 
124
 SETOUT(out1, 9,b1[0x13] + b1[0x1B]);
 
125
 SETOUT(out1,11,b1[0x1B] + b1[0x17]);
 
126
 SETOUT(out1,13,b1[0x17] + b1[0x1F]);
 
127
 SETOUT(out1,15,b1[0x1F]);
 
128
}
 
129
 
 
130
/*
 
131
 * main DCT function
 
132
 */
 
133
void dct64_486(int *a,int *b,real *samples)
 
134
{
 
135
  int bufs[33]; /* 32 + 1 extra for 8B store from x87 */
 
136
 
 
137
  dct64_1_486_a(samples,bufs);
 
138
  dct64_1_486_b(a,b,bufs);
 
139
}
 
140