annotate mpc.c @ 4443:54bed3ee58f3 libavcodec

simpify state and make code 2% faster reimar, dont hesitate to flame me for not sending patches and feel free to revert any or all of my changes to lzo.c if you dont like them
author michael
date Wed, 31 Jan 2007 10:34:13 +0000
parents a188a94e1b61
children e3b224087a85
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4328
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
1 /*
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
2 * Musepack decoder
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
3 * Copyright (c) 2006 Konstantin Shishkov
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
4 *
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
5 * This file is part of FFmpeg.
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
6 *
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
9 * License as published by the Free Software Foundation; either
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
11 *
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
15 * Lesser General Public License for more details.
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
16 *
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
20 *
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
21 */
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
22
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
23 /**
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
24 * @file mpc.c Musepack decoder
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
25 * MPEG Audio Layer 1/2 -like codec with frames of 1152 samples
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
26 * divided into 32 subbands.
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
27 */
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
28
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
29 #include "avcodec.h"
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
30 #include "bitstream.h"
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
31 #include "dsputil.h"
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
32
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
33 #ifdef CONFIG_MPEGAUDIO_HP
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
34 #define USE_HIGHPRECISION
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
35 #endif
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
36 #include "mpegaudio.h"
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
37
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
38 #include "mpcdata.h"
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
39
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
40 #define BANDS 32
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
41 #define SAMPLES_PER_BAND 36
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
42 #define MPC_FRAME_SIZE (BANDS * SAMPLES_PER_BAND)
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
43
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
44 static VLC scfi_vlc, dscf_vlc, hdr_vlc, quant_vlc[MPC7_QUANT_VLC_TABLES][2];
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
45
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
46 static DECLARE_ALIGNED_16(MPA_INT, mpa_window[512]);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
47
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
48 typedef struct {
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
49 DSPContext dsp;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
50 int IS, MSS, gapless;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
51 int lastframelen, bands;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
52 int oldDSCF[2][BANDS];
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
53 int rnd;
4330
0663caaf573c Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents: 4328
diff changeset
54 int frames_to_skip;
4328
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
55 /* for synthesis */
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
56 DECLARE_ALIGNED_16(MPA_INT, synth_buf[MPA_MAX_CHANNELS][512*2]);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
57 int synth_buf_offset[MPA_MAX_CHANNELS];
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
58 DECLARE_ALIGNED_16(int32_t, sb_samples[MPA_MAX_CHANNELS][36][SBLIMIT]);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
59 } MPCContext;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
60
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
61 /** Subband structure - hold all variables for each subband */
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
62 typedef struct {
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
63 int msf; ///< mid-stereo flag
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
64 int res[2];
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
65 int scfi[2];
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
66 int scf_idx[2][3];
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
67 int Q[2];
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
68 }Band;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
69
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
70 static int mpc7_decode_init(AVCodecContext * avctx)
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
71 {
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
72 int i, j;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
73 MPCContext *c = avctx->priv_data;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
74 GetBitContext gb;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
75 uint8_t buf[16];
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
76 float f1=1.20050805774840750476 * 256;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
77 static int vlc_inited = 0;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
78
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
79 if(avctx->extradata_size < 16){
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
80 av_log(avctx, AV_LOG_ERROR, "Too small extradata size (%i)!\n", avctx->extradata_size);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
81 return -1;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
82 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
83 memset(c->oldDSCF, 0, sizeof(c->oldDSCF));
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
84 c->rnd = 0xDEADBEEF;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
85 dsputil_init(&c->dsp, avctx);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
86 c->dsp.bswap_buf(buf, avctx->extradata, 4);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
87 ff_mpa_synth_init(mpa_window);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
88 init_get_bits(&gb, buf, 128);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
89
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
90 c->IS = get_bits1(&gb);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
91 c->MSS = get_bits1(&gb);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
92 c->bands = get_bits(&gb, 6);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
93 if(c->bands >= BANDS){
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
94 av_log(avctx, AV_LOG_ERROR, "Too many bands: %i\n", c->bands);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
95 return -1;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
96 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
97 skip_bits(&gb, 88);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
98 c->gapless = get_bits1(&gb);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
99 c->lastframelen = get_bits(&gb, 11);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
100 av_log(avctx, AV_LOG_DEBUG, "IS: %d, MSS: %d, TG: %d, LFL: %d, bands: %d\n",
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
101 c->IS, c->MSS, c->gapless, c->lastframelen, c->bands);
4330
0663caaf573c Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents: 4328
diff changeset
102 c->frames_to_skip = 0;
4328
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
103
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
104 if(vlc_inited) return 0;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
105 av_log(avctx, AV_LOG_DEBUG, "Initing VLC\n");
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
106 if(init_vlc(&scfi_vlc, MPC7_SCFI_BITS, MPC7_SCFI_SIZE,
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
107 &mpc7_scfi[1], 2, 1,
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
108 &mpc7_scfi[0], 2, 1, INIT_VLC_USE_STATIC)){
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
109 av_log(avctx, AV_LOG_ERROR, "Cannot init SCFI VLC\n");
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
110 return -1;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
111 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
112 if(init_vlc(&dscf_vlc, MPC7_DSCF_BITS, MPC7_DSCF_SIZE,
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
113 &mpc7_dscf[1], 2, 1,
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
114 &mpc7_dscf[0], 2, 1, INIT_VLC_USE_STATIC)){
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
115 av_log(avctx, AV_LOG_ERROR, "Cannot init DSCF VLC\n");
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
116 return -1;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
117 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
118 if(init_vlc(&hdr_vlc, MPC7_HDR_BITS, MPC7_HDR_SIZE,
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
119 &mpc7_hdr[1], 2, 1,
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
120 &mpc7_hdr[0], 2, 1, INIT_VLC_USE_STATIC)){
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
121 av_log(avctx, AV_LOG_ERROR, "Cannot init HDR VLC\n");
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
122 return -1;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
123 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
124 for(i = 0; i < MPC7_QUANT_VLC_TABLES; i++){
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
125 for(j = 0; j < 2; j++){
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
126 if(init_vlc(&quant_vlc[i][j], 9, mpc7_quant_vlc_sizes[i],
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
127 &mpc7_quant_vlc[i][j][1], 4, 2,
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
128 &mpc7_quant_vlc[i][j][0], 4, 2, INIT_VLC_USE_STATIC)){
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
129 av_log(avctx, AV_LOG_ERROR, "Cannot init QUANT VLC %i,%i\n",i,j);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
130 return -1;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
131 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
132 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
133 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
134 vlc_inited = 1;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
135 return 0;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
136 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
137
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
138 // XXX replace with something better
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
139 static int av_always_inline mpc_rnd(MPCContext *c)
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
140 {
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
141 c->rnd = c->rnd * 27 + 17;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
142 return c->rnd;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
143 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
144
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
145 /**
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
146 * Process decoded Musepack data and produce PCM
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
147 * @todo make it available for MPC8 and MPC6
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
148 */
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
149 static void mpc_synth(MPCContext *c, int16_t *out)
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
150 {
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
151 int dither_state = 0;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
152 int i, ch;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
153 OUT_INT samples[MPA_MAX_CHANNELS * MPA_FRAME_SIZE], *samples_ptr;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
154
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
155 for(ch = 0; ch < 2; ch++){
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
156 samples_ptr = samples + ch;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
157 for(i = 0; i < SAMPLES_PER_BAND; i++) {
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
158 ff_mpa_synth_filter(c->synth_buf[ch], &(c->synth_buf_offset[ch]),
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
159 mpa_window, &dither_state,
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
160 samples_ptr, 2,
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
161 c->sb_samples[ch][i]);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
162 samples_ptr += 64;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
163 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
164 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
165 for(i = 0; i < MPC_FRAME_SIZE*2; i++)
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
166 *out++=samples[i];
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
167 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
168
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
169 /**
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
170 * Fill samples for given subband
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
171 */
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
172 static void inline idx_to_quant(MPCContext *c, GetBitContext *gb, int idx, int *dst)
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
173 {
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
174 int i, i1, t;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
175 switch(idx){
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
176 case -1:
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
177 for(i = 0; i < SAMPLES_PER_BAND; i++){
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
178 t = mpc_rnd(c);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
179 *dst++ = ((t>>24)& 0xFF) + ((t>>16) & 0xFF) + ((t>>8) & 0xFF) + (t & 0xFF) - 510;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
180 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
181 case 1:
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
182 i1 = get_bits1(gb);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
183 for(i = 0; i < SAMPLES_PER_BAND/3; i++){
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
184 t = get_vlc2(gb, quant_vlc[0][i1].table, 9, 2);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
185 *dst++ = mpc_idx30[t];
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
186 *dst++ = mpc_idx31[t];
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
187 *dst++ = mpc_idx32[t];
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
188 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
189 break;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
190 case 2:
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
191 i1 = get_bits1(gb);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
192 for(i = 0; i < SAMPLES_PER_BAND/2; i++){
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
193 t = get_vlc2(gb, quant_vlc[1][i1].table, 9, 2);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
194 *dst++ = mpc_idx50[t];
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
195 *dst++ = mpc_idx51[t];
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
196 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
197 break;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
198 case 3: case 4: case 5: case 6: case 7:
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
199 i1 = get_bits1(gb);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
200 for(i = 0; i < SAMPLES_PER_BAND; i++)
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
201 *dst++ = get_vlc2(gb, quant_vlc[idx-1][i1].table, 9, 2) - mpc7_quant_vlc_off[idx-1];
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
202 break;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
203 case 8: case 9: case 10: case 11: case 12:
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
204 case 13: case 14: case 15: case 16: case 17:
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
205 t = (1 << (idx - 2)) - 1;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
206 for(i = 0; i < SAMPLES_PER_BAND; i++)
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
207 *dst++ = get_bits(gb, idx - 1) - t;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
208 break;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
209 default: // case 0 and -2..-17
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
210 return;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
211 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
212 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
213
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
214 static int mpc7_decode_frame(AVCodecContext * avctx,
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
215 void *data, int *data_size,
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
216 uint8_t * buf, int buf_size)
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
217 {
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
218 MPCContext *c = avctx->priv_data;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
219 GetBitContext gb;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
220 uint8_t *bits;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
221 int i, j, ch, t;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
222 int mb = -1;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
223 Band bands[BANDS];
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
224 int Q[2][MPC_FRAME_SIZE];
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
225 int off;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
226 float mul;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
227 int bits_used, bits_avail;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
228
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
229 memset(bands, 0, sizeof(bands));
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
230 if(buf_size <= 4){
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
231 av_log(avctx, AV_LOG_ERROR, "Too small buffer passed (%i bytes)\n", buf_size);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
232 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
233
4347
a188a94e1b61 Buffer for get_bits must be padded because readers may overread.
reimar
parents: 4330
diff changeset
234 bits = av_malloc(((buf_size - 1) & ~3) + FF_INPUT_BUFFER_PADDING_SIZE);
4328
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
235 c->dsp.bswap_buf(bits, buf + 4, (buf_size - 4) >> 2);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
236 init_get_bits(&gb, bits, (buf_size - 4)* 8);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
237 skip_bits(&gb, buf[0]);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
238
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
239 /* read subband indexes */
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
240 for(i = 0; i <= c->bands; i++){
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
241 for(ch = 0; ch < 2; ch++){
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
242 if(i) t = get_vlc2(&gb, hdr_vlc.table, MPC7_HDR_BITS, 1) - 5;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
243 if(!i || (t == 4)) bands[i].res[ch] = get_bits(&gb, 4);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
244 else bands[i].res[ch] = bands[i-1].res[ch] + t;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
245 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
246
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
247 if(bands[i].res[0] || bands[i].res[1]){
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
248 mb = i;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
249 if(c->MSS) bands[i].msf = get_bits1(&gb);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
250 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
251 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
252 /* get scale indexes coding method */
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
253 for(i = 0; i <= mb; i++)
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
254 for(ch = 0; ch < 2; ch++)
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
255 if(bands[i].res[ch]) bands[i].scfi[ch] = get_vlc2(&gb, scfi_vlc.table, MPC7_SCFI_BITS, 1);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
256 /* get scale indexes */
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
257 for(i = 0; i <= mb; i++){
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
258 for(ch = 0; ch < 2; ch++){
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
259 if(bands[i].res[ch]){
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
260 bands[i].scf_idx[ch][2] = c->oldDSCF[ch][i];
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
261 t = get_vlc2(&gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
262 bands[i].scf_idx[ch][0] = (t == 8) ? get_bits(&gb, 6) : (bands[i].scf_idx[ch][2] + t);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
263 switch(bands[i].scfi[ch]){
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
264 case 0:
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
265 t = get_vlc2(&gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
266 bands[i].scf_idx[ch][1] = (t == 8) ? get_bits(&gb, 6) : (bands[i].scf_idx[ch][0] + t);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
267 t = get_vlc2(&gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
268 bands[i].scf_idx[ch][2] = (t == 8) ? get_bits(&gb, 6) : (bands[i].scf_idx[ch][1] + t);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
269 break;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
270 case 1:
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
271 t = get_vlc2(&gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
272 bands[i].scf_idx[ch][1] = (t == 8) ? get_bits(&gb, 6) : (bands[i].scf_idx[ch][0] + t);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
273 bands[i].scf_idx[ch][2] = bands[i].scf_idx[ch][1];
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
274 break;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
275 case 2:
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
276 bands[i].scf_idx[ch][1] = bands[i].scf_idx[ch][0];
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
277 t = get_vlc2(&gb, dscf_vlc.table, MPC7_DSCF_BITS, 1) - 7;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
278 bands[i].scf_idx[ch][2] = (t == 8) ? get_bits(&gb, 6) : (bands[i].scf_idx[ch][1] + t);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
279 break;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
280 case 3:
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
281 bands[i].scf_idx[ch][2] = bands[i].scf_idx[ch][1] = bands[i].scf_idx[ch][0];
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
282 break;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
283 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
284 c->oldDSCF[ch][i] = bands[i].scf_idx[ch][2];
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
285 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
286 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
287 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
288 /* get quantizers */
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
289 memset(Q, 0, sizeof(Q));
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
290 off = 0;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
291 for(i = 0; i < BANDS; i++, off += SAMPLES_PER_BAND)
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
292 for(ch = 0; ch < 2; ch++)
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
293 idx_to_quant(c, &gb, bands[i].res[ch], Q[ch] + off);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
294 /* dequantize */
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
295 memset(c->sb_samples, 0, sizeof(c->sb_samples));
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
296 off = 0;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
297 for(i = 0; i <= mb; i++, off += SAMPLES_PER_BAND){
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
298 for(ch = 0; ch < 2; ch++){
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
299 if(bands[i].res[ch]){
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
300 j = 0;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
301 mul = mpc_CC[bands[i].res[ch]] * mpc7_SCF[bands[i].scf_idx[ch][0]];
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
302 for(; j < 12; j++)
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
303 c->sb_samples[ch][j][i] = mul * Q[ch][j + off];
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
304 mul = mpc_CC[bands[i].res[ch]] * mpc7_SCF[bands[i].scf_idx[ch][1]];
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
305 for(; j < 24; j++)
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
306 c->sb_samples[ch][j][i] = mul * Q[ch][j + off];
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
307 mul = mpc_CC[bands[i].res[ch]] * mpc7_SCF[bands[i].scf_idx[ch][2]];
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
308 for(; j < 36; j++)
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
309 c->sb_samples[ch][j][i] = mul * Q[ch][j + off];
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
310 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
311 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
312 if(bands[i].msf){
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
313 int t1, t2;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
314 for(j = 0; j < SAMPLES_PER_BAND; j++){
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
315 t1 = c->sb_samples[0][j][i];
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
316 t2 = c->sb_samples[1][j][i];
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
317 c->sb_samples[0][j][i] = t1 + t2;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
318 c->sb_samples[1][j][i] = t1 - t2;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
319 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
320 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
321 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
322
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
323 mpc_synth(c, data);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
324
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
325 av_free(bits);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
326
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
327 bits_used = get_bits_count(&gb);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
328 bits_avail = (buf_size - 4) * 8;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
329 if(!buf[1] && ((bits_avail < bits_used) || (bits_used + 32 <= bits_avail))){
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
330 av_log(NULL,0, "Error decoding frame: used %i of %i bits\n", bits_used, bits_avail);
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
331 return -1;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
332 }
4330
0663caaf573c Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents: 4328
diff changeset
333 if(c->frames_to_skip){
0663caaf573c Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents: 4328
diff changeset
334 c->frames_to_skip--;
0663caaf573c Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents: 4328
diff changeset
335 *data_size = 0;
0663caaf573c Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents: 4328
diff changeset
336 return buf_size;
0663caaf573c Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents: 4328
diff changeset
337 }
4328
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
338 *data_size = (buf[1] ? c->lastframelen : MPC_FRAME_SIZE) * 4;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
339
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
340 return buf_size;
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
341 }
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
342
4330
0663caaf573c Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents: 4328
diff changeset
343 static void mpc7_decode_flush(AVCodecContext *avctx)
0663caaf573c Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents: 4328
diff changeset
344 {
0663caaf573c Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents: 4328
diff changeset
345 MPCContext *c = avctx->priv_data;
0663caaf573c Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents: 4328
diff changeset
346
0663caaf573c Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents: 4328
diff changeset
347 memset(c->oldDSCF, 0, sizeof(c->oldDSCF));
0663caaf573c Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents: 4328
diff changeset
348 c->frames_to_skip = 32;
0663caaf573c Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents: 4328
diff changeset
349 }
4328
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
350
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
351 AVCodec mpc7_decoder = {
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
352 "mpc sv7",
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
353 CODEC_TYPE_AUDIO,
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
354 CODEC_ID_MUSEPACK7,
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
355 sizeof(MPCContext),
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
356 mpc7_decode_init,
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
357 NULL,
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
358 NULL,
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
359 mpc7_decode_frame,
4330
0663caaf573c Decode previous 32 frames to avoid seeking artifacts in MPC
kostya
parents: 4328
diff changeset
360 .flush = mpc7_decode_flush,
4328
a0cfbd6679c0 Musepack SV7 decoding support
kostya
parents:
diff changeset
361 };