Mercurial > libavcodec.hg
annotate ra144.c @ 6907:8b0db8b07a21 libavcodec
cosmetics: typo fixes
| author | diego |
|---|---|
| date | Tue, 27 May 2008 10:51:23 +0000 |
| parents | b6e110c575ff |
| children | 73e24dad276b |
| 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 { |
| 6898 | 34 unsigned int old_energy; |
|
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
|
35 |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
36 /* the swapped buffers */ |
| 6897 | 37 unsigned int lpc_tables[4][10]; |
| 38 unsigned int *lpc_refl; //< LPC reflection coefficients | |
| 39 unsigned int *lpc_coef; //< LPC coefficients | |
| 40 unsigned int *lpc_refl_old; //< previous frame LPC reflection coefs | |
| 41 unsigned int *lpc_coef_old; //< previous frame LPC coefficients | |
|
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
|
42 |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
43 unsigned int buffer[5]; |
| 6907 | 44 uint16_t adapt_cb[148]; //< adaptive codebook |
|
6894
eb3c16b99f27
Rename context struct to be more consistent with the rest of ffmpeg
vitor
parents:
6888
diff
changeset
|
45 } RA144Context; |
|
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 |
|
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
|
47 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
|
48 { |
|
6895
c63e9357e2a8
Context vars are not global vars. glob is a bad name for it.
vitor
parents:
6894
diff
changeset
|
49 RA144Context *ractx = 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
|
50 |
| 6897 | 51 ractx->lpc_refl = ractx->lpc_tables[0]; |
| 52 ractx->lpc_coef = ractx->lpc_tables[1]; | |
| 53 ractx->lpc_refl_old = ractx->lpc_tables[2]; | |
| 54 ractx->lpc_coef_old = ractx->lpc_tables[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
|
55 |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
56 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
|
57 } |
|
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
|
58 |
| 6899 | 59 /** |
| 6902 | 60 * Evaluate sqrt(x << 24). x must fit in 20 bits. This value is evaluated in an |
| 6899 | 61 * odd way to make the output identical to the binary decoder. |
| 62 */ | |
|
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
|
63 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
|
64 { |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
65 int s = 0; |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
66 while (x > 0xfff) { |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
67 s++; |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
68 x = x >> 2; |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
69 } |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
70 |
| 6833 | 71 return (ff_sqrt(x << 20) << 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
|
72 } |
|
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 |
|
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 /* do 'voice' */ |
| 6808 | 75 static void do_voice(const int *a1, int *a2) |
|
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 { |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
77 int buffer[10]; |
| 6782 | 78 int *b1 = buffer; |
| 79 int *b2 = a2; | |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
80 int x, y; |
| 2967 | 81 |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
82 for (x=0; x < 10; x++) { |
| 6782 | 83 b1[x] = a1[x] << 4; |
| 84 | |
| 85 for (y=0; y < x; y++) | |
| 6803 | 86 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
|
87 |
| 6781 | 88 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
|
89 } |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
90 |
| 6782 | 91 for (x=0; x < 10; x++) |
| 92 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
|
93 } |
|
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
|
94 |
|
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
|
95 /* rotate block */ |
| 6887 | 96 static void rotate_block(const int16_t *source, int16_t *target, int offset) |
|
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
|
97 { |
| 6810 | 98 int i=0, k=0; |
| 6831 | 99 source += BUFFERSIZE - offset; |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
100 |
| 6810 | 101 while (i<BLOCKSIZE) { |
| 6831 | 102 target[i++] = source[k++]; |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
103 |
| 6810 | 104 if (k == offset) |
| 105 k = 0; | |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
106 } |
|
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 /* inverse root mean square */ |
| 6887 | 110 static int irms(const int16_t *data, int 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
|
111 { |
| 6838 | 112 unsigned int i, sum = 0; |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
113 |
| 6838 | 114 for (i=0; i < BLOCKSIZE; i++) |
| 115 sum += data[i] * data[i]; | |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
116 |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
117 if (sum == 0) |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
118 return 0; /* OOPS - division by zero */ |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
119 |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
120 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
|
121 } |
|
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
|
122 |
|
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
|
123 /* multiply/add wavetable */ |
| 6887 | 124 static void add_wav(int n, int skip_first, int *m, const int16_t *s1, |
| 125 const int8_t *s2, const int8_t *s3, int16_t *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
|
126 { |
|
6873
c3a92478875d
Make add_wav() receive a vector instead of three integers
vitor
parents:
6870
diff
changeset
|
127 int i; |
|
c3a92478875d
Make add_wav() receive a vector instead of three integers
vitor
parents:
6870
diff
changeset
|
128 int v[3]; |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
129 |
|
6873
c3a92478875d
Make add_wav() receive a vector instead of three integers
vitor
parents:
6870
diff
changeset
|
130 v[0] = 0; |
| 6880 | 131 for (i=!skip_first; i<3; i++) |
|
6873
c3a92478875d
Make add_wav() receive a vector instead of three integers
vitor
parents:
6870
diff
changeset
|
132 v[i] = (wavtable1[n][i] * m[i]) >> (wavtable2[n][i] + 1); |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
133 |
| 6839 | 134 for (i=0; i < BLOCKSIZE; i++) |
|
6873
c3a92478875d
Make add_wav() receive a vector instead of three integers
vitor
parents:
6870
diff
changeset
|
135 dest[i] = ((*(s1++))*v[0] + (*(s2++))*v[1] + (*(s3++))*v[2]) >> 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
|
136 } |
|
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
|
137 |
|
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
|
138 |
| 6887 | 139 static void final(const int16_t *i1, const int16_t *i2, |
| 6808 | 140 void *out, 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
|
141 { |
| 6851 | 142 int x, i; |
| 6887 | 143 uint16_t work[50]; |
| 144 int16_t *ptr = work; | |
|
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 |
| 6806 | 146 memcpy(work, statbuf,20); |
| 147 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
|
148 |
| 6851 | 149 for (i=0; i<len; i++) { |
| 150 int sum = 0; | |
| 6855 | 151 int new_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
|
152 |
| 6851 | 153 for(x=0; x<10; x++) |
| 154 sum += i1[9-x] * ptr[x]; | |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
155 |
| 6851 | 156 sum >>= 12; |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
157 |
| 6855 | 158 new_val = ptr[10] - sum; |
| 159 | |
| 160 if (new_val < -32768 || new_val > 32767) { | |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
161 memset(out, 0, len * 2); |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
162 memset(statbuf, 0, 20); |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
163 return; |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
164 } |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
165 |
| 6855 | 166 ptr[10] = new_val; |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
167 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
|
168 } |
| 6851 | 169 |
| 170 memcpy(out, work+10, len * 2); | |
| 171 memcpy(statbuf, work + 40, 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
|
172 } |
|
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
|
173 |
| 6808 | 174 static unsigned int rms(const int *data, int f) |
|
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
|
175 { |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
176 int x; |
| 6850 | 177 unsigned int res = 0x10000; |
| 178 int b = 0; | |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
179 |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
180 for (x=0; x<10; x++) { |
| 6850 | 181 res = (((0x1000000 - (*data) * (*data)) >> 12) * res) >> 12; |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
182 |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
183 if (res == 0) |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
184 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
|
185 |
| 6858 | 186 if (res > 0x10000) |
| 187 return 0; /* We're screwed, might as well go out with a bang. :P */ | |
| 6850 | 188 |
| 189 while (res <= 0x3fff) { | |
| 190 b++; | |
| 191 res <<= 2; | |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
192 } |
| 6850 | 193 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
|
194 } |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
195 |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
196 if (res > 0) |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
197 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
|
198 |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
199 res >>= (b + 10); |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
200 res = (res * f) >> 10; |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
201 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
|
202 } |
|
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
|
203 |
|
6832
9584a95fefcd
Cosmetics: move function to remove forward declarations
vitor
parents:
6831
diff
changeset
|
204 /* do quarter-block output */ |
|
6895
c63e9357e2a8
Context vars are not global vars. glob is a bad name for it.
vitor
parents:
6894
diff
changeset
|
205 static void do_output_subblock(RA144Context *ractx, |
| 6887 | 206 const uint16_t *gsp, unsigned int gval, |
| 207 int16_t *output_buffer, GetBitContext *gb) | |
|
6832
9584a95fefcd
Cosmetics: move function to remove forward declarations
vitor
parents:
6831
diff
changeset
|
208 { |
| 6887 | 209 uint16_t buffer_a[40]; |
| 210 uint16_t *block; | |
| 6907 | 211 int cba_idx = get_bits(gb, 7); // index of the adaptive CB, 0 if none |
| 6900 | 212 int gain = get_bits(gb, 8); |
| 213 int cb1_idx = get_bits(gb, 7); | |
| 214 int cb2_idx = get_bits(gb, 7); | |
|
6873
c3a92478875d
Make add_wav() receive a vector instead of three integers
vitor
parents:
6870
diff
changeset
|
215 int m[3]; |
|
6832
9584a95fefcd
Cosmetics: move function to remove forward declarations
vitor
parents:
6831
diff
changeset
|
216 |
| 6900 | 217 if (cba_idx) { |
| 218 cba_idx += HALFBLOCK - 1; | |
| 219 rotate_block(ractx->adapt_cb, buffer_a, cba_idx); | |
| 6888 | 220 m[0] = irms(buffer_a, gval) >> 12; |
| 221 } else { | |
| 222 m[0] = 0; | |
|
6832
9584a95fefcd
Cosmetics: move function to remove forward declarations
vitor
parents:
6831
diff
changeset
|
223 } |
|
9584a95fefcd
Cosmetics: move function to remove forward declarations
vitor
parents:
6831
diff
changeset
|
224 |
| 6900 | 225 m[1] = ((ftable1[cb1_idx] >> 4) * gval) >> 8; |
| 226 m[2] = ((ftable2[cb2_idx] >> 4) * gval) >> 8; | |
|
6832
9584a95fefcd
Cosmetics: move function to remove forward declarations
vitor
parents:
6831
diff
changeset
|
227 |
| 6896 | 228 memmove(ractx->adapt_cb, ractx->adapt_cb + BLOCKSIZE, |
| 6882 | 229 (BUFFERSIZE - BLOCKSIZE) * 2); |
| 230 | |
| 6896 | 231 block = ractx->adapt_cb + BUFFERSIZE - BLOCKSIZE; |
|
6832
9584a95fefcd
Cosmetics: move function to remove forward declarations
vitor
parents:
6831
diff
changeset
|
232 |
| 6900 | 233 add_wav(gain, cba_idx, m, buffer_a, etable1[cb1_idx], etable2[cb2_idx], |
| 234 block); | |
|
6832
9584a95fefcd
Cosmetics: move function to remove forward declarations
vitor
parents:
6831
diff
changeset
|
235 |
|
6895
c63e9357e2a8
Context vars are not global vars. glob is a bad name for it.
vitor
parents:
6894
diff
changeset
|
236 final(gsp, block, output_buffer, ractx->buffer, BLOCKSIZE); |
|
6832
9584a95fefcd
Cosmetics: move function to remove forward declarations
vitor
parents:
6831
diff
changeset
|
237 } |
|
9584a95fefcd
Cosmetics: move function to remove forward declarations
vitor
parents:
6831
diff
changeset
|
238 |
| 6887 | 239 static int dec1(int16_t *decsp, const int *data, const int *inp, int f) |
|
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
|
240 { |
| 6879 | 241 int i; |
|
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
|
242 |
| 6879 | 243 for (i=0; i<30; i++) |
| 244 *(decsp++) = *(inp++); | |
| 6863 | 245 |
| 246 return rms(data, f); | |
|
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
|
247 } |
|
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
|
248 |
| 6887 | 249 static int eq(const int16_t *in, int *target) |
|
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
|
250 { |
| 6852 | 251 int retval = 0; |
| 252 int b, c, i; | |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
253 unsigned int u; |
| 6806 | 254 int buffer1[10]; |
| 255 int buffer2[10]; | |
| 6852 | 256 int *bp1 = buffer1; |
| 257 int *bp2 = buffer2; | |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
258 |
| 6852 | 259 for (i=0; i < 10; i++) |
| 260 buffer2[i] = in[i]; | |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
261 |
| 6852 | 262 u = target[9] = bp2[9]; |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
263 |
| 6852 | 264 if (u + 0x1000 > 0x1fff) |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
265 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
|
266 |
| 6852 | 267 for (c=8; c >= 0; c--) { |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
268 if (u == 0x1000) |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
269 u++; |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
270 |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
271 if (u == 0xfffff000) |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
272 u--; |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
273 |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
274 b = 0x1000-((u * u) >> 12); |
|
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 if (b == 0) |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
277 b++; |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
278 |
| 6852 | 279 for (u=0; u<=c; u++) |
| 280 bp1[u] = ((bp2[u] - ((target[c+1] * bp2[c-u]) >> 12)) * (0x1000000 / b)) >> 12; | |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
281 |
| 6852 | 282 target[c] = u = bp1[c]; |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
283 |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
284 if ((u + 0x1000) > 0x1fff) |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
285 retval = 1; |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
286 |
|
6804
24a8b213ba4d
Use correct type in FFSWAP (thanks to Benoit Fouet for pointing it out)
vitor
parents:
6803
diff
changeset
|
287 FFSWAP(int *, bp1, bp2); |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
288 } |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
289 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
|
290 } |
|
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
|
291 |
| 6887 | 292 static int dec2(int16_t *decsp, const int *data, const int *inp, |
|
6874
5b50e6adf804
Move evaluation of variable a to where it is trivial
vitor
parents:
6873
diff
changeset
|
293 int f, const int *inp2, int 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
|
294 { |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
295 int work[10]; |
| 6876 | 296 int b = NBLOCKS - a; |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
297 int x; |
|
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
298 |
|
6862
456d2979f5a1
Parameter n of dec functions is always 3. Hardcode it.
vitor
parents:
6858
diff
changeset
|
299 for (x=0; x<30; x++) |
| 6878 | 300 decsp[x] = (a * inp[x] + b * inp2[x]) >> 2; |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
301 |
| 6877 | 302 if (eq(decsp, work)) |
| 6870 | 303 return dec1(decsp, data, inp, f); |
| 6875 | 304 else |
| 6863 | 305 return rms(work, f); |
|
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
|
306 } |
|
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
|
307 |
|
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
|
308 /* 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
|
309 static int ra144_decode_frame(AVCodecContext * avctx, |
| 6882 | 310 void *vdata, int *data_size, |
| 311 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
|
312 { |
|
6805
8faad14a40a5
Read the bitstream where the data is actually needed instead of doing it in unpack_input()
vitor
parents:
6804
diff
changeset
|
313 static const uint8_t sizes[10] = {6, 5, 5, 4, 4, 3, 3, 3, 3, 2}; |
| 6863 | 314 unsigned int gbuf1[4]; |
| 6887 | 315 uint16_t gbuf2[4][30]; |
| 6842 | 316 unsigned int a, c; |
|
6805
8faad14a40a5
Read the bitstream where the data is actually needed instead of doing it in unpack_input()
vitor
parents:
6804
diff
changeset
|
317 int i; |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
318 int16_t *data = vdata; |
| 6898 | 319 unsigned int energy; |
| 6806 | 320 |
|
6895
c63e9357e2a8
Context vars are not global vars. glob is a bad name for it.
vitor
parents:
6894
diff
changeset
|
321 RA144Context *ractx = 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
|
322 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
|
323 |
| 6854 | 324 if(buf_size < 20) { |
| 325 av_log(avctx, AV_LOG_ERROR, | |
| 326 "Frame too small (%d bytes). Truncated file?\n", buf_size); | |
| 327 return buf_size; | |
| 328 } | |
|
6805
8faad14a40a5
Read the bitstream where the data is actually needed instead of doing it in unpack_input()
vitor
parents:
6804
diff
changeset
|
329 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
|
330 |
|
6805
8faad14a40a5
Read the bitstream where the data is actually needed instead of doing it in unpack_input()
vitor
parents:
6804
diff
changeset
|
331 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
|
332 // "<< 1"? Doesn't this make one value out of two of the table useless? |
| 6897 | 333 ractx->lpc_refl[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
|
334 |
| 6897 | 335 do_voice(ractx->lpc_refl, ractx->lpc_coef); |
|
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
|
336 |
| 6898 | 337 energy = decodeval[get_bits(&gb, 5) << 1]; // Useless table entries? |
| 338 a = t_sqrt(energy*ractx->old_energy) >> 12; | |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
339 |
| 6898 | 340 gbuf1[0] = dec2(gbuf2[0], ractx->lpc_refl_old, ractx->lpc_coef_old, ractx->old_energy, ractx->lpc_coef, 3); |
| 341 if (ractx->old_energy < energy) { | |
| 6897 | 342 gbuf1[1] = dec2(gbuf2[1], ractx->lpc_refl, ractx->lpc_coef, a, ractx->lpc_coef_old, 2); |
|
6834
bf3bc36715e6
Simplify ra144_decode_frame() by unrolling a senseless
vitor
parents:
6833
diff
changeset
|
343 } else { |
| 6897 | 344 gbuf1[1] = dec2(gbuf2[1], ractx->lpc_refl_old, ractx->lpc_coef_old, a, ractx->lpc_coef, 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
|
345 } |
| 6898 | 346 gbuf1[2] = dec2(gbuf2[2], ractx->lpc_refl, ractx->lpc_coef, energy, ractx->lpc_coef_old, 3); |
| 347 gbuf1[3] = dec1(gbuf2[3], ractx->lpc_refl, ractx->lpc_coef, energy); | |
|
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
|
348 |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
349 /* do output */ |
| 6842 | 350 for (c=0; c<4; c++) { |
|
6895
c63e9357e2a8
Context vars are not global vars. glob is a bad name for it.
vitor
parents:
6894
diff
changeset
|
351 do_output_subblock(ractx, gbuf2[c], gbuf1[c], data, &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
|
352 |
| 6849 | 353 for (i=0; i<BLOCKSIZE; i++) { |
| 354 *data = av_clip_int16(*data << 2); | |
| 355 data++; | |
| 356 } | |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
357 } |
|
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
|
358 |
| 6898 | 359 ractx->old_energy = energy; |
| 6781 | 360 |
| 6897 | 361 FFSWAP(unsigned int *, ractx->lpc_refl_old, ractx->lpc_refl); |
| 362 FFSWAP(unsigned int *, ractx->lpc_coef_old, ractx->lpc_coef); | |
| 6781 | 363 |
| 6828 | 364 *data_size = 2*160; |
|
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
365 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
|
366 } |
|
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
|
367 |
|
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
|
368 |
|
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
|
369 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
|
370 { |
|
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
|
371 "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
|
372 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
|
373 CODEC_ID_RA_144, |
|
6894
eb3c16b99f27
Rename context struct to be more consistent with the rest of ffmpeg
vitor
parents:
6888
diff
changeset
|
374 sizeof(RA144Context), |
|
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
|
375 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
|
376 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
|
377 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
|
378 ra144_decode_frame, |
| 6712 | 379 .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
|
380 }; |
