Mercurial > libavcodec.hg
annotate mpc7.c @ 11032:01bd040f8607 libavcodec
Unroll main loop so the edge==0 case is seperate.
This allows many things to be simplified away.
h264 decoder is overall 1% faster with a mbaff sample and
0.1% slower with the cathedral sample, probably because the slow loop
filter code must be loaded into the code cache for each first MB of each
row but isnt used for the following MBs.
author | michael |
---|---|
date | Thu, 28 Jan 2010 01:24:25 +0000 |
parents | 987373501407 |
children | 15add32dd717 |
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 /** | |
8718
e9d9d946f213
Use full internal pathname in doxygen @file directives.
diego
parents:
8628
diff
changeset
|
23 * @file libavcodec/mpc7.c Musepack SV7 decoder |
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 | |
178 static int mpc7_decode_frame(AVCodecContext * avctx, | |
179 void *data, int *data_size, | |
9355
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9153
diff
changeset
|
180 AVPacket *avpkt) |
4328 | 181 { |
9355
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9153
diff
changeset
|
182 const uint8_t *buf = avpkt->data; |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9153
diff
changeset
|
183 int buf_size = avpkt->size; |
4328 | 184 MPCContext *c = avctx->priv_data; |
185 GetBitContext gb; | |
186 uint8_t *bits; | |
5868
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
187 int i, ch, t; |
4328 | 188 int mb = -1; |
5868
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
189 Band *bands = c->bands; |
4328 | 190 int off; |
191 int bits_used, bits_avail; | |
192 | |
193 memset(bands, 0, sizeof(bands)); | |
194 if(buf_size <= 4){ | |
195 av_log(avctx, AV_LOG_ERROR, "Too small buffer passed (%i bytes)\n", buf_size); | |
196 } | |
197 | |
4347
a188a94e1b61
Buffer for get_bits must be padded because readers may overread.
reimar
parents:
4330
diff
changeset
|
198 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
|
199 c->dsp.bswap_buf((uint32_t*)bits, (const uint32_t*)(buf + 4), (buf_size - 4) >> 2); |
4328 | 200 init_get_bits(&gb, bits, (buf_size - 4)* 8); |
201 skip_bits(&gb, buf[0]); | |
202 | |
203 /* read subband indexes */ | |
5868
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
204 for(i = 0; i <= c->maxbands; i++){ |
4328 | 205 for(ch = 0; ch < 2; ch++){ |
206 if(i) t = get_vlc2(&gb, hdr_vlc.table, MPC7_HDR_BITS, 1) - 5; | |
207 if(!i || (t == 4)) bands[i].res[ch] = get_bits(&gb, 4); | |
208 else bands[i].res[ch] = bands[i-1].res[ch] + t; | |
209 } | |
210 | |
211 if(bands[i].res[0] || bands[i].res[1]){ | |
212 mb = i; | |
213 if(c->MSS) bands[i].msf = get_bits1(&gb); | |
214 } | |
215 } | |
216 /* get scale indexes coding method */ | |
217 for(i = 0; i <= mb; i++) | |
218 for(ch = 0; ch < 2; ch++) | |
219 if(bands[i].res[ch]) bands[i].scfi[ch] = get_vlc2(&gb, scfi_vlc.table, MPC7_SCFI_BITS, 1); | |
220 /* get scale indexes */ | |
221 for(i = 0; i <= mb; i++){ | |
222 for(ch = 0; ch < 2; ch++){ | |
223 if(bands[i].res[ch]){ | |
224 bands[i].scf_idx[ch][2] = c->oldDSCF[ch][i]; | |
225 t = get_vlc2(&gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7; | |
226 bands[i].scf_idx[ch][0] = (t == 8) ? get_bits(&gb, 6) : (bands[i].scf_idx[ch][2] + t); | |
227 switch(bands[i].scfi[ch]){ | |
228 case 0: | |
229 t = get_vlc2(&gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7; | |
230 bands[i].scf_idx[ch][1] = (t == 8) ? get_bits(&gb, 6) : (bands[i].scf_idx[ch][0] + t); | |
231 t = get_vlc2(&gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7; | |
232 bands[i].scf_idx[ch][2] = (t == 8) ? get_bits(&gb, 6) : (bands[i].scf_idx[ch][1] + t); | |
233 break; | |
234 case 1: | |
235 t = get_vlc2(&gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7; | |
236 bands[i].scf_idx[ch][1] = (t == 8) ? get_bits(&gb, 6) : (bands[i].scf_idx[ch][0] + t); | |
237 bands[i].scf_idx[ch][2] = bands[i].scf_idx[ch][1]; | |
238 break; | |
239 case 2: | |
240 bands[i].scf_idx[ch][1] = bands[i].scf_idx[ch][0]; | |
241 t = get_vlc2(&gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7; | |
242 bands[i].scf_idx[ch][2] = (t == 8) ? get_bits(&gb, 6) : (bands[i].scf_idx[ch][1] + t); | |
243 break; | |
244 case 3: | |
245 bands[i].scf_idx[ch][2] = bands[i].scf_idx[ch][1] = bands[i].scf_idx[ch][0]; | |
246 break; | |
247 } | |
248 c->oldDSCF[ch][i] = bands[i].scf_idx[ch][2]; | |
249 } | |
250 } | |
251 } | |
252 /* get quantizers */ | |
5868
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
253 memset(c->Q, 0, sizeof(c->Q)); |
4328 | 254 off = 0; |
255 for(i = 0; i < BANDS; i++, off += SAMPLES_PER_BAND) | |
256 for(ch = 0; ch < 2; ch++) | |
5868
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
257 idx_to_quant(c, &gb, bands[i].res[ch], c->Q[ch] + off); |
4328 | 258 |
5868
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
259 ff_mpc_dequantize_and_synth(c, mb, data); |
4328 | 260 |
261 av_free(bits); | |
262 | |
263 bits_used = get_bits_count(&gb); | |
264 bits_avail = (buf_size - 4) * 8; | |
265 if(!buf[1] && ((bits_avail < bits_used) || (bits_used + 32 <= bits_avail))){ | |
266 av_log(NULL,0, "Error decoding frame: used %i of %i bits\n", bits_used, bits_avail); | |
267 return -1; | |
268 } | |
4330
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
269 if(c->frames_to_skip){ |
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
270 c->frames_to_skip--; |
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
271 *data_size = 0; |
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
272 return buf_size; |
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
273 } |
4328 | 274 *data_size = (buf[1] ? c->lastframelen : MPC_FRAME_SIZE) * 4; |
275 | |
276 return buf_size; | |
277 } | |
278 | |
4330
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
279 static void mpc7_decode_flush(AVCodecContext *avctx) |
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
280 { |
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
281 MPCContext *c = avctx->priv_data; |
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
282 |
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
283 memset(c->oldDSCF, 0, sizeof(c->oldDSCF)); |
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
284 c->frames_to_skip = 32; |
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
285 } |
4328 | 286 |
287 AVCodec mpc7_decoder = { | |
6716 | 288 "mpc7", |
4328 | 289 CODEC_TYPE_AUDIO, |
290 CODEC_ID_MUSEPACK7, | |
291 sizeof(MPCContext), | |
292 mpc7_decode_init, | |
293 NULL, | |
294 NULL, | |
295 mpc7_decode_frame, | |
4330
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
296 .flush = mpc7_decode_flush, |
7040
e943e1409077
Make AVCodec long_names definition conditional depending on CONFIG_SMALL.
stefano
parents:
6763
diff
changeset
|
297 .long_name = NULL_IF_CONFIG_SMALL("Musepack SV7"), |
4328 | 298 }; |