Mercurial > libavcodec.hg
annotate mpc7.c @ 12266:48d6738904a9 libavcodec
Fix SPLATB_REG mess. Used to be a if/elseif/elseif/elseif spaghetti, so this
splits it into small optimization-specific macros which are selected for each
DSP function. The advantage of this approach is that the sse4 functions now
use the ssse3 codepath also without needing an explicit sse4 codepath.
author | rbultje |
---|---|
date | Sat, 24 Jul 2010 19:33:05 +0000 |
parents | 7dd2a45249a9 |
children |
rev | line source |
---|---|
4328 | 1 /* |
5868
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
2 * Musepack SV7 decoder |
4328 | 3 * Copyright (c) 2006 Konstantin Shishkov |
4 * | |
5 * This file is part of FFmpeg. | |
6 * | |
7 * FFmpeg is free software; you can redistribute it and/or | |
8 * modify it under the terms of the GNU Lesser General Public | |
9 * License as published by the Free Software Foundation; either | |
10 * version 2.1 of the License, or (at your option) any later version. | |
11 * | |
12 * FFmpeg is distributed in the hope that it will be useful, | |
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 * Lesser General Public License for more details. | |
16 * | |
17 * You should have received a copy of the GNU Lesser General Public | |
18 * License along with FFmpeg; if not, write to the Free Software | |
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
20 */ | |
21 | |
22 /** | |
11644
7dd2a45249a9
Remove explicit filename from Doxygen @file commands.
diego
parents:
11560
diff
changeset
|
23 * @file |
4328 | 24 * MPEG Audio Layer 1/2 -like codec with frames of 1152 samples |
25 * divided into 32 subbands. | |
26 */ | |
27 | |
9153
4e91d96dd045
Make Musepack decoders use LFG pseudorandom generator
kostya
parents:
8718
diff
changeset
|
28 #include "libavutil/lfg.h" |
4328 | 29 #include "avcodec.h" |
9428 | 30 #include "get_bits.h" |
4328 | 31 #include "dsputil.h" |
32 #include "mpegaudio.h" | |
33 | |
5868
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
34 #include "mpc.h" |
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
35 #include "mpc7data.h" |
4328 | 36 |
37 #define BANDS 32 | |
38 #define SAMPLES_PER_BAND 36 | |
39 #define MPC_FRAME_SIZE (BANDS * SAMPLES_PER_BAND) | |
40 | |
41 static VLC scfi_vlc, dscf_vlc, hdr_vlc, quant_vlc[MPC7_QUANT_VLC_TABLES][2]; | |
42 | |
9517
dcae1f330498
Compact and make constant two tables used by Musepack decoders
kostya
parents:
9463
diff
changeset
|
43 static const uint16_t quant_offsets[MPC7_QUANT_VLC_TABLES*2 + 1] = |
9463
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
44 { |
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
45 0, 512, 1024, 1536, 2052, 2564, 3076, 3588, 4100, 4612, 5124, |
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
46 5636, 6164, 6676, 7224 |
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
47 }; |
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
48 |
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
49 |
6517
48759bfbd073
Apply 'cold' attribute to init/uninit functions in libavcodec
zuxy
parents:
6350
diff
changeset
|
50 static av_cold int mpc7_decode_init(AVCodecContext * avctx) |
4328 | 51 { |
52 int i, j; | |
53 MPCContext *c = avctx->priv_data; | |
54 GetBitContext gb; | |
55 uint8_t buf[16]; | |
6350 | 56 static int vlc_initialized = 0; |
4328 | 57 |
9463
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
58 static VLC_TYPE scfi_table[1 << MPC7_SCFI_BITS][2]; |
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
59 static VLC_TYPE dscf_table[1 << MPC7_DSCF_BITS][2]; |
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
60 static VLC_TYPE hdr_table[1 << MPC7_HDR_BITS][2]; |
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
61 static VLC_TYPE quant_tables[7224][2]; |
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
62 |
4328 | 63 if(avctx->extradata_size < 16){ |
64 av_log(avctx, AV_LOG_ERROR, "Too small extradata size (%i)!\n", avctx->extradata_size); | |
65 return -1; | |
66 } | |
67 memset(c->oldDSCF, 0, sizeof(c->oldDSCF)); | |
9153
4e91d96dd045
Make Musepack decoders use LFG pseudorandom generator
kostya
parents:
8718
diff
changeset
|
68 av_lfg_init(&c->rnd, 0xDEADBEEF); |
4328 | 69 dsputil_init(&c->dsp, avctx); |
6242
67986191913d
Casts to silcence "incompatible pointer type" warnings.
michael
parents:
6218
diff
changeset
|
70 c->dsp.bswap_buf((uint32_t*)buf, (const uint32_t*)avctx->extradata, 4); |
5868
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
71 ff_mpc_init(); |
4328 | 72 init_get_bits(&gb, buf, 128); |
73 | |
74 c->IS = get_bits1(&gb); | |
75 c->MSS = get_bits1(&gb); | |
5868
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
76 c->maxbands = get_bits(&gb, 6); |
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
77 if(c->maxbands >= BANDS){ |
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
78 av_log(avctx, AV_LOG_ERROR, "Too many bands: %i\n", c->maxbands); |
4328 | 79 return -1; |
80 } | |
9637 | 81 skip_bits_long(&gb, 88); |
4328 | 82 c->gapless = get_bits1(&gb); |
83 c->lastframelen = get_bits(&gb, 11); | |
84 av_log(avctx, AV_LOG_DEBUG, "IS: %d, MSS: %d, TG: %d, LFL: %d, bands: %d\n", | |
5868
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
85 c->IS, c->MSS, c->gapless, c->lastframelen, c->maxbands); |
4330
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
86 c->frames_to_skip = 0; |
4328 | 87 |
10602 | 88 avctx->sample_fmt = SAMPLE_FMT_S16; |
89 avctx->channel_layout = (avctx->channels==2) ? CH_LAYOUT_STEREO : CH_LAYOUT_MONO; | |
90 | |
6350 | 91 if(vlc_initialized) return 0; |
4328 | 92 av_log(avctx, AV_LOG_DEBUG, "Initing VLC\n"); |
9463
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
93 scfi_vlc.table = scfi_table; |
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
94 scfi_vlc.table_allocated = 1 << MPC7_SCFI_BITS; |
4328 | 95 if(init_vlc(&scfi_vlc, MPC7_SCFI_BITS, MPC7_SCFI_SIZE, |
96 &mpc7_scfi[1], 2, 1, | |
9463
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
97 &mpc7_scfi[0], 2, 1, INIT_VLC_USE_NEW_STATIC)){ |
4328 | 98 av_log(avctx, AV_LOG_ERROR, "Cannot init SCFI VLC\n"); |
99 return -1; | |
100 } | |
9463
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
101 dscf_vlc.table = dscf_table; |
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
102 dscf_vlc.table_allocated = 1 << MPC7_DSCF_BITS; |
4328 | 103 if(init_vlc(&dscf_vlc, MPC7_DSCF_BITS, MPC7_DSCF_SIZE, |
104 &mpc7_dscf[1], 2, 1, | |
9463
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
105 &mpc7_dscf[0], 2, 1, INIT_VLC_USE_NEW_STATIC)){ |
4328 | 106 av_log(avctx, AV_LOG_ERROR, "Cannot init DSCF VLC\n"); |
107 return -1; | |
108 } | |
9463
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
109 hdr_vlc.table = hdr_table; |
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
110 hdr_vlc.table_allocated = 1 << MPC7_HDR_BITS; |
4328 | 111 if(init_vlc(&hdr_vlc, MPC7_HDR_BITS, MPC7_HDR_SIZE, |
112 &mpc7_hdr[1], 2, 1, | |
9463
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
113 &mpc7_hdr[0], 2, 1, INIT_VLC_USE_NEW_STATIC)){ |
4328 | 114 av_log(avctx, AV_LOG_ERROR, "Cannot init HDR VLC\n"); |
115 return -1; | |
116 } | |
117 for(i = 0; i < MPC7_QUANT_VLC_TABLES; i++){ | |
118 for(j = 0; j < 2; j++){ | |
9463
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
119 quant_vlc[i][j].table = &quant_tables[quant_offsets[i*2 + j]]; |
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
120 quant_vlc[i][j].table_allocated = quant_offsets[i*2 + j + 1] - quant_offsets[i*2 + j]; |
4328 | 121 if(init_vlc(&quant_vlc[i][j], 9, mpc7_quant_vlc_sizes[i], |
122 &mpc7_quant_vlc[i][j][1], 4, 2, | |
9463
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
123 &mpc7_quant_vlc[i][j][0], 4, 2, INIT_VLC_USE_NEW_STATIC)){ |
4328 | 124 av_log(avctx, AV_LOG_ERROR, "Cannot init QUANT VLC %i,%i\n",i,j); |
125 return -1; | |
126 } | |
127 } | |
128 } | |
6350 | 129 vlc_initialized = 1; |
4328 | 130 return 0; |
131 } | |
132 | |
133 /** | |
134 * Fill samples for given subband | |
135 */ | |
4908
777f250df232
Fix multiple "¡Æinline/static¡Ç is not at beginning of declaration" warnings.
diego
parents:
4536
diff
changeset
|
136 static inline void idx_to_quant(MPCContext *c, GetBitContext *gb, int idx, int *dst) |
4328 | 137 { |
138 int i, i1, t; | |
139 switch(idx){ | |
140 case -1: | |
141 for(i = 0; i < SAMPLES_PER_BAND; i++){ | |
9153
4e91d96dd045
Make Musepack decoders use LFG pseudorandom generator
kostya
parents:
8718
diff
changeset
|
142 *dst++ = (av_lfg_get(&c->rnd) & 0x3FC) - 510; |
4328 | 143 } |
4535 | 144 break; |
4328 | 145 case 1: |
146 i1 = get_bits1(gb); | |
147 for(i = 0; i < SAMPLES_PER_BAND/3; i++){ | |
148 t = get_vlc2(gb, quant_vlc[0][i1].table, 9, 2); | |
5868
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
149 *dst++ = mpc7_idx30[t]; |
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
150 *dst++ = mpc7_idx31[t]; |
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
151 *dst++ = mpc7_idx32[t]; |
4328 | 152 } |
153 break; | |
154 case 2: | |
155 i1 = get_bits1(gb); | |
156 for(i = 0; i < SAMPLES_PER_BAND/2; i++){ | |
157 t = get_vlc2(gb, quant_vlc[1][i1].table, 9, 2); | |
5868
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
158 *dst++ = mpc7_idx50[t]; |
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
159 *dst++ = mpc7_idx51[t]; |
4328 | 160 } |
161 break; | |
162 case 3: case 4: case 5: case 6: case 7: | |
163 i1 = get_bits1(gb); | |
164 for(i = 0; i < SAMPLES_PER_BAND; i++) | |
165 *dst++ = get_vlc2(gb, quant_vlc[idx-1][i1].table, 9, 2) - mpc7_quant_vlc_off[idx-1]; | |
166 break; | |
167 case 8: case 9: case 10: case 11: case 12: | |
168 case 13: case 14: case 15: case 16: case 17: | |
169 t = (1 << (idx - 2)) - 1; | |
170 for(i = 0; i < SAMPLES_PER_BAND; i++) | |
171 *dst++ = get_bits(gb, idx - 1) - t; | |
172 break; | |
173 default: // case 0 and -2..-17 | |
174 return; | |
175 } | |
176 } | |
177 | |
11046 | 178 static int get_scale_idx(GetBitContext *gb, int ref) |
179 { | |
180 int t = get_vlc2(gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7; | |
181 if (t == 8) | |
182 return get_bits(gb, 6); | |
183 return ref + t; | |
184 } | |
185 | |
4328 | 186 static int mpc7_decode_frame(AVCodecContext * avctx, |
187 void *data, int *data_size, | |
9355
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9153
diff
changeset
|
188 AVPacket *avpkt) |
4328 | 189 { |
9355
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9153
diff
changeset
|
190 const uint8_t *buf = avpkt->data; |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9153
diff
changeset
|
191 int buf_size = avpkt->size; |
4328 | 192 MPCContext *c = avctx->priv_data; |
193 GetBitContext gb; | |
194 uint8_t *bits; | |
11048
9db9a81cc220
Move variable declaration to block where it is used and simplify code.
reimar
parents:
11046
diff
changeset
|
195 int i, ch; |
4328 | 196 int mb = -1; |
5868
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
197 Band *bands = c->bands; |
4328 | 198 int off; |
199 int bits_used, bits_avail; | |
200 | |
201 memset(bands, 0, sizeof(bands)); | |
202 if(buf_size <= 4){ | |
203 av_log(avctx, AV_LOG_ERROR, "Too small buffer passed (%i bytes)\n", buf_size); | |
204 } | |
205 | |
4347
a188a94e1b61
Buffer for get_bits must be padded because readers may overread.
reimar
parents:
4330
diff
changeset
|
206 bits = av_malloc(((buf_size - 1) & ~3) + FF_INPUT_BUFFER_PADDING_SIZE); |
6242
67986191913d
Casts to silcence "incompatible pointer type" warnings.
michael
parents:
6218
diff
changeset
|
207 c->dsp.bswap_buf((uint32_t*)bits, (const uint32_t*)(buf + 4), (buf_size - 4) >> 2); |
4328 | 208 init_get_bits(&gb, bits, (buf_size - 4)* 8); |
209 skip_bits(&gb, buf[0]); | |
210 | |
211 /* read subband indexes */ | |
5868
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
212 for(i = 0; i <= c->maxbands; i++){ |
4328 | 213 for(ch = 0; ch < 2; ch++){ |
11048
9db9a81cc220
Move variable declaration to block where it is used and simplify code.
reimar
parents:
11046
diff
changeset
|
214 int t = 4; |
4328 | 215 if(i) t = get_vlc2(&gb, hdr_vlc.table, MPC7_HDR_BITS, 1) - 5; |
11048
9db9a81cc220
Move variable declaration to block where it is used and simplify code.
reimar
parents:
11046
diff
changeset
|
216 if(t == 4) bands[i].res[ch] = get_bits(&gb, 4); |
4328 | 217 else bands[i].res[ch] = bands[i-1].res[ch] + t; |
218 } | |
219 | |
220 if(bands[i].res[0] || bands[i].res[1]){ | |
221 mb = i; | |
222 if(c->MSS) bands[i].msf = get_bits1(&gb); | |
223 } | |
224 } | |
225 /* get scale indexes coding method */ | |
226 for(i = 0; i <= mb; i++) | |
227 for(ch = 0; ch < 2; ch++) | |
228 if(bands[i].res[ch]) bands[i].scfi[ch] = get_vlc2(&gb, scfi_vlc.table, MPC7_SCFI_BITS, 1); | |
229 /* get scale indexes */ | |
230 for(i = 0; i <= mb; i++){ | |
231 for(ch = 0; ch < 2; ch++){ | |
232 if(bands[i].res[ch]){ | |
233 bands[i].scf_idx[ch][2] = c->oldDSCF[ch][i]; | |
11046 | 234 bands[i].scf_idx[ch][0] = get_scale_idx(&gb, bands[i].scf_idx[ch][2]); |
4328 | 235 switch(bands[i].scfi[ch]){ |
236 case 0: | |
11046 | 237 bands[i].scf_idx[ch][1] = get_scale_idx(&gb, bands[i].scf_idx[ch][0]); |
238 bands[i].scf_idx[ch][2] = get_scale_idx(&gb, bands[i].scf_idx[ch][1]); | |
4328 | 239 break; |
240 case 1: | |
11046 | 241 bands[i].scf_idx[ch][1] = get_scale_idx(&gb, bands[i].scf_idx[ch][0]); |
4328 | 242 bands[i].scf_idx[ch][2] = bands[i].scf_idx[ch][1]; |
243 break; | |
244 case 2: | |
245 bands[i].scf_idx[ch][1] = bands[i].scf_idx[ch][0]; | |
11046 | 246 bands[i].scf_idx[ch][2] = get_scale_idx(&gb, bands[i].scf_idx[ch][1]); |
4328 | 247 break; |
248 case 3: | |
249 bands[i].scf_idx[ch][2] = bands[i].scf_idx[ch][1] = bands[i].scf_idx[ch][0]; | |
250 break; | |
251 } | |
252 c->oldDSCF[ch][i] = bands[i].scf_idx[ch][2]; | |
253 } | |
254 } | |
255 } | |
256 /* get quantizers */ | |
5868
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
257 memset(c->Q, 0, sizeof(c->Q)); |
4328 | 258 off = 0; |
259 for(i = 0; i < BANDS; i++, off += SAMPLES_PER_BAND) | |
260 for(ch = 0; ch < 2; ch++) | |
5868
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
261 idx_to_quant(c, &gb, bands[i].res[ch], c->Q[ch] + off); |
4328 | 262 |
5868
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
263 ff_mpc_dequantize_and_synth(c, mb, data); |
4328 | 264 |
265 av_free(bits); | |
266 | |
267 bits_used = get_bits_count(&gb); | |
268 bits_avail = (buf_size - 4) * 8; | |
269 if(!buf[1] && ((bits_avail < bits_used) || (bits_used + 32 <= bits_avail))){ | |
270 av_log(NULL,0, "Error decoding frame: used %i of %i bits\n", bits_used, bits_avail); | |
271 return -1; | |
272 } | |
4330
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
273 if(c->frames_to_skip){ |
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
274 c->frames_to_skip--; |
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
275 *data_size = 0; |
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
276 return buf_size; |
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
277 } |
4328 | 278 *data_size = (buf[1] ? c->lastframelen : MPC_FRAME_SIZE) * 4; |
279 | |
280 return buf_size; | |
281 } | |
282 | |
4330
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
283 static void mpc7_decode_flush(AVCodecContext *avctx) |
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
284 { |
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
285 MPCContext *c = avctx->priv_data; |
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
286 |
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
287 memset(c->oldDSCF, 0, sizeof(c->oldDSCF)); |
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
288 c->frames_to_skip = 32; |
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
289 } |
4328 | 290 |
291 AVCodec mpc7_decoder = { | |
6716 | 292 "mpc7", |
11560
8a4984c5cacc
Define AVMediaType enum, and use it instead of enum CodecType, which
stefano
parents:
11048
diff
changeset
|
293 AVMEDIA_TYPE_AUDIO, |
4328 | 294 CODEC_ID_MUSEPACK7, |
295 sizeof(MPCContext), | |
296 mpc7_decode_init, | |
297 NULL, | |
298 NULL, | |
299 mpc7_decode_frame, | |
4330
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
300 .flush = mpc7_decode_flush, |
7040
e943e1409077
Make AVCodec long_names definition conditional depending on CONFIG_SMALL.
stefano
parents:
6763
diff
changeset
|
301 .long_name = NULL_IF_CONFIG_SMALL("Musepack SV7"), |
4328 | 302 }; |