annotate mpc8.c @ 5883:c64d94561b19 libavcodec

Fix deblocking filter for field pictures by properly looking for first row in bottom fields and preventing the use of "fast" deblocking for such.
author heydowns
date Wed, 07 Nov 2007 23:35:48 +0000
parents ad73103623ab
children dfdff1ca78a7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
5879
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
1 /*
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
2 * Musepack SV8 decoder
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
3 * Copyright (c) 2007 Konstantin Shishkov
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
4 *
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
5 * This file is part of FFmpeg.
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
6 *
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
9 * License as published by the Free Software Foundation; either
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
11 *
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
15 * Lesser General Public License for more details.
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
16 *
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
20 */
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
21
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
22 /**
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
23 * @file mpc8.c Musepack SV8 decoder
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
24 * MPEG Audio Layer 1/2 -like codec with frames of 1152 samples
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
25 * divided into 32 subbands.
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
26 */
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
27
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
28 #include "avcodec.h"
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
29 #include "bitstream.h"
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
30 #include "dsputil.h"
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
31 #include "random.h"
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
32
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
33 #ifdef CONFIG_MPEGAUDIO_HP
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
34 #define USE_HIGHPRECISION
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
35 #endif
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
36 #include "mpegaudio.h"
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
37
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
38 #include "mpc.h"
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
39 #include "mpcdata.h"
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
40 #include "mpc8data.h"
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
41 #include "mpc8huff.h"
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
42
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
43 static VLC band_vlc, scfi_vlc[2], dscf_vlc[2], res_vlc[2];
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
44 static VLC q1_vlc, q2_vlc[2], q3_vlc[2], quant_vlc[4][2], q9up_vlc;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
45
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
46 static const int q3_offsets[2] = { MPC8_Q3_OFFSET, MPC8_Q4_OFFSET };
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
47 static const int quant_offsets[6] = { MPC8_Q5_OFFSET, MPC8_Q6_OFFSET, MPC8_Q7_OFFSET, MPC8_Q8_OFFSET };
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
48
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
49 static inline int mpc8_dec_base(GetBitContext *gb, int k, int n)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
50 {
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
51 int code = get_bits(gb, mpc8_cnk_len[k-1][n-1] - 1);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
52
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
53 if (code >= mpc8_cnk_lost[k-1][n-1])
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
54 code = ((code << 1) | get_bits1(gb)) - mpc8_cnk_lost[k-1][n-1];
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
55
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
56 return code;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
57 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
58
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
59 static inline int mpc8_dec_enum(GetBitContext *gb, int k, int n)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
60 {
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
61 int bits = 0;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
62 const uint32_t * C = mpc8_cnk[k-1];
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
63 int code = mpc8_dec_base(gb, k, n);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
64
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
65 do {
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
66 n--;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
67 if (code >= C[n]) {
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
68 bits |= 1 << n;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
69 code -= C[n];
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
70 C -= 32;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
71 k--;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
72 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
73 } while(k > 0);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
74
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
75 return bits;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
76 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
77
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
78 static inline int mpc8_get_mod_golomb(GetBitContext *gb, int m)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
79 {
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
80 if(mpc8_cnk_len[0][m] < 1) return 0;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
81 return mpc8_dec_base(gb, 1, m+1);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
82 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
83
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
84 static int mpc8_get_mask(GetBitContext *gb, int size, int t)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
85 {
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
86 int mask = 0;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
87
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
88 if(t && t != size)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
89 mask = mpc8_dec_enum(gb, FFMIN(t, size - t), size);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
90 if((t << 1) > size) mask = ~mask;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
91
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
92 return mask;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
93 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
94
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
95 static int mpc8_decode_init(AVCodecContext * avctx)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
96 {
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
97 int i;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
98 MPCContext *c = avctx->priv_data;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
99 GetBitContext gb;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
100 static int vlc_inited = 0;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
101
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
102 if(avctx->extradata_size < 2){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
103 av_log(avctx, AV_LOG_ERROR, "Too small extradata size (%i)!\n", avctx->extradata_size);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
104 return -1;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
105 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
106 memset(c->oldDSCF, 0, sizeof(c->oldDSCF));
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
107 av_init_random(0xDEADBEEF, &c->rnd);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
108 dsputil_init(&c->dsp, avctx);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
109
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
110 ff_mpc_init();
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
111
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
112 init_get_bits(&gb, avctx->extradata, 16);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
113
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
114 skip_bits(&gb, 3);//sample rate
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
115 c->maxbands = get_bits(&gb, 5) + 1;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
116 skip_bits(&gb, 4);//channels
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
117 c->MSS = get_bits1(&gb);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
118 c->frames = 1 << (get_bits(&gb, 3) * 2);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
119
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
120 if(vlc_inited) return 0;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
121 av_log(avctx, AV_LOG_DEBUG, "Initing VLC\n");
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
122
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
123 init_vlc(&band_vlc, MPC8_BANDS_BITS, MPC8_BANDS_SIZE,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
124 mpc8_bands_bits, 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
125 mpc8_bands_codes, 1, 1, INIT_VLC_USE_STATIC);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
126
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
127 init_vlc(&q1_vlc, MPC8_Q1_BITS, MPC8_Q1_SIZE,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
128 mpc8_q1_bits, 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
129 mpc8_q1_codes, 1, 1, INIT_VLC_USE_STATIC);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
130 init_vlc(&q9up_vlc, MPC8_Q9UP_BITS, MPC8_Q9UP_SIZE,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
131 mpc8_q9up_bits, 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
132 mpc8_q9up_codes, 1, 1, INIT_VLC_USE_STATIC);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
133
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
134 init_vlc(&scfi_vlc[0], MPC8_SCFI0_BITS, MPC8_SCFI0_SIZE,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
135 mpc8_scfi0_bits, 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
136 mpc8_scfi0_codes, 1, 1, INIT_VLC_USE_STATIC);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
137 init_vlc(&scfi_vlc[1], MPC8_SCFI1_BITS, MPC8_SCFI1_SIZE,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
138 mpc8_scfi1_bits, 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
139 mpc8_scfi1_codes, 1, 1, INIT_VLC_USE_STATIC);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
140
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
141 init_vlc(&dscf_vlc[0], MPC8_DSCF0_BITS, MPC8_DSCF0_SIZE,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
142 mpc8_dscf0_bits, 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
143 mpc8_dscf0_codes, 1, 1, INIT_VLC_USE_STATIC);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
144 init_vlc(&dscf_vlc[1], MPC8_DSCF1_BITS, MPC8_DSCF1_SIZE,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
145 mpc8_dscf1_bits, 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
146 mpc8_dscf1_codes, 1, 1, INIT_VLC_USE_STATIC);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
147
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
148 init_vlc_sparse(&q3_vlc[0], MPC8_Q3_BITS, MPC8_Q3_SIZE,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
149 mpc8_q3_bits, 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
150 mpc8_q3_codes, 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
151 mpc8_q3_syms, 1, 1, INIT_VLC_USE_STATIC);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
152 init_vlc_sparse(&q3_vlc[1], MPC8_Q4_BITS, MPC8_Q4_SIZE,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
153 mpc8_q4_bits, 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
154 mpc8_q4_codes, 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
155 mpc8_q4_syms, 1, 1, INIT_VLC_USE_STATIC);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
156
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
157 for(i = 0; i < 2; i++){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
158 init_vlc(&res_vlc[i], MPC8_RES_BITS, MPC8_RES_SIZE,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
159 &mpc8_res_bits[i], 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
160 &mpc8_res_codes[i], 1, 1, INIT_VLC_USE_STATIC);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
161
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
162 init_vlc(&q2_vlc[i], MPC8_Q2_BITS, MPC8_Q2_SIZE,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
163 &mpc8_q2_bits[i], 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
164 &mpc8_q2_codes[i], 1, 1, INIT_VLC_USE_STATIC);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
165
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
166 init_vlc(&quant_vlc[0][i], MPC8_Q5_BITS, MPC8_Q5_SIZE,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
167 &mpc8_q5_bits[i], 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
168 &mpc8_q5_codes[i], 1, 1, INIT_VLC_USE_STATIC);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
169 init_vlc(&quant_vlc[1][i], MPC8_Q6_BITS, MPC8_Q6_SIZE,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
170 &mpc8_q6_bits[i], 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
171 &mpc8_q6_codes[i], 1, 1, INIT_VLC_USE_STATIC);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
172 init_vlc(&quant_vlc[2][i], MPC8_Q7_BITS, MPC8_Q7_SIZE,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
173 &mpc8_q7_bits[i], 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
174 &mpc8_q7_codes[i], 1, 1, INIT_VLC_USE_STATIC);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
175 init_vlc(&quant_vlc[3][i], MPC8_Q8_BITS, MPC8_Q8_SIZE,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
176 &mpc8_q8_bits[i], 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
177 &mpc8_q8_codes[i], 1, 1, INIT_VLC_USE_STATIC);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
178 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
179 vlc_inited = 1;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
180 return 0;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
181 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
182
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
183 static int mpc8_decode_frame(AVCodecContext * avctx,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
184 void *data, int *data_size,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
185 uint8_t * buf, int buf_size)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
186 {
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
187 MPCContext *c = avctx->priv_data;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
188 GetBitContext gb2, *gb = &gb2;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
189 int i, j, k, ch, cnt, res, t;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
190 Band *bands = c->bands;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
191 int off;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
192 int maxband, keyframe;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
193 int last[2];
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
194
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
195 keyframe = c->cur_frame == 0;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
196
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
197 if(keyframe){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
198 memset(c->Q, 0, sizeof(c->Q));
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
199 c->last_bits_used = 0;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
200 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
201 init_get_bits(gb, buf, buf_size * 8);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
202 skip_bits(gb, c->last_bits_used & 7);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
203
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
204 if(keyframe)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
205 maxband = mpc8_get_mod_golomb(gb, c->maxbands + 1);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
206 else{
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
207 maxband = c->last_max_band + get_vlc2(gb, band_vlc.table, MPC8_BANDS_BITS, 2);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
208 if(maxband > 32) maxband -= 33;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
209 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
210 c->last_max_band = maxband;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
211
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
212 /* read subband indexes */
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
213 if(maxband){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
214 last[0] = last[1] = 0;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
215 for(i = maxband - 1; i >= 0; i--){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
216 for(ch = 0; ch < 2; ch++){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
217 last[ch] = get_vlc2(gb, res_vlc[last[ch] > 2].table, MPC8_RES_BITS, 2) + last[ch];
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
218 if(last[ch] > 15) last[ch] -= 17;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
219 bands[i].res[ch] = last[ch];
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
220 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
221 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
222 if(c->MSS){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
223 int mask;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
224
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
225 cnt = 0;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
226 for(i = 0; i < maxband; i++)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
227 if(bands[i].res[0] || bands[i].res[1])
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
228 cnt++;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
229 t = mpc8_get_mod_golomb(gb, cnt);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
230 mask = mpc8_get_mask(gb, cnt, t);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
231 for(i = maxband - 1; i >= 0; i--)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
232 if(bands[i].res[0] || bands[i].res[1]){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
233 bands[i].msf = mask & 1;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
234 mask >>= 1;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
235 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
236 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
237 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
238 for(i = maxband; i < c->maxbands; i++)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
239 bands[i].res[0] = bands[i].res[1] = 0;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
240
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
241 if(keyframe){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
242 for(i = 0; i < 32; i++)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
243 c->oldDSCF[0][i] = c->oldDSCF[1][i] = 1;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
244 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
245
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
246 for(i = 0; i < maxband; i++){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
247 if(bands[i].res[0] || bands[i].res[1]){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
248 cnt = !!bands[i].res[0] + !!bands[i].res[1] - 1;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
249 if(cnt >= 0){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
250 t = get_vlc2(gb, scfi_vlc[cnt].table, scfi_vlc[cnt].bits, 1);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
251 if(bands[i].res[0]) bands[i].scfi[0] = t >> (2 * cnt);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
252 if(bands[i].res[1]) bands[i].scfi[1] = t & 3;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
253 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
254 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
255 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
256
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
257 for(i = 0; i < maxband; i++){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
258 for(ch = 0; ch < 2; ch++){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
259 if(!bands[i].res[ch]) continue;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
260
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
261 if(c->oldDSCF[ch][i]){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
262 bands[i].scf_idx[ch][0] = get_bits(gb, 7) - 6;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
263 c->oldDSCF[ch][i] = 0;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
264 }else{
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
265 t = get_vlc2(gb, dscf_vlc[1].table, MPC8_DSCF1_BITS, 2);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
266 if(t == 64)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
267 t += get_bits(gb, 6);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
268 bands[i].scf_idx[ch][0] = ((bands[i].scf_idx[ch][2] + t - 25) & 0x7F) - 6;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
269 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
270 for(j = 0; j < 2; j++){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
271 if((bands[i].scfi[ch] << j) & 2)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
272 bands[i].scf_idx[ch][j + 1] = bands[i].scf_idx[ch][j];
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
273 else{
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
274 t = get_vlc2(gb, dscf_vlc[0].table, MPC8_DSCF0_BITS, 2);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
275 if(t == 31)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
276 t = 64 + get_bits(gb, 6);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
277 bands[i].scf_idx[ch][j + 1] = ((bands[i].scf_idx[ch][j] + t - 25) & 0x7F) - 6;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
278 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
279 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
280 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
281 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
282
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
283 for(i = 0, off = 0; i < maxband; i++, off += SAMPLES_PER_BAND){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
284 for(ch = 0; ch < 2; ch++){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
285 res = bands[i].res[ch];
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
286 switch(res){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
287 case -1:
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
288 for(j = 0; j < SAMPLES_PER_BAND; j++)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
289 c->Q[ch][off + j] = (av_random(&c->rnd) & 0x3FC) - 510;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
290 break;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
291 case 0:
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
292 break;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
293 case 1:
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
294 for(j = 0; j < SAMPLES_PER_BAND; j += SAMPLES_PER_BAND / 2){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
295 cnt = get_vlc2(gb, q1_vlc.table, MPC8_Q1_BITS, 2);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
296 t = mpc8_get_mask(gb, 18, cnt);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
297 for(k = 0; k < SAMPLES_PER_BAND / 2; k++, t <<= 1)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
298 c->Q[ch][off + j + k] = (t & 0x20000) ? (get_bits1(gb) << 1) - 1 : 0;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
299 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
300 break;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
301 case 2:
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
302 cnt = 6;//2*mpc8_thres[res]
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
303 for(j = 0; j < SAMPLES_PER_BAND; j += 3){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
304 t = get_vlc2(gb, q2_vlc[cnt > 3].table, MPC8_Q2_BITS, 2);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
305 c->Q[ch][off + j + 0] = mpc8_idx50[t];
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
306 c->Q[ch][off + j + 1] = mpc8_idx51[t];
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
307 c->Q[ch][off + j + 2] = mpc8_idx52[t];
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
308 cnt = (cnt >> 1) + mpc8_huffq2[t];
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
309 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
310 break;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
311 case 3:
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
312 case 4:
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
313 for(j = 0; j < SAMPLES_PER_BAND; j += 2){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
314 t = get_vlc2(gb, q3_vlc[res - 3].table, MPC8_Q3_BITS, 2) + q3_offsets[res - 3];
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
315 c->Q[ch][off + j + 1] = t >> 4;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
316 c->Q[ch][off + j + 0] = (t & 8) ? (t & 0xF) - 16 : (t & 0xF);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
317 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
318 break;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
319 case 5:
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
320 case 6:
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
321 case 7:
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
322 case 8:
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
323 cnt = 2 * mpc8_thres[res];
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
324 for(j = 0; j < SAMPLES_PER_BAND; j++){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
325 t = get_vlc2(gb, quant_vlc[res - 5][cnt > mpc8_thres[res]].table, quant_vlc[res - 5][cnt > mpc8_thres[res]].bits, 2) + quant_offsets[res - 5];
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
326 c->Q[ch][off + j] = t;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
327 cnt = (cnt >> 1) + FFABS(c->Q[ch][off + j]);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
328 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
329 break;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
330 default:
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
331 for(j = 0; j < SAMPLES_PER_BAND; j++){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
332 c->Q[ch][off + j] = get_vlc2(gb, q9up_vlc.table, MPC8_Q9UP_BITS, 2);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
333 if(res != 9){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
334 c->Q[ch][off + j] <<= res - 9;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
335 c->Q[ch][off + j] |= get_bits(gb, res - 9);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
336 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
337 c->Q[ch][off + j] -= (1 << (res - 2)) - 1;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
338 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
339 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
340 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
341 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
342
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
343 ff_mpc_dequantize_and_synth(c, maxband, data);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
344
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
345 c->cur_frame++;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
346
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
347 c->last_bits_used = get_bits_count(gb);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
348 if(c->cur_frame >= c->frames)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
349 c->cur_frame = 0;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
350 *data_size = MPC_FRAME_SIZE * 4;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
351
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
352 return c->cur_frame ? c->last_bits_used >> 3 : buf_size;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
353 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
354
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
355 AVCodec mpc8_decoder = {
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
356 "mpc sv8",
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
357 CODEC_TYPE_AUDIO,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
358 CODEC_ID_MUSEPACK8,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
359 sizeof(MPCContext),
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
360 mpc8_decode_init,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
361 NULL,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
362 NULL,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
363 mpc8_decode_frame,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
364 };