Mercurial > libavcodec.hg
annotate ra144.c @ 10381:9262948fd649 libavcodec
Hack: set the coded frame PTS to the incoming PTS.
This is not correct, but libtheora does not seem to provide a way
to get the correct value, and this is necessary to make encoding
produce sensible time stamps when encoded content is variable
FPS or the time base is simply different from FPS.
Somewhat fixes issue 1197.
author | reimar |
---|---|
date | Sat, 10 Oct 2009 14:43:31 +0000 |
parents | 0dce4fe6e6f3 |
children | 816067b00019 |
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) |
7163 | 3 * |
4 * Copyright (c) 2008 Vitor Sessak | |
5 * Copyright (c) 2003 Nick Kurshev | |
6 * Based on public domain decoder at http://www.honeypot.net/audio | |
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
|
7 * |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3036
diff
changeset
|
8 * This file is part of FFmpeg. |
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3036
diff
changeset
|
9 * |
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3036
diff
changeset
|
10 * 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
|
11 * 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
|
12 * 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
|
13 * 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
|
14 * |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3036
diff
changeset
|
15 * 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
|
16 * 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
|
17 * 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
|
18 * 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
|
19 * |
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 * 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
|
21 * 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
|
22 * 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
|
23 */ |
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
|
24 |
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 #include "avcodec.h" |
9428 | 26 #include "get_bits.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
|
27 #include "ra144.h" |
8049
611a21e4b01b
Split off celp_filters.[ch] from acelp_filters.[ch] for the QCELP decoder.
diego
parents:
7847
diff
changeset
|
28 #include "celp_filters.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
|
29 |
7107 | 30 #define NBLOCKS 4 ///< number of subblocks within a block |
31 #define BLOCKSIZE 40 ///< subblock size in 16-bit words | |
32 #define BUFFERSIZE 146 ///< the size of the adaptive codebook | |
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
|
33 |
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
|
34 |
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 typedef struct { |
6910 | 36 unsigned int old_energy; ///< previous frame 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
|
37 |
7005 | 38 unsigned int lpc_tables[2][10]; |
7128
614bc53e67a8
Use lpc_coef[2] instead of lpc_coef and lpc_coef_old
vitor
parents:
7127
diff
changeset
|
39 |
614bc53e67a8
Use lpc_coef[2] instead of lpc_coef and lpc_coef_old
vitor
parents:
7127
diff
changeset
|
40 /** LPC coefficients: lpc_coef[0] is the coefficients of the current frame |
7847 | 41 * and lpc_coef[1] of the previous one. */ |
7128
614bc53e67a8
Use lpc_coef[2] instead of lpc_coef and lpc_coef_old
vitor
parents:
7127
diff
changeset
|
42 unsigned int *lpc_coef[2]; |
614bc53e67a8
Use lpc_coef[2] instead of lpc_coef and lpc_coef_old
vitor
parents:
7127
diff
changeset
|
43 |
614bc53e67a8
Use lpc_coef[2] instead of lpc_coef and lpc_coef_old
vitor
parents:
7127
diff
changeset
|
44 unsigned int lpc_refl_rms[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
|
45 |
7847 | 46 /** The current subblock padded by the last 10 values of the previous one. */ |
7096
1ad555e54621
Avoid a memcpy. Code is also simpler now in my opinion.
vitor
parents:
7085
diff
changeset
|
47 int16_t curr_sblock[50]; |
1ad555e54621
Avoid a memcpy. Code is also simpler now in my opinion.
vitor
parents:
7085
diff
changeset
|
48 |
7847 | 49 /** Adaptive codebook, its size is two units bigger to avoid a |
50 * buffer overflow. */ | |
7827
82fc486cd128
Cosmetics: Make the two additional units in size more clear
vitor
parents:
7801
diff
changeset
|
51 uint16_t adapt_cb[146+2]; |
6894
eb3c16b99f27
Rename context struct to be more consistent with the rest of ffmpeg
vitor
parents:
6888
diff
changeset
|
52 } 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
|
53 |
7828 | 54 static av_cold int ra144_decode_init(AVCodecContext * avctx) |
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 { |
6895
c63e9357e2a8
Context vars are not global vars. glob is a bad name for it.
vitor
parents:
6894
diff
changeset
|
56 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
|
57 |
7128
614bc53e67a8
Use lpc_coef[2] instead of lpc_coef and lpc_coef_old
vitor
parents:
7127
diff
changeset
|
58 ractx->lpc_coef[0] = ractx->lpc_tables[0]; |
614bc53e67a8
Use lpc_coef[2] instead of lpc_coef and lpc_coef_old
vitor
parents:
7127
diff
changeset
|
59 ractx->lpc_coef[1] = ractx->lpc_tables[1]; |
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
|
60 |
7451
85ab7655ad4d
Modify all codecs to report their supported input and output sample format(s).
pross
parents:
7447
diff
changeset
|
61 avctx->sample_fmt = SAMPLE_FMT_S16; |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
62 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
|
63 } |
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 |
6899 | 65 /** |
6902 | 66 * Evaluate sqrt(x << 24). x must fit in 20 bits. This value is evaluated in an |
6899 | 67 * odd way to make the output identical to the binary decoder. |
68 */ | |
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 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
|
70 { |
7104 | 71 int s = 2; |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
72 while (x > 0xfff) { |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
73 s++; |
7507 | 74 x >>= 2; |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
75 } |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
76 |
7104 | 77 return ff_sqrt(x << 20) << s; |
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
|
78 } |
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
|
79 |
6952 | 80 /** |
81 * Evaluate the LPC filter coefficients from the reflection coefficients. | |
6965 | 82 * Does the inverse of the eval_refl() function. |
6952 | 83 */ |
7120
c98b43981d89
Consistency: make the output buffer the first argument of functions
vitor
parents:
7119
diff
changeset
|
84 static void eval_coefs(int *coefs, const int *refl) |
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
|
85 { |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
86 int buffer[10]; |
6782 | 87 int *b1 = buffer; |
6964 | 88 int *b2 = coefs; |
7447 | 89 int i, j; |
2967 | 90 |
7447 | 91 for (i=0; i < 10; i++) { |
92 b1[i] = refl[i] << 4; | |
6782 | 93 |
7447 | 94 for (j=0; j < i; j++) |
95 b1[j] = ((refl[i] * b2[i-j-1]) >> 12) + b2[j]; | |
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
|
96 |
6781 | 97 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
|
98 } |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
99 |
7447 | 100 for (i=0; i < 10; i++) |
101 coefs[i] >>= 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
|
102 } |
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 |
7105
b55bedad89ad
Rename rotate_buffer() to copy_and_dup() and doxy it
vitor
parents:
7104
diff
changeset
|
104 /** |
b55bedad89ad
Rename rotate_buffer() to copy_and_dup() and doxy it
vitor
parents:
7104
diff
changeset
|
105 * Copy the last offset values of *source to *target. If those values are not |
b55bedad89ad
Rename rotate_buffer() to copy_and_dup() and doxy it
vitor
parents:
7104
diff
changeset
|
106 * enough to fill the target buffer, fill it with another copy of those values. |
b55bedad89ad
Rename rotate_buffer() to copy_and_dup() and doxy it
vitor
parents:
7104
diff
changeset
|
107 */ |
7120
c98b43981d89
Consistency: make the output buffer the first argument of functions
vitor
parents:
7119
diff
changeset
|
108 static void copy_and_dup(int16_t *target, const int16_t *source, 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
|
109 { |
6831 | 110 source += BUFFERSIZE - offset; |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
111 |
7829 | 112 memcpy(target, source, FFMIN(BLOCKSIZE, offset)*sizeof(*target)); |
113 if (offset < BLOCKSIZE) | |
7100 | 114 memcpy(target + offset, source, (BLOCKSIZE - offset)*sizeof(*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
|
115 } |
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
|
116 |
7110 | 117 /** inverse root mean square */ |
7112 | 118 static int irms(const int16_t *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
|
119 { |
6838 | 120 unsigned int i, sum = 0; |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
121 |
6838 | 122 for (i=0; i < BLOCKSIZE; i++) |
123 sum += data[i] * data[i]; | |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
124 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
125 if (sum == 0) |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
126 return 0; /* OOPS - division by zero */ |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
127 |
7112 | 128 return 0x20000000 / (t_sqrt(sum) >> 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
|
129 } |
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
|
130 |
7120
c98b43981d89
Consistency: make the output buffer the first argument of functions
vitor
parents:
7119
diff
changeset
|
131 static void add_wav(int16_t *dest, int n, int skip_first, int *m, |
c98b43981d89
Consistency: make the output buffer the first argument of functions
vitor
parents:
7119
diff
changeset
|
132 const int16_t *s1, const int8_t *s2, const int8_t *s3) |
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
|
133 { |
6873
c3a92478875d
Make add_wav() receive a vector instead of three integers
vitor
parents:
6870
diff
changeset
|
134 int i; |
c3a92478875d
Make add_wav() receive a vector instead of three integers
vitor
parents:
6870
diff
changeset
|
135 int v[3]; |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
136 |
6873
c3a92478875d
Make add_wav() receive a vector instead of three integers
vitor
parents:
6870
diff
changeset
|
137 v[0] = 0; |
6880 | 138 for (i=!skip_first; i<3; i++) |
7834
b9a26c7e64ef
Normalize triplets in gain_val_tab[][] so gain_exp_tab[] can be just an
vitor
parents:
7830
diff
changeset
|
139 v[i] = (gain_val_tab[n][i] * m[i]) >> gain_exp_tab[n]; |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
140 |
9077
ad7fd7a40717
Do not read uninitialized buffer, no matter if it will be multiplied by
vitor
parents:
8049
diff
changeset
|
141 if (v[0]) { |
9078 | 142 for (i=0; i < BLOCKSIZE; i++) |
143 dest[i] = (s1[i]*v[0] + s2[i]*v[1] + s3[i]*v[2]) >> 12; | |
9077
ad7fd7a40717
Do not read uninitialized buffer, no matter if it will be multiplied by
vitor
parents:
8049
diff
changeset
|
144 } else { |
ad7fd7a40717
Do not read uninitialized buffer, no matter if it will be multiplied by
vitor
parents:
8049
diff
changeset
|
145 for (i=0; i < BLOCKSIZE; i++) |
9078 | 146 dest[i] = ( s2[i]*v[1] + s3[i]*v[2]) >> 12; |
9077
ad7fd7a40717
Do not read uninitialized buffer, no matter if it will be multiplied by
vitor
parents:
8049
diff
changeset
|
147 } |
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 } |
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 |
7113 | 150 static unsigned int rescale_rms(unsigned int rms, unsigned int energy) |
7004
5bad976fae7b
Split function rms() in two (it does two unrelated things)
vitor
parents:
6991
diff
changeset
|
151 { |
5bad976fae7b
Split function rms() in two (it does two unrelated things)
vitor
parents:
6991
diff
changeset
|
152 return (rms * energy) >> 10; |
5bad976fae7b
Split function rms() in two (it does two unrelated things)
vitor
parents:
6991
diff
changeset
|
153 } |
5bad976fae7b
Split function rms() in two (it does two unrelated things)
vitor
parents:
6991
diff
changeset
|
154 |
5bad976fae7b
Split function rms() in two (it does two unrelated things)
vitor
parents:
6991
diff
changeset
|
155 static unsigned int rms(const int *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
|
156 { |
7447 | 157 int i; |
6850 | 158 unsigned int res = 0x10000; |
7508
f516e1101167
Simplify rms(): merge a few operations in the same statement
vitor
parents:
7507
diff
changeset
|
159 int b = 10; |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
160 |
7447 | 161 for (i=0; i < 10; i++) { |
162 res = (((0x1000000 - data[i]*data[i]) >> 12) * res) >> 12; | |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
163 |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
164 if (res == 0) |
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
165 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
|
166 |
6850 | 167 while (res <= 0x3fff) { |
168 b++; | |
169 res <<= 2; | |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
170 } |
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
|
171 } |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
172 |
7508
f516e1101167
Simplify rms(): merge a few operations in the same statement
vitor
parents:
7507
diff
changeset
|
173 return t_sqrt(res) >> b; |
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
|
174 } |
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 |
7133 | 176 static void do_output_subblock(RA144Context *ractx, const uint16_t *lpc_coefs, |
177 int gval, GetBitContext *gb) | |
6832
9584a95fefcd
Cosmetics: move function to remove forward declarations
vitor
parents:
6831
diff
changeset
|
178 { |
6887 | 179 uint16_t buffer_a[40]; |
180 uint16_t *block; | |
6907 | 181 int cba_idx = get_bits(gb, 7); // index of the adaptive CB, 0 if none |
6900 | 182 int gain = get_bits(gb, 8); |
183 int cb1_idx = get_bits(gb, 7); | |
184 int cb2_idx = get_bits(gb, 7); | |
6873
c3a92478875d
Make add_wav() receive a vector instead of three integers
vitor
parents:
6870
diff
changeset
|
185 int m[3]; |
6832
9584a95fefcd
Cosmetics: move function to remove forward declarations
vitor
parents:
6831
diff
changeset
|
186 |
6900 | 187 if (cba_idx) { |
7106 | 188 cba_idx += BLOCKSIZE/2 - 1; |
7120
c98b43981d89
Consistency: make the output buffer the first argument of functions
vitor
parents:
7119
diff
changeset
|
189 copy_and_dup(buffer_a, ractx->adapt_cb, cba_idx); |
7112 | 190 m[0] = (irms(buffer_a) * gval) >> 12; |
6888 | 191 } else { |
192 m[0] = 0; | |
6832
9584a95fefcd
Cosmetics: move function to remove forward declarations
vitor
parents:
6831
diff
changeset
|
193 } |
9584a95fefcd
Cosmetics: move function to remove forward declarations
vitor
parents:
6831
diff
changeset
|
194 |
7121 | 195 m[1] = (cb1_base[cb1_idx] * gval) >> 8; |
196 m[2] = (cb2_base[cb2_idx] * gval) >> 8; | |
6832
9584a95fefcd
Cosmetics: move function to remove forward declarations
vitor
parents:
6831
diff
changeset
|
197 |
6896 | 198 memmove(ractx->adapt_cb, ractx->adapt_cb + BLOCKSIZE, |
7119 | 199 (BUFFERSIZE - BLOCKSIZE) * sizeof(*ractx->adapt_cb)); |
6882 | 200 |
6896 | 201 block = ractx->adapt_cb + BUFFERSIZE - BLOCKSIZE; |
6832
9584a95fefcd
Cosmetics: move function to remove forward declarations
vitor
parents:
6831
diff
changeset
|
202 |
9081 | 203 add_wav(block, gain, cba_idx, m, cba_idx? buffer_a: NULL, |
7120
c98b43981d89
Consistency: make the output buffer the first argument of functions
vitor
parents:
7119
diff
changeset
|
204 cb1_vects[cb1_idx], cb2_vects[cb2_idx]); |
6832
9584a95fefcd
Cosmetics: move function to remove forward declarations
vitor
parents:
6831
diff
changeset
|
205 |
7101
6ee204e8d9ae
Move code unrelated to lpc filtering out of lpc_filter()
vitor
parents:
7100
diff
changeset
|
206 memcpy(ractx->curr_sblock, ractx->curr_sblock + 40, |
6ee204e8d9ae
Move code unrelated to lpc filtering out of lpc_filter()
vitor
parents:
7100
diff
changeset
|
207 10*sizeof(*ractx->curr_sblock)); |
6ee204e8d9ae
Move code unrelated to lpc filtering out of lpc_filter()
vitor
parents:
7100
diff
changeset
|
208 |
8049
611a21e4b01b
Split off celp_filters.[ch] from acelp_filters.[ch] for the QCELP decoder.
diego
parents:
7847
diff
changeset
|
209 if (ff_celp_lp_synthesis_filter(ractx->curr_sblock + 10, lpc_coefs, |
611a21e4b01b
Split off celp_filters.[ch] from acelp_filters.[ch] for the QCELP decoder.
diego
parents:
7847
diff
changeset
|
210 block, BLOCKSIZE, 10, 1, 0xfff)) |
7162
ad0d9713e953
Use ff_acelp_lp_synthesis_filter() instead of duplicating it
vitor
parents:
7159
diff
changeset
|
211 memset(ractx->curr_sblock, 0, 50*sizeof(*ractx->curr_sblock)); |
6832
9584a95fefcd
Cosmetics: move function to remove forward declarations
vitor
parents:
6831
diff
changeset
|
212 } |
9584a95fefcd
Cosmetics: move function to remove forward declarations
vitor
parents:
6831
diff
changeset
|
213 |
7077 | 214 static void int_to_int16(int16_t *out, const int *inp) |
6934 | 215 { |
216 int i; | |
217 | |
7447 | 218 for (i=0; i < 30; i++) |
7800 | 219 *out++ = *inp++; |
6934 | 220 } |
221 | |
6952 | 222 /** |
223 * Evaluate the reflection coefficients from the filter coefficients. | |
6965 | 224 * Does the inverse of the eval_coefs() function. |
6952 | 225 * |
7847 | 226 * @return 1 if one of the reflection coefficients is greater than |
6952 | 227 * 4095, 0 if not. |
228 */ | |
7120
c98b43981d89
Consistency: make the output buffer the first argument of functions
vitor
parents:
7119
diff
changeset
|
229 static int eval_refl(int *refl, const int16_t *coefs, RA144Context *ractx) |
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 { |
7516 | 231 int b, i, j; |
6806 | 232 int buffer1[10]; |
233 int buffer2[10]; | |
6852 | 234 int *bp1 = buffer1; |
235 int *bp2 = buffer2; | |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
236 |
6852 | 237 for (i=0; i < 10; i++) |
6964 | 238 buffer2[i] = coefs[i]; |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
239 |
7515
1d5800cec7ad
Simplify eval_refl(): do not store a buffer value in a var when the buffer could be used directly
vitor
parents:
7514
diff
changeset
|
240 refl[9] = bp2[9]; |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
241 |
7515
1d5800cec7ad
Simplify eval_refl(): do not store a buffer value in a var when the buffer could be used directly
vitor
parents:
7514
diff
changeset
|
242 if ((unsigned) bp2[9] + 0x1000 > 0x1fff) { |
6973 | 243 av_log(ractx, AV_LOG_ERROR, "Overflow. Broken sample?\n"); |
7116
e51975f18cb6
It makes more sense to return 1 here in case of overflow.
vitor
parents:
7115
diff
changeset
|
244 return 1; |
6973 | 245 } |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
246 |
7516 | 247 for (i=8; i >= 0; i--) { |
248 b = 0x1000-((bp2[i+1] * bp2[i+1]) >> 12); | |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
249 |
7514 | 250 if (!b) |
7513 | 251 b = -2; |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
252 |
7516 | 253 for (j=0; j <= i; j++) |
254 bp1[j] = ((bp2[j] - ((refl[i+1] * bp2[i-j]) >> 12)) * (0x1000000 / b)) >> 12; | |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
255 |
7516 | 256 if ((unsigned) bp1[i] + 0x1000 > 0x1fff) |
7509
86b6cb5b04d5
Simplify eval_refl(): return directly when needed instead of storing the return value in a variable
vitor
parents:
7508
diff
changeset
|
257 return 1; |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
258 |
7801 | 259 refl[i] = bp1[i]; |
260 | |
6804
24a8b213ba4d
Use correct type in FFSWAP (thanks to Benoit Fouet for pointing it out)
vitor
parents:
6803
diff
changeset
|
261 FFSWAP(int *, bp1, bp2); |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
262 } |
7509
86b6cb5b04d5
Simplify eval_refl(): return directly when needed instead of storing the return value in a variable
vitor
parents:
7508
diff
changeset
|
263 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
|
264 } |
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
|
265 |
7830
3da762190370
Pass directly variable 'a' to interp instead of evaluating it from num_blocks
vitor
parents:
7829
diff
changeset
|
266 static int interp(RA144Context *ractx, int16_t *out, int a, |
7134 | 267 int copyold, int 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
|
268 { |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
269 int work[10]; |
6934 | 270 int b = NBLOCKS - a; |
7447 | 271 int i; |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
272 |
7847 | 273 // Interpolate block coefficients from the this frame's forth block and |
274 // last frame's forth block. | |
7447 | 275 for (i=0; i<30; i++) |
276 out[i] = (a * ractx->lpc_coef[0][i] + b * ractx->lpc_coef[1][i])>> 2; | |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
277 |
7120
c98b43981d89
Consistency: make the output buffer the first argument of functions
vitor
parents:
7119
diff
changeset
|
278 if (eval_refl(work, out, ractx)) { |
6921 | 279 // The interpolated coefficients are unstable, copy either new or old |
7847 | 280 // coefficients. |
7134 | 281 int_to_int16(out, ractx->lpc_coef[copyold]); |
282 return rescale_rms(ractx->lpc_refl_rms[copyold], energy); | |
6921 | 283 } else { |
7004
5bad976fae7b
Split function rms() in two (it does two unrelated things)
vitor
parents:
6991
diff
changeset
|
284 return rescale_rms(rms(work), energy); |
6921 | 285 } |
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
|
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 |
7847 | 288 /** Uncompress one block (20 bytes -> 160*2 bytes). */ |
7132 | 289 static int ra144_decode_frame(AVCodecContext * avctx, void *vdata, |
9355
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9081
diff
changeset
|
290 int *data_size, AVPacket *avpkt) |
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
|
291 { |
9355
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9081
diff
changeset
|
292 const uint8_t *buf = avpkt->data; |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9081
diff
changeset
|
293 int buf_size = avpkt->size; |
6805
8faad14a40a5
Read the bitstream where the data is actually needed instead of doing it in unpack_input()
vitor
parents:
6804
diff
changeset
|
294 static const uint8_t sizes[10] = {6, 5, 5, 4, 4, 3, 3, 3, 3, 2}; |
7084 | 295 unsigned int refl_rms[4]; // RMS of the reflection coefficients |
6966 | 296 uint16_t block_coefs[4][30]; // LPC coefficients of each sub-block |
7005 | 297 unsigned int lpc_refl[10]; // LPC reflection coefficients of the frame |
7447 | 298 int i, j; |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
299 int16_t *data = vdata; |
6898 | 300 unsigned int energy; |
6806 | 301 |
6934 | 302 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
|
303 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
|
304 |
7506
e94202a2e0b6
Check available size before writing in decode_frame()
vitor
parents:
7451
diff
changeset
|
305 if (*data_size < 2*160) |
e94202a2e0b6
Check available size before writing in decode_frame()
vitor
parents:
7451
diff
changeset
|
306 return -1; |
e94202a2e0b6
Check available size before writing in decode_frame()
vitor
parents:
7451
diff
changeset
|
307 |
6854 | 308 if(buf_size < 20) { |
309 av_log(avctx, AV_LOG_ERROR, | |
310 "Frame too small (%d bytes). Truncated file?\n", buf_size); | |
7085
f55f71e2be57
Do not write junk in the end of truncated files. FATE
vitor
parents:
7084
diff
changeset
|
311 *data_size = 0; |
6854 | 312 return buf_size; |
313 } | |
6805
8faad14a40a5
Read the bitstream where the data is actually needed instead of doing it in unpack_input()
vitor
parents:
6804
diff
changeset
|
314 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
|
315 |
6805
8faad14a40a5
Read the bitstream where the data is actually needed instead of doing it in unpack_input()
vitor
parents:
6804
diff
changeset
|
316 for (i=0; i<10; i++) |
7127 | 317 lpc_refl[i] = lpc_refl_cb[i][get_bits(&gb, sizes[i])]; |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
318 |
7128
614bc53e67a8
Use lpc_coef[2] instead of lpc_coef and lpc_coef_old
vitor
parents:
7127
diff
changeset
|
319 eval_coefs(ractx->lpc_coef[0], lpc_refl); |
614bc53e67a8
Use lpc_coef[2] instead of lpc_coef and lpc_coef_old
vitor
parents:
7127
diff
changeset
|
320 ractx->lpc_refl_rms[0] = rms(lpc_refl); |
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
|
321 |
7126 | 322 energy = energy_tab[get_bits(&gb, 5)]; |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
323 |
7830
3da762190370
Pass directly variable 'a' to interp instead of evaluating it from num_blocks
vitor
parents:
7829
diff
changeset
|
324 refl_rms[0] = interp(ractx, block_coefs[0], 1, 1, ractx->old_energy); |
3da762190370
Pass directly variable 'a' to interp instead of evaluating it from num_blocks
vitor
parents:
7829
diff
changeset
|
325 refl_rms[1] = interp(ractx, block_coefs[1], 2, energy <= ractx->old_energy, |
6947 | 326 t_sqrt(energy*ractx->old_energy) >> 12); |
7830
3da762190370
Pass directly variable 'a' to interp instead of evaluating it from num_blocks
vitor
parents:
7829
diff
changeset
|
327 refl_rms[2] = interp(ractx, block_coefs[2], 3, 0, energy); |
7128
614bc53e67a8
Use lpc_coef[2] instead of lpc_coef and lpc_coef_old
vitor
parents:
7127
diff
changeset
|
328 refl_rms[3] = rescale_rms(ractx->lpc_refl_rms[0], energy); |
6968
50dd3a733f43
The function dec1() do two completly unrelated things. Split the rms calculation out of it.
vitor
parents:
6967
diff
changeset
|
329 |
7128
614bc53e67a8
Use lpc_coef[2] instead of lpc_coef and lpc_coef_old
vitor
parents:
7127
diff
changeset
|
330 int_to_int16(block_coefs[3], ractx->lpc_coef[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
|
331 |
7447 | 332 for (i=0; i < 4; i++) { |
333 do_output_subblock(ractx, block_coefs[i], refl_rms[i], &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
|
334 |
7447 | 335 for (j=0; j < BLOCKSIZE; j++) |
336 *data++ = av_clip_int16(ractx->curr_sblock[j + 10] << 2); | |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
337 } |
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
|
338 |
6898 | 339 ractx->old_energy = energy; |
7128
614bc53e67a8
Use lpc_coef[2] instead of lpc_coef and lpc_coef_old
vitor
parents:
7127
diff
changeset
|
340 ractx->lpc_refl_rms[1] = ractx->lpc_refl_rms[0]; |
6781 | 341 |
7128
614bc53e67a8
Use lpc_coef[2] instead of lpc_coef and lpc_coef_old
vitor
parents:
7127
diff
changeset
|
342 FFSWAP(unsigned int *, ractx->lpc_coef[0], ractx->lpc_coef[1]); |
6781 | 343 |
6828 | 344 *data_size = 2*160; |
6767
f95c5091b802
cosmetics: Reindent file, patch by Vitor Sessak, vitor1001 gmail com,
diego
parents:
6712
diff
changeset
|
345 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
|
346 } |
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
|
347 |
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 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
|
349 { |
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
|
350 "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
|
351 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
|
352 CODEC_ID_RA_144, |
6894
eb3c16b99f27
Rename context struct to be more consistent with the rest of ffmpeg
vitor
parents:
6888
diff
changeset
|
353 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
|
354 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
|
355 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
|
356 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
|
357 ra144_decode_frame, |
7040
e943e1409077
Make AVCodec long_names definition conditional depending on CONFIG_SMALL.
stefano
parents:
7005
diff
changeset
|
358 .long_name = NULL_IF_CONFIG_SMALL("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
|
359 }; |