Mercurial > libavcodec.hg
annotate ra144.c @ 6806:e4be053e7d9b libavcodec
Remove unneeded fields from the decoder context
author | vitor |
---|---|
date | Thu, 15 May 2008 18:34:31 +0000 |
parents | 8faad14a40a5 |
children | c19ef48adf18 |
rev | line source |
---|---|
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
1 /* |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
2 * Real Audio 1.0 (14.4K) |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
3 * Copyright (c) 2003 the ffmpeg project |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
4 * |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3036
diff
changeset
|
5 * This file is part of FFmpeg. |
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3036
diff
changeset
|
6 * |
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3036
diff
changeset
|
7 * FFmpeg is free software; you can redistribute it and/or |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
8 * modify it under the terms of the GNU Lesser General Public |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
9 * License as published by the Free Software Foundation; either |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3036
diff
changeset
|
10 * version 2.1 of the License, or (at your option) any later version. |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
11 * |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3036
diff
changeset
|
12 * FFmpeg is distributed in the hope that it will be useful, |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
15 * Lesser General Public License for more details. |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
16 * |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
17 * You should have received a copy of the GNU Lesser General Public |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3036
diff
changeset
|
18 * License along with FFmpeg; if not, write to the Free Software |
3036
0b546eab515d
Update licensing information: The FSF changed postal address.
diego
parents:
2979
diff
changeset
|
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
20 */ |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
21 |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
22 #include "avcodec.h" |
6768
e14c77547f93
Rewrite unpack_input() completely, patch by Vitor Sessak, vitor1001 gmail com.
diego
parents:
6767
diff
changeset
|
23 #include "bitstream.h" |
1335
b4a72edb3a71
moved the tables into header files (and applied the 'static' patch). Nick: why do you like mergeing tables and code into one file, so making it unusable big?
al3x
parents:
1305
diff
changeset
|
24 #include "ra144.h" |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
25 |
2979 | 26 #define NBLOCKS 4 /* number of segments within a block */ |
27 #define BLOCKSIZE 40 /* (quarter) block size in 16-bit words (80 bytes) */ | |
28 #define HALFBLOCK 20 /* BLOCKSIZE/2 */ | |
29 #define BUFFERSIZE 146 /* for do_output */ | |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
30 |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
31 |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
32 /* internal globals */ |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
33 typedef struct { |
6806 | 34 unsigned int oldval; |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
35 unsigned int gbuf1[8]; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
36 unsigned short gbuf2[120]; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
37 unsigned int *decptr; /* decoder ptr */ |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
38 signed short *decsp; |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
39 |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
40 /* the swapped buffers */ |
6806 | 41 unsigned int swapbuffers[4][10]; |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
42 unsigned int *swapbuf1; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
43 unsigned int *swapbuf2; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
44 unsigned int *swapbuf1alt; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
45 unsigned int *swapbuf2alt; |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
46 |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
47 unsigned int buffer[5]; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
48 unsigned short int buffer_2[148]; |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
49 |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
50 unsigned short *sptr; |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
51 |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
52 signed short wavtable1[2304]; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
53 unsigned short wavtable2[2304]; |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
54 } Real144_internal; |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
55 |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
56 static int ra144_decode_init(AVCodecContext * avctx) |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
57 { |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
58 Real144_internal *glob = avctx->priv_data; |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
59 |
6806 | 60 glob->swapbuf1 = glob->swapbuffers[0]; |
61 glob->swapbuf2 = glob->swapbuffers[1]; | |
62 glob->swapbuf1alt = glob->swapbuffers[2]; | |
63 glob->swapbuf2alt = glob->swapbuffers[3]; | |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
64 |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
65 memcpy(glob->wavtable1, wavtable1, sizeof(wavtable1)); |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
66 memcpy(glob->wavtable2, wavtable2, sizeof(wavtable2)); |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
67 |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
68 return 0; |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
69 } |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
70 |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
71 static void final(Real144_internal *glob, short *i1, short *i2, void *out, int *statbuf, int len); |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
72 static void add_wav(Real144_internal *glob, int n, int f, int m1, int m2, int m3, short *s1, short *s2, short *s3, short *dest); |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
73 static int irms(short *data, int factor); |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
74 static void rotate_block(short *source, short *target, int offset); |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
75 |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
76 /* lookup square roots in table */ |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
77 static int t_sqrt(unsigned int x) |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
78 { |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
79 int s = 0; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
80 while (x > 0xfff) { |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
81 s++; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
82 x = x >> 2; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
83 } |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
84 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
85 return (sqrt_table[x] << s) << 2; |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
86 } |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
87 |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
88 /* do 'voice' */ |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
89 static void do_voice(int *a1, int *a2) |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
90 { |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
91 int buffer[10]; |
6782 | 92 int *b1 = buffer; |
93 int *b2 = a2; | |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
94 int x, y; |
2967 | 95 |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
96 for (x=0; x < 10; x++) { |
6782 | 97 b1[x] = a1[x] << 4; |
98 | |
99 for (y=0; y < x; y++) | |
6803 | 100 b1[y] = ((a1[x] * b2[x-y-1]) >> 12) + b2[y]; |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
101 |
6781 | 102 FFSWAP(int *, b1, b2); |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
103 } |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
104 |
6782 | 105 for (x=0; x < 10; x++) |
106 a2[x] >>= 4; | |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
107 } |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
108 |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
109 |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
110 /* do quarter-block output */ |
6806 | 111 static void do_output_subblock(Real144_internal *glob, unsigned short *gsp, unsigned int gval, signed short *output_buffer, GetBitContext *gb) |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
112 { |
6806 | 113 unsigned short int buffer_a[40]; |
114 unsigned short int buffer_b[40]; | |
115 unsigned short int buffer_c[40]; | |
116 unsigned short int buffer_d[40]; | |
6805
8faad14a40a5
Read the bitstream where the data is actually needed instead of doing it in unpack_input()
vitor
parents:
6804
diff
changeset
|
117 int e, f, g; |
8faad14a40a5
Read the bitstream where the data is actually needed instead of doing it in unpack_input()
vitor
parents:
6804
diff
changeset
|
118 int a = get_bits(gb, 7); |
8faad14a40a5
Read the bitstream where the data is actually needed instead of doing it in unpack_input()
vitor
parents:
6804
diff
changeset
|
119 int d = get_bits(gb, 8); |
8faad14a40a5
Read the bitstream where the data is actually needed instead of doing it in unpack_input()
vitor
parents:
6804
diff
changeset
|
120 int b = get_bits(gb, 7); |
8faad14a40a5
Read the bitstream where the data is actually needed instead of doing it in unpack_input()
vitor
parents:
6804
diff
changeset
|
121 int c = get_bits(gb, 7); |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
122 |
6805
8faad14a40a5
Read the bitstream where the data is actually needed instead of doing it in unpack_input()
vitor
parents:
6804
diff
changeset
|
123 if (a) { |
8faad14a40a5
Read the bitstream where the data is actually needed instead of doing it in unpack_input()
vitor
parents:
6804
diff
changeset
|
124 a += HALFBLOCK - 1; |
6806 | 125 rotate_block(glob->buffer_2, buffer_a, a); |
6805
8faad14a40a5
Read the bitstream where the data is actually needed instead of doing it in unpack_input()
vitor
parents:
6804
diff
changeset
|
126 } |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
127 |
6806 | 128 memcpy(buffer_b, etable1 + b * BLOCKSIZE, BLOCKSIZE * 2); |
129 e = ((ftable1[b] >> 4) * gval) >> 8; | |
130 memcpy(buffer_c, etable2 + c * BLOCKSIZE, BLOCKSIZE * 2); | |
131 f=((ftable2[c] >> 4) * gval) >> 8; | |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
132 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
133 if (a) |
6806 | 134 g = irms(buffer_a, gval) >> 12; |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
135 else |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
136 g = 0; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
137 |
6806 | 138 add_wav(glob, d, a, g, e, f, buffer_a, buffer_b, |
139 buffer_c, buffer_d); | |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
140 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
141 memmove(glob->buffer_2, glob->buffer_2 + BLOCKSIZE, (BUFFERSIZE - BLOCKSIZE) * 2); |
6806 | 142 memcpy(glob->buffer_2 + BUFFERSIZE - BLOCKSIZE, buffer_d, BLOCKSIZE * 2); |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
143 |
6806 | 144 final(glob, gsp, buffer_d, output_buffer, glob->buffer, BLOCKSIZE); |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
145 } |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
146 |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
147 /* rotate block */ |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
148 static void rotate_block(short *source, short *target, int offset) |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
149 { |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
150 short *end; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
151 short *ptr1; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
152 short *ptr2; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
153 short *ptr3; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
154 ptr2 = source + BUFFERSIZE; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
155 ptr3 = ptr1 = ptr2 - offset; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
156 end = target + BLOCKSIZE; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
157 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
158 while (target < end) { |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
159 *(target++) = *(ptr3++); |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
160 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
161 if (ptr3 == ptr2) |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
162 ptr3 = ptr1; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
163 } |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
164 } |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
165 |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
166 /* inverse root mean square */ |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
167 static int irms(short *data, int factor) |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
168 { |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
169 short *p1, *p2; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
170 unsigned int sum; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
171 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
172 p2 = (p1 = data) + BLOCKSIZE; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
173 for (sum=0; p2 > p1; p1++) |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
174 sum += (*p1) * (*p1); |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
175 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
176 if (sum == 0) |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
177 return 0; /* OOPS - division by zero */ |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
178 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
179 return (0x20000000 / (t_sqrt(sum) >> 8)) * factor; |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
180 } |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
181 |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
182 /* multiply/add wavetable */ |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
183 static void add_wav(Real144_internal *glob, int n, int f, int m1, int m2, |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
184 int m3, short *s1, short *s2, short *s3, short *dest) |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
185 { |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
186 int a, b, c; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
187 short *ptr, *ptr2; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
188 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
189 ptr = glob->wavtable1 + n * 9; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
190 ptr2 = glob->wavtable2 + n * 9; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
191 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
192 if (f != 0) |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
193 a = ((*ptr) * m1) >> ((*ptr2) + 1); |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
194 else |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
195 a = 0; |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
196 |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
197 ptr++; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
198 ptr2++; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
199 b = ((*ptr) * m2) >> ((*ptr2) + 1); |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
200 ptr++; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
201 ptr2++; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
202 c = ((*ptr) * m3) >> ((*ptr2) + 1); |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
203 ptr2 = (ptr = dest) + BLOCKSIZE; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
204 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
205 if (f != 0) |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
206 while (ptr < ptr2) |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
207 *(ptr++) = ((*(s1++)) * a + (*(s2++)) * b + (*(s3++)) * c) >> 12; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
208 else |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
209 while (ptr < ptr2) |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
210 *(ptr++) = ((*(s2++)) * b + (*(s3++)) * c) >> 12; |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
211 } |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
212 |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
213 |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
214 static void final(Real144_internal *glob, short *i1, short *i2, void *out, |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
215 int *statbuf, int len) |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
216 { |
6771 | 217 int x, sum, i; |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
218 int buffer[10]; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
219 short *ptr; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
220 short *ptr2; |
6806 | 221 unsigned short int work[50]; |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
222 |
6806 | 223 memcpy(work, statbuf,20); |
224 memcpy(work + 10, i2, len * 2); | |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
225 |
6771 | 226 for(i=0; i<10; i++) |
227 buffer[9-i] = i1[i]; | |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
228 |
6806 | 229 ptr2 = (ptr = work) + len; |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
230 |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
231 while (ptr < ptr2) { |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
232 for(sum=0, x=0; x<=9; x++) |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
233 sum += buffer[x] * (ptr[x]); |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
234 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
235 sum = sum >> 12; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
236 x = ptr[10] - sum; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
237 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
238 if (x<-32768 || x>32767) { |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
239 memset(out, 0, len * 2); |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
240 memset(statbuf, 0, 20); |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
241 return; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
242 } |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
243 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
244 ptr[10] = x; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
245 ptr++; |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
246 } |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
247 memcpy(out, ptr+10 - len, len * 2); |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
248 memcpy(statbuf, ptr, 20); |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
249 } |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
250 |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
251 static unsigned int rms(int *data, int f) |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
252 { |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
253 int *c; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
254 int x; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
255 unsigned int res; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
256 int b; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
257 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
258 c = data; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
259 b = 0; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
260 res = 0x10000; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
261 for (x=0; x<10; x++) { |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
262 res = (((0x1000000 - (*c) * (*c)) >> 12) * res) >> 12; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
263 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
264 if (res == 0) |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
265 return 0; |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
266 |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
267 if (res <= 0x3fff) { |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
268 while (res <= 0x3fff) { |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
269 b++; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
270 res <<= 2; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
271 } |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
272 } else { |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
273 if (res > 0x10000) |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
274 return 0; /* We're screwed, might as well go out with a bang. :P */ |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
275 } |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
276 c++; |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
277 } |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
278 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
279 if (res > 0) |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
280 res = t_sqrt(res); |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
281 |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
282 res >>= (b + 10); |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
283 res = (res * f) >> 10; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
284 return res; |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
285 } |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
286 |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
287 static void dec1(Real144_internal *glob, int *data, int *inp, int n, int f) |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
288 { |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
289 short *ptr,*end; |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
290 |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
291 *(glob->decptr++) = rms(data, f); |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
292 glob->decptr++; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
293 end = (ptr = glob->decsp) + (n * 10); |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
294 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
295 while (ptr < end) |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
296 *(ptr++) = *(inp++); |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
297 } |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
298 |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
299 static int eq(Real144_internal *glob, short *in, int *target) |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
300 { |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
301 int retval; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
302 int a; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
303 int b; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
304 int c; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
305 unsigned int u; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
306 short *sptr; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
307 int *ptr1, *ptr2, *ptr3; |
6781 | 308 int *bp1, *bp2; |
6806 | 309 int buffer1[10]; |
310 int buffer2[10]; | |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
311 |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
312 retval = 0; |
6806 | 313 bp1 = buffer1; |
314 bp2 = buffer2; | |
315 ptr2 = (ptr3 = buffer2) + 9; | |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
316 sptr = in; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
317 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
318 while (ptr2 >= ptr3) |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
319 *(ptr3++) = *(sptr++); |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
320 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
321 target += 9; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
322 a = bp2[9]; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
323 *target = a; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
324 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
325 if (a + 0x1000 > 0x1fff) |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
326 return 0; /* We're screwed, might as well go out with a bang. :P */ |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
327 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
328 c = 8; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
329 u = a; |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
330 |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
331 while (c >= 0) { |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
332 if (u == 0x1000) |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
333 u++; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
334 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
335 if (u == 0xfffff000) |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
336 u--; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
337 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
338 b = 0x1000-((u * u) >> 12); |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
339 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
340 if (b == 0) |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
341 b++; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
342 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
343 ptr2 = bp1; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
344 ptr1 = (ptr3 = bp2) + c; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
345 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
346 for (u=0; u<=c; u++) |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
347 *(ptr2++) = ((*(ptr3++) - (((*target) * (*(ptr1--))) >> 12)) * (0x1000000 / b)) >> 12; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
348 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
349 *(--target) = u = bp1[(c--)]; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
350 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
351 if ((u + 0x1000) > 0x1fff) |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
352 retval = 1; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
353 |
6804
24a8b213ba4d
Use correct type in FFSWAP (thanks to Benoit Fouet for pointing it out)
vitor
parents:
6803
diff
changeset
|
354 FFSWAP(int *, bp1, bp2); |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
355 } |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
356 return retval; |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
357 } |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
358 |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
359 static void dec2(Real144_internal *glob, int *data, int *inp, int n, int f, |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
360 int *inp2, int l) |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
361 { |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
362 unsigned int *ptr1,*ptr2; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
363 int work[10]; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
364 int a,b; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
365 int x; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
366 int result; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
367 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
368 if(l + 1 < NBLOCKS / 2) |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
369 a = NBLOCKS - (l + 1); |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
370 else |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
371 a = l + 1; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
372 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
373 b = NBLOCKS - a; |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
374 |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
375 if (l == 0) { |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
376 glob->decsp = glob->sptr = glob->gbuf2; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
377 glob->decptr = glob->gbuf1; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
378 } |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
379 ptr1 = inp; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
380 ptr2 = inp2; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
381 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
382 for (x=0; x<10*n; x++) |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
383 *(glob->sptr++) = (a * (*ptr1++) + b * (*ptr2++)) >> 2; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
384 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
385 result = eq(glob, glob->decsp, work); |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
386 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
387 if (result == 1) { |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
388 dec1(glob, data, inp, n, f); |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
389 } else { |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
390 *(glob->decptr++) = rms(work, f); |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
391 glob->decptr++; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
392 } |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
393 glob->decsp += n * 10; |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
394 } |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
395 |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
396 /* Uncompress one block (20 bytes -> 160*2 bytes) */ |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
397 static int ra144_decode_frame(AVCodecContext * avctx, |
1781
bbb6e7667671
cleanup ugly code (also appearently works around a bug gcc 3.4 which fails compiling it) by (mru at kth dot se (Mns Rullgrd))
michael
parents:
1415
diff
changeset
|
398 void *vdata, int *data_size, |
6277 | 399 const uint8_t * buf, int buf_size) |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
400 { |
6805
8faad14a40a5
Read the bitstream where the data is actually needed instead of doing it in unpack_input()
vitor
parents:
6804
diff
changeset
|
401 static const uint8_t sizes[10] = {6, 5, 5, 4, 4, 3, 3, 3, 3, 2}; |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
402 unsigned int a, b, c; |
6805
8faad14a40a5
Read the bitstream where the data is actually needed instead of doing it in unpack_input()
vitor
parents:
6804
diff
changeset
|
403 int i; |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
404 signed short *shptr; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
405 int16_t *datao; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
406 int16_t *data = vdata; |
6806 | 407 unsigned int val; |
408 | |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
409 Real144_internal *glob = avctx->priv_data; |
6805
8faad14a40a5
Read the bitstream where the data is actually needed instead of doing it in unpack_input()
vitor
parents:
6804
diff
changeset
|
410 GetBitContext gb; |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
411 |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
412 if(buf_size == 0) |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
413 return 0; |
2967 | 414 |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
415 datao = data; |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
416 |
6805
8faad14a40a5
Read the bitstream where the data is actually needed instead of doing it in unpack_input()
vitor
parents:
6804
diff
changeset
|
417 init_get_bits(&gb, buf, 20 * 8); |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
418 |
6805
8faad14a40a5
Read the bitstream where the data is actually needed instead of doing it in unpack_input()
vitor
parents:
6804
diff
changeset
|
419 for (i=0; i<10; i++) |
8faad14a40a5
Read the bitstream where the data is actually needed instead of doing it in unpack_input()
vitor
parents:
6804
diff
changeset
|
420 // "<< 1"? Doesn't this make one value out of two of the table useless? |
8faad14a40a5
Read the bitstream where the data is actually needed instead of doing it in unpack_input()
vitor
parents:
6804
diff
changeset
|
421 glob->swapbuf1[i] = decodetable[i][get_bits(&gb, sizes[i]) << 1]; |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
422 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
423 do_voice(glob->swapbuf1, glob->swapbuf2); |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
424 |
6806 | 425 val = decodeval[get_bits(&gb, 5) << 1]; // Useless table entries? |
426 a = t_sqrt(val*glob->oldval) >> 12; | |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
427 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
428 for (c=0; c < NBLOCKS; c++) { |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
429 if (c == (NBLOCKS - 1)) { |
6806 | 430 dec1(glob, glob->swapbuf1, glob->swapbuf2, 3, val); |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
431 } else { |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
432 if (c * 2 == (NBLOCKS - 2)) { |
6806 | 433 if (glob->oldval < val) { |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
434 dec2(glob, glob->swapbuf1, glob->swapbuf2, 3, a, glob->swapbuf2alt, c); |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
435 } else { |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
436 dec2(glob, glob->swapbuf1alt, glob->swapbuf2alt, 3, a, glob->swapbuf2, c); |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
437 } |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
438 } else { |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
439 if (c * 2 < (NBLOCKS - 2)) { |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
440 dec2(glob, glob->swapbuf1alt, glob->swapbuf2alt, 3, glob->oldval, glob->swapbuf2, c); |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
441 } else { |
6806 | 442 dec2(glob, glob->swapbuf1, glob->swapbuf2, 3, val, glob->swapbuf2alt, c); |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
443 } |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
444 } |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
445 } |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
446 } |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
447 |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
448 /* do output */ |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
449 for (b=0, c=0; c<4; c++) { |
6806 | 450 unsigned int gval = glob->gbuf1[c * 2]; |
451 unsigned short *gsp = glob->gbuf2 + b; | |
452 signed short output_buffer[40]; | |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
453 |
6806 | 454 do_output_subblock(glob, gsp, gval, output_buffer, &gb); |
455 | |
456 shptr = output_buffer; | |
457 while (shptr < output_buffer + BLOCKSIZE) | |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
458 *data++ = av_clip_int16(*(shptr++) << 2); |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
459 b += 30; |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
460 } |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
461 |
6806 | 462 glob->oldval = val; |
6781 | 463 |
464 FFSWAP(unsigned int *, glob->swapbuf1alt, glob->swapbuf1); | |
465 FFSWAP(unsigned int *, glob->swapbuf2alt, glob->swapbuf2); | |
466 | |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
467 *data_size = (data-datao)*sizeof(*data); |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
468 return 20; |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
469 } |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
470 |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
471 |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
472 AVCodec ra_144_decoder = |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
473 { |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
474 "real_144", |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
475 CODEC_TYPE_AUDIO, |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
476 CODEC_ID_RA_144, |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
477 sizeof(Real144_internal), |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
478 ra144_decode_init, |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
479 NULL, |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
480 NULL, |
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
481 ra144_decode_frame, |
6712 | 482 .long_name = "RealAudio 1.0 (14.4K)", |
1304
e8543aab0cc9
RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from a mplayerhq (originally from public domain player for Amiga
nickols_k
parents:
diff
changeset
|
483 }; |