Mercurial > libavcodec.hg
annotate mpc7.c @ 10311:943b63f364ca libavcodec
Make sure all the bits are written to output in fax data decoder.
This fixes decoding TIFF images with fax compression and width being not
multiple of eight (and issue 1429).
author | kostya |
---|---|
date | Tue, 29 Sep 2009 05:55:14 +0000 |
parents | f1dc62781766 |
children | 987373501407 |
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 |
6350 | 88 if(vlc_initialized) return 0; |
4328 | 89 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
|
90 scfi_vlc.table = scfi_table; |
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
91 scfi_vlc.table_allocated = 1 << MPC7_SCFI_BITS; |
4328 | 92 if(init_vlc(&scfi_vlc, MPC7_SCFI_BITS, MPC7_SCFI_SIZE, |
93 &mpc7_scfi[1], 2, 1, | |
9463
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
94 &mpc7_scfi[0], 2, 1, INIT_VLC_USE_NEW_STATIC)){ |
4328 | 95 av_log(avctx, AV_LOG_ERROR, "Cannot init SCFI VLC\n"); |
96 return -1; | |
97 } | |
9463
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
98 dscf_vlc.table = dscf_table; |
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
99 dscf_vlc.table_allocated = 1 << MPC7_DSCF_BITS; |
4328 | 100 if(init_vlc(&dscf_vlc, MPC7_DSCF_BITS, MPC7_DSCF_SIZE, |
101 &mpc7_dscf[1], 2, 1, | |
9463
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
102 &mpc7_dscf[0], 2, 1, INIT_VLC_USE_NEW_STATIC)){ |
4328 | 103 av_log(avctx, AV_LOG_ERROR, "Cannot init DSCF VLC\n"); |
104 return -1; | |
105 } | |
9463
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
106 hdr_vlc.table = hdr_table; |
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
107 hdr_vlc.table_allocated = 1 << MPC7_HDR_BITS; |
4328 | 108 if(init_vlc(&hdr_vlc, MPC7_HDR_BITS, MPC7_HDR_SIZE, |
109 &mpc7_hdr[1], 2, 1, | |
9463
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
110 &mpc7_hdr[0], 2, 1, INIT_VLC_USE_NEW_STATIC)){ |
4328 | 111 av_log(avctx, AV_LOG_ERROR, "Cannot init HDR VLC\n"); |
112 return -1; | |
113 } | |
114 for(i = 0; i < MPC7_QUANT_VLC_TABLES; i++){ | |
115 for(j = 0; j < 2; j++){ | |
9463
d719a2711c64
Use new static VLC scheme in Indeo2, Musepack and WNV1 decoders
kostya
parents:
9428
diff
changeset
|
116 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
|
117 quant_vlc[i][j].table_allocated = quant_offsets[i*2 + j + 1] - quant_offsets[i*2 + j]; |
4328 | 118 if(init_vlc(&quant_vlc[i][j], 9, mpc7_quant_vlc_sizes[i], |
119 &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
|
120 &mpc7_quant_vlc[i][j][0], 4, 2, INIT_VLC_USE_NEW_STATIC)){ |
4328 | 121 av_log(avctx, AV_LOG_ERROR, "Cannot init QUANT VLC %i,%i\n",i,j); |
122 return -1; | |
123 } | |
124 } | |
125 } | |
6350 | 126 vlc_initialized = 1; |
7451
85ab7655ad4d
Modify all codecs to report their supported input and output sample format(s).
pross
parents:
7040
diff
changeset
|
127 avctx->sample_fmt = SAMPLE_FMT_S16; |
8174
f11197441364
Add channel layout to several audio decoders I maintain
kostya
parents:
7451
diff
changeset
|
128 avctx->channel_layout = (avctx->channels==2) ? CH_LAYOUT_STEREO : CH_LAYOUT_MONO; |
4328 | 129 return 0; |
130 } | |
131 | |
132 /** | |
133 * Fill samples for given subband | |
134 */ | |
4908
777f250df232
Fix multiple "¡Æinline/static¡Ç is not at beginning of declaration" warnings.
diego
parents:
4536
diff
changeset
|
135 static inline void idx_to_quant(MPCContext *c, GetBitContext *gb, int idx, int *dst) |
4328 | 136 { |
137 int i, i1, t; | |
138 switch(idx){ | |
139 case -1: | |
140 for(i = 0; i < SAMPLES_PER_BAND; i++){ | |
9153
4e91d96dd045
Make Musepack decoders use LFG pseudorandom generator
kostya
parents:
8718
diff
changeset
|
141 *dst++ = (av_lfg_get(&c->rnd) & 0x3FC) - 510; |
4328 | 142 } |
4535 | 143 break; |
4328 | 144 case 1: |
145 i1 = get_bits1(gb); | |
146 for(i = 0; i < SAMPLES_PER_BAND/3; i++){ | |
147 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
|
148 *dst++ = mpc7_idx30[t]; |
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
149 *dst++ = mpc7_idx31[t]; |
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
150 *dst++ = mpc7_idx32[t]; |
4328 | 151 } |
152 break; | |
153 case 2: | |
154 i1 = get_bits1(gb); | |
155 for(i = 0; i < SAMPLES_PER_BAND/2; i++){ | |
156 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
|
157 *dst++ = mpc7_idx50[t]; |
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
158 *dst++ = mpc7_idx51[t]; |
4328 | 159 } |
160 break; | |
161 case 3: case 4: case 5: case 6: case 7: | |
162 i1 = get_bits1(gb); | |
163 for(i = 0; i < SAMPLES_PER_BAND; i++) | |
164 *dst++ = get_vlc2(gb, quant_vlc[idx-1][i1].table, 9, 2) - mpc7_quant_vlc_off[idx-1]; | |
165 break; | |
166 case 8: case 9: case 10: case 11: case 12: | |
167 case 13: case 14: case 15: case 16: case 17: | |
168 t = (1 << (idx - 2)) - 1; | |
169 for(i = 0; i < SAMPLES_PER_BAND; i++) | |
170 *dst++ = get_bits(gb, idx - 1) - t; | |
171 break; | |
172 default: // case 0 and -2..-17 | |
173 return; | |
174 } | |
175 } | |
176 | |
177 static int mpc7_decode_frame(AVCodecContext * avctx, | |
178 void *data, int *data_size, | |
9355
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9153
diff
changeset
|
179 AVPacket *avpkt) |
4328 | 180 { |
9355
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9153
diff
changeset
|
181 const uint8_t *buf = avpkt->data; |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9153
diff
changeset
|
182 int buf_size = avpkt->size; |
4328 | 183 MPCContext *c = avctx->priv_data; |
184 GetBitContext gb; | |
185 uint8_t *bits; | |
5868
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
186 int i, ch, t; |
4328 | 187 int mb = -1; |
5868
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
188 Band *bands = c->bands; |
4328 | 189 int off; |
190 int bits_used, bits_avail; | |
191 | |
192 memset(bands, 0, sizeof(bands)); | |
193 if(buf_size <= 4){ | |
194 av_log(avctx, AV_LOG_ERROR, "Too small buffer passed (%i bytes)\n", buf_size); | |
195 } | |
196 | |
4347
a188a94e1b61
Buffer for get_bits must be padded because readers may overread.
reimar
parents:
4330
diff
changeset
|
197 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
|
198 c->dsp.bswap_buf((uint32_t*)bits, (const uint32_t*)(buf + 4), (buf_size - 4) >> 2); |
4328 | 199 init_get_bits(&gb, bits, (buf_size - 4)* 8); |
200 skip_bits(&gb, buf[0]); | |
201 | |
202 /* read subband indexes */ | |
5868
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
203 for(i = 0; i <= c->maxbands; i++){ |
4328 | 204 for(ch = 0; ch < 2; ch++){ |
205 if(i) t = get_vlc2(&gb, hdr_vlc.table, MPC7_HDR_BITS, 1) - 5; | |
206 if(!i || (t == 4)) bands[i].res[ch] = get_bits(&gb, 4); | |
207 else bands[i].res[ch] = bands[i-1].res[ch] + t; | |
208 } | |
209 | |
210 if(bands[i].res[0] || bands[i].res[1]){ | |
211 mb = i; | |
212 if(c->MSS) bands[i].msf = get_bits1(&gb); | |
213 } | |
214 } | |
215 /* get scale indexes coding method */ | |
216 for(i = 0; i <= mb; i++) | |
217 for(ch = 0; ch < 2; ch++) | |
218 if(bands[i].res[ch]) bands[i].scfi[ch] = get_vlc2(&gb, scfi_vlc.table, MPC7_SCFI_BITS, 1); | |
219 /* get scale indexes */ | |
220 for(i = 0; i <= mb; i++){ | |
221 for(ch = 0; ch < 2; ch++){ | |
222 if(bands[i].res[ch]){ | |
223 bands[i].scf_idx[ch][2] = c->oldDSCF[ch][i]; | |
224 t = get_vlc2(&gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7; | |
225 bands[i].scf_idx[ch][0] = (t == 8) ? get_bits(&gb, 6) : (bands[i].scf_idx[ch][2] + t); | |
226 switch(bands[i].scfi[ch]){ | |
227 case 0: | |
228 t = get_vlc2(&gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7; | |
229 bands[i].scf_idx[ch][1] = (t == 8) ? get_bits(&gb, 6) : (bands[i].scf_idx[ch][0] + t); | |
230 t = get_vlc2(&gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7; | |
231 bands[i].scf_idx[ch][2] = (t == 8) ? get_bits(&gb, 6) : (bands[i].scf_idx[ch][1] + t); | |
232 break; | |
233 case 1: | |
234 t = get_vlc2(&gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7; | |
235 bands[i].scf_idx[ch][1] = (t == 8) ? get_bits(&gb, 6) : (bands[i].scf_idx[ch][0] + t); | |
236 bands[i].scf_idx[ch][2] = bands[i].scf_idx[ch][1]; | |
237 break; | |
238 case 2: | |
239 bands[i].scf_idx[ch][1] = bands[i].scf_idx[ch][0]; | |
240 t = get_vlc2(&gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7; | |
241 bands[i].scf_idx[ch][2] = (t == 8) ? get_bits(&gb, 6) : (bands[i].scf_idx[ch][1] + t); | |
242 break; | |
243 case 3: | |
244 bands[i].scf_idx[ch][2] = bands[i].scf_idx[ch][1] = bands[i].scf_idx[ch][0]; | |
245 break; | |
246 } | |
247 c->oldDSCF[ch][i] = bands[i].scf_idx[ch][2]; | |
248 } | |
249 } | |
250 } | |
251 /* get quantizers */ | |
5868
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
252 memset(c->Q, 0, sizeof(c->Q)); |
4328 | 253 off = 0; |
254 for(i = 0; i < BANDS; i++, off += SAMPLES_PER_BAND) | |
255 for(ch = 0; ch < 2; ch++) | |
5868
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
256 idx_to_quant(c, &gb, bands[i].res[ch], c->Q[ch] + off); |
4328 | 257 |
5868
2cc044ac80d4
Split Musepack decoder into SV7 decoder and synth core
kostya
parents:
5215
diff
changeset
|
258 ff_mpc_dequantize_and_synth(c, mb, data); |
4328 | 259 |
260 av_free(bits); | |
261 | |
262 bits_used = get_bits_count(&gb); | |
263 bits_avail = (buf_size - 4) * 8; | |
264 if(!buf[1] && ((bits_avail < bits_used) || (bits_used + 32 <= bits_avail))){ | |
265 av_log(NULL,0, "Error decoding frame: used %i of %i bits\n", bits_used, bits_avail); | |
266 return -1; | |
267 } | |
4330
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
268 if(c->frames_to_skip){ |
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
269 c->frames_to_skip--; |
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
270 *data_size = 0; |
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
271 return buf_size; |
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
272 } |
4328 | 273 *data_size = (buf[1] ? c->lastframelen : MPC_FRAME_SIZE) * 4; |
274 | |
275 return buf_size; | |
276 } | |
277 | |
4330
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
278 static void mpc7_decode_flush(AVCodecContext *avctx) |
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
279 { |
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
280 MPCContext *c = avctx->priv_data; |
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
281 |
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
282 memset(c->oldDSCF, 0, sizeof(c->oldDSCF)); |
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
283 c->frames_to_skip = 32; |
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
284 } |
4328 | 285 |
286 AVCodec mpc7_decoder = { | |
6716 | 287 "mpc7", |
4328 | 288 CODEC_TYPE_AUDIO, |
289 CODEC_ID_MUSEPACK7, | |
290 sizeof(MPCContext), | |
291 mpc7_decode_init, | |
292 NULL, | |
293 NULL, | |
294 mpc7_decode_frame, | |
4330
0663caaf573c
Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents:
4328
diff
changeset
|
295 .flush = mpc7_decode_flush, |
7040
e943e1409077
Make AVCodec long_names definition conditional depending on CONFIG_SMALL.
stefano
parents:
6763
diff
changeset
|
296 .long_name = NULL_IF_CONFIG_SMALL("Musepack SV7"), |
4328 | 297 }; |