annotate mpc8.c @ 8790:1045a26cb90d libavcodec

Fix crash when encoding using libschroedinger. Currently only pixel and half-pixel motion vector precisions are supported in libschroedinger. Setting the mv_precision field to 2 (i.e. quarter pixel) causes a crash in the libschroedinger encoder calls. By not setting this parameter, we fall back to the default value used in libschroedinger. patch by Anuradha Suraparaju, anuradha rd.bbc.co uk
author diego
date Tue, 10 Feb 2009 14:27:16 +0000
parents e9d9d946f213
children 4e91d96dd045
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 /**
8718
e9d9d946f213 Use full internal pathname in doxygen @file directives.
diego
parents: 8628
diff changeset
23 * @file libavcodec/mpc8.c Musepack SV8 decoder
5879
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
6763
f7cbb7733146 Use full path for #includes from another directory.
diego
parents: 6716
diff changeset
28 #include "libavutil/random.h"
5879
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
29 #include "avcodec.h"
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
30 #include "bitstream.h"
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
31 #include "dsputil.h"
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
32 #include "mpegaudio.h"
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
33
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
34 #include "mpc.h"
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
35 #include "mpcdata.h"
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
36 #include "mpc8data.h"
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
37 #include "mpc8huff.h"
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
38
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
39 static VLC band_vlc, scfi_vlc[2], dscf_vlc[2], res_vlc[2];
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
40 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
41
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
42 static const int q3_offsets[2] = { MPC8_Q3_OFFSET, MPC8_Q4_OFFSET };
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
43 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
44
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
45 static inline int mpc8_dec_base(GetBitContext *gb, int k, int n)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
46 {
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
47 int code = get_bits(gb, mpc8_cnk_len[k-1][n-1] - 1);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
48
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
49 if (code >= mpc8_cnk_lost[k-1][n-1])
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
50 code = ((code << 1) | get_bits1(gb)) - mpc8_cnk_lost[k-1][n-1];
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
51
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
52 return code;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
53 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
54
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
55 static inline int mpc8_dec_enum(GetBitContext *gb, int k, int n)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
56 {
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
57 int bits = 0;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
58 const uint32_t * C = mpc8_cnk[k-1];
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
59 int code = mpc8_dec_base(gb, k, n);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
60
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
61 do {
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
62 n--;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
63 if (code >= C[n]) {
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
64 bits |= 1 << n;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
65 code -= C[n];
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
66 C -= 32;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
67 k--;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
68 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
69 } while(k > 0);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
70
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
71 return bits;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
72 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
73
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
74 static inline int mpc8_get_mod_golomb(GetBitContext *gb, int m)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
75 {
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
76 if(mpc8_cnk_len[0][m] < 1) return 0;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
77 return mpc8_dec_base(gb, 1, m+1);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
78 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
79
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
80 static int mpc8_get_mask(GetBitContext *gb, int size, int t)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
81 {
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
82 int mask = 0;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
83
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
84 if(t && t != size)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
85 mask = mpc8_dec_enum(gb, FFMIN(t, size - t), size);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
86 if((t << 1) > size) mask = ~mask;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
87
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
88 return mask;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
89 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
90
6517
48759bfbd073 Apply 'cold' attribute to init/uninit functions in libavcodec
zuxy
parents: 6350
diff changeset
91 static av_cold int mpc8_decode_init(AVCodecContext * avctx)
5879
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
92 {
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
93 int i;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
94 MPCContext *c = avctx->priv_data;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
95 GetBitContext gb;
6350
8e63d869a904 typo fix: inited --> initialized
diego
parents: 6218
diff changeset
96 static int vlc_initialized = 0;
5879
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
97
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
98 if(avctx->extradata_size < 2){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
99 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
100 return -1;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
101 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
102 memset(c->oldDSCF, 0, sizeof(c->oldDSCF));
8628
e49a2e1f0020 Replace calls to the deprecated function av_init_random() with
stefano
parents: 8592
diff changeset
103 av_random_init(&c->rnd, 0xDEADBEEF);
5879
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
104 dsputil_init(&c->dsp, avctx);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
105
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
106 ff_mpc_init();
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
107
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
108 init_get_bits(&gb, avctx->extradata, 16);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
109
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
110 skip_bits(&gb, 3);//sample rate
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
111 c->maxbands = get_bits(&gb, 5) + 1;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
112 skip_bits(&gb, 4);//channels
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
113 c->MSS = get_bits1(&gb);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
114 c->frames = 1 << (get_bits(&gb, 3) * 2);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
115
6350
8e63d869a904 typo fix: inited --> initialized
diego
parents: 6218
diff changeset
116 if(vlc_initialized) return 0;
5879
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
117 av_log(avctx, AV_LOG_DEBUG, "Initing VLC\n");
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
118
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
119 init_vlc(&band_vlc, MPC8_BANDS_BITS, MPC8_BANDS_SIZE,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
120 mpc8_bands_bits, 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
121 mpc8_bands_codes, 1, 1, INIT_VLC_USE_STATIC);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
122
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
123 init_vlc(&q1_vlc, MPC8_Q1_BITS, MPC8_Q1_SIZE,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
124 mpc8_q1_bits, 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
125 mpc8_q1_codes, 1, 1, INIT_VLC_USE_STATIC);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
126 init_vlc(&q9up_vlc, MPC8_Q9UP_BITS, MPC8_Q9UP_SIZE,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
127 mpc8_q9up_bits, 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
128 mpc8_q9up_codes, 1, 1, INIT_VLC_USE_STATIC);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
129
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
130 init_vlc(&scfi_vlc[0], MPC8_SCFI0_BITS, MPC8_SCFI0_SIZE,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
131 mpc8_scfi0_bits, 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
132 mpc8_scfi0_codes, 1, 1, INIT_VLC_USE_STATIC);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
133 init_vlc(&scfi_vlc[1], MPC8_SCFI1_BITS, MPC8_SCFI1_SIZE,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
134 mpc8_scfi1_bits, 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
135 mpc8_scfi1_codes, 1, 1, INIT_VLC_USE_STATIC);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
136
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
137 init_vlc(&dscf_vlc[0], MPC8_DSCF0_BITS, MPC8_DSCF0_SIZE,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
138 mpc8_dscf0_bits, 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
139 mpc8_dscf0_codes, 1, 1, INIT_VLC_USE_STATIC);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
140 init_vlc(&dscf_vlc[1], MPC8_DSCF1_BITS, MPC8_DSCF1_SIZE,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
141 mpc8_dscf1_bits, 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
142 mpc8_dscf1_codes, 1, 1, INIT_VLC_USE_STATIC);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
143
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
144 init_vlc_sparse(&q3_vlc[0], MPC8_Q3_BITS, MPC8_Q3_SIZE,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
145 mpc8_q3_bits, 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
146 mpc8_q3_codes, 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
147 mpc8_q3_syms, 1, 1, INIT_VLC_USE_STATIC);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
148 init_vlc_sparse(&q3_vlc[1], MPC8_Q4_BITS, MPC8_Q4_SIZE,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
149 mpc8_q4_bits, 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
150 mpc8_q4_codes, 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
151 mpc8_q4_syms, 1, 1, INIT_VLC_USE_STATIC);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
152
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
153 for(i = 0; i < 2; i++){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
154 init_vlc(&res_vlc[i], MPC8_RES_BITS, MPC8_RES_SIZE,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
155 &mpc8_res_bits[i], 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
156 &mpc8_res_codes[i], 1, 1, INIT_VLC_USE_STATIC);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
157
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
158 init_vlc(&q2_vlc[i], MPC8_Q2_BITS, MPC8_Q2_SIZE,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
159 &mpc8_q2_bits[i], 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
160 &mpc8_q2_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(&quant_vlc[0][i], MPC8_Q5_BITS, MPC8_Q5_SIZE,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
163 &mpc8_q5_bits[i], 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
164 &mpc8_q5_codes[i], 1, 1, INIT_VLC_USE_STATIC);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
165 init_vlc(&quant_vlc[1][i], MPC8_Q6_BITS, MPC8_Q6_SIZE,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
166 &mpc8_q6_bits[i], 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
167 &mpc8_q6_codes[i], 1, 1, INIT_VLC_USE_STATIC);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
168 init_vlc(&quant_vlc[2][i], MPC8_Q7_BITS, MPC8_Q7_SIZE,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
169 &mpc8_q7_bits[i], 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
170 &mpc8_q7_codes[i], 1, 1, INIT_VLC_USE_STATIC);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
171 init_vlc(&quant_vlc[3][i], MPC8_Q8_BITS, MPC8_Q8_SIZE,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
172 &mpc8_q8_bits[i], 1, 1,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
173 &mpc8_q8_codes[i], 1, 1, INIT_VLC_USE_STATIC);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
174 }
6350
8e63d869a904 typo fix: inited --> initialized
diego
parents: 6218
diff changeset
175 vlc_initialized = 1;
7451
85ab7655ad4d Modify all codecs to report their supported input and output sample format(s).
pross
parents: 7040
diff changeset
176 avctx->sample_fmt = SAMPLE_FMT_S16;
8174
f11197441364 Add channel layout to several audio decoders I maintain
kostya
parents: 7451
diff changeset
177 avctx->channel_layout = (avctx->channels==2) ? CH_LAYOUT_STEREO : CH_LAYOUT_MONO;
5879
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
178 return 0;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
179 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
180
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
181 static int mpc8_decode_frame(AVCodecContext * avctx,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
182 void *data, int *data_size,
6218
michael
parents: 5879
diff changeset
183 const uint8_t * buf, int buf_size)
5879
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
184 {
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
185 MPCContext *c = avctx->priv_data;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
186 GetBitContext gb2, *gb = &gb2;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
187 int i, j, k, ch, cnt, res, t;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
188 Band *bands = c->bands;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
189 int off;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
190 int maxband, keyframe;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
191 int last[2];
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
192
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
193 keyframe = c->cur_frame == 0;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
194
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
195 if(keyframe){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
196 memset(c->Q, 0, sizeof(c->Q));
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
197 c->last_bits_used = 0;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
198 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
199 init_get_bits(gb, buf, buf_size * 8);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
200 skip_bits(gb, c->last_bits_used & 7);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
201
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
202 if(keyframe)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
203 maxband = mpc8_get_mod_golomb(gb, c->maxbands + 1);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
204 else{
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
205 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
206 if(maxband > 32) maxband -= 33;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
207 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
208 c->last_max_band = maxband;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
209
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
210 /* read subband indexes */
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
211 if(maxband){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
212 last[0] = last[1] = 0;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
213 for(i = maxband - 1; i >= 0; i--){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
214 for(ch = 0; ch < 2; ch++){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
215 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
216 if(last[ch] > 15) last[ch] -= 17;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
217 bands[i].res[ch] = last[ch];
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
218 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
219 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
220 if(c->MSS){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
221 int mask;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
222
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
223 cnt = 0;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
224 for(i = 0; i < maxband; i++)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
225 if(bands[i].res[0] || bands[i].res[1])
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
226 cnt++;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
227 t = mpc8_get_mod_golomb(gb, cnt);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
228 mask = mpc8_get_mask(gb, cnt, t);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
229 for(i = maxband - 1; i >= 0; i--)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
230 if(bands[i].res[0] || bands[i].res[1]){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
231 bands[i].msf = mask & 1;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
232 mask >>= 1;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
233 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
234 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
235 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
236 for(i = maxband; i < c->maxbands; i++)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
237 bands[i].res[0] = bands[i].res[1] = 0;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
238
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
239 if(keyframe){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
240 for(i = 0; i < 32; i++)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
241 c->oldDSCF[0][i] = c->oldDSCF[1][i] = 1;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
242 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
243
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
244 for(i = 0; i < maxband; i++){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
245 if(bands[i].res[0] || bands[i].res[1]){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
246 cnt = !!bands[i].res[0] + !!bands[i].res[1] - 1;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
247 if(cnt >= 0){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
248 t = get_vlc2(gb, scfi_vlc[cnt].table, scfi_vlc[cnt].bits, 1);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
249 if(bands[i].res[0]) bands[i].scfi[0] = t >> (2 * cnt);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
250 if(bands[i].res[1]) bands[i].scfi[1] = t & 3;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
251 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
252 }
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 for(i = 0; i < maxband; i++){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
256 for(ch = 0; ch < 2; ch++){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
257 if(!bands[i].res[ch]) continue;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
258
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
259 if(c->oldDSCF[ch][i]){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
260 bands[i].scf_idx[ch][0] = get_bits(gb, 7) - 6;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
261 c->oldDSCF[ch][i] = 0;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
262 }else{
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
263 t = get_vlc2(gb, dscf_vlc[1].table, MPC8_DSCF1_BITS, 2);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
264 if(t == 64)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
265 t += get_bits(gb, 6);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
266 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
267 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
268 for(j = 0; j < 2; j++){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
269 if((bands[i].scfi[ch] << j) & 2)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
270 bands[i].scf_idx[ch][j + 1] = bands[i].scf_idx[ch][j];
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
271 else{
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
272 t = get_vlc2(gb, dscf_vlc[0].table, MPC8_DSCF0_BITS, 2);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
273 if(t == 31)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
274 t = 64 + get_bits(gb, 6);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
275 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
276 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
277 }
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 for(i = 0, off = 0; i < maxband; i++, off += SAMPLES_PER_BAND){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
282 for(ch = 0; ch < 2; ch++){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
283 res = bands[i].res[ch];
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
284 switch(res){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
285 case -1:
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
286 for(j = 0; j < SAMPLES_PER_BAND; j++)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
287 c->Q[ch][off + j] = (av_random(&c->rnd) & 0x3FC) - 510;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
288 break;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
289 case 0:
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
290 break;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
291 case 1:
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
292 for(j = 0; j < SAMPLES_PER_BAND; j += SAMPLES_PER_BAND / 2){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
293 cnt = get_vlc2(gb, q1_vlc.table, MPC8_Q1_BITS, 2);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
294 t = mpc8_get_mask(gb, 18, cnt);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
295 for(k = 0; k < SAMPLES_PER_BAND / 2; k++, t <<= 1)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
296 c->Q[ch][off + j + k] = (t & 0x20000) ? (get_bits1(gb) << 1) - 1 : 0;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
297 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
298 break;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
299 case 2:
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
300 cnt = 6;//2*mpc8_thres[res]
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
301 for(j = 0; j < SAMPLES_PER_BAND; j += 3){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
302 t = get_vlc2(gb, q2_vlc[cnt > 3].table, MPC8_Q2_BITS, 2);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
303 c->Q[ch][off + j + 0] = mpc8_idx50[t];
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
304 c->Q[ch][off + j + 1] = mpc8_idx51[t];
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
305 c->Q[ch][off + j + 2] = mpc8_idx52[t];
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
306 cnt = (cnt >> 1) + mpc8_huffq2[t];
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
307 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
308 break;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
309 case 3:
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
310 case 4:
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
311 for(j = 0; j < SAMPLES_PER_BAND; j += 2){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
312 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
313 c->Q[ch][off + j + 1] = t >> 4;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
314 c->Q[ch][off + j + 0] = (t & 8) ? (t & 0xF) - 16 : (t & 0xF);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
315 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
316 break;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
317 case 5:
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
318 case 6:
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
319 case 7:
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
320 case 8:
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
321 cnt = 2 * mpc8_thres[res];
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
322 for(j = 0; j < SAMPLES_PER_BAND; j++){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
323 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
324 c->Q[ch][off + j] = t;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
325 cnt = (cnt >> 1) + FFABS(c->Q[ch][off + j]);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
326 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
327 break;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
328 default:
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
329 for(j = 0; j < SAMPLES_PER_BAND; j++){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
330 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
331 if(res != 9){
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
332 c->Q[ch][off + j] <<= res - 9;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
333 c->Q[ch][off + j] |= get_bits(gb, res - 9);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
334 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
335 c->Q[ch][off + j] -= (1 << (res - 2)) - 1;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
336 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
337 }
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 ff_mpc_dequantize_and_synth(c, maxband, data);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
342
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
343 c->cur_frame++;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
344
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
345 c->last_bits_used = get_bits_count(gb);
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
346 if(c->cur_frame >= c->frames)
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
347 c->cur_frame = 0;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
348 *data_size = MPC_FRAME_SIZE * 4;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
349
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
350 return c->cur_frame ? c->last_bits_used >> 3 : buf_size;
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
351 }
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
352
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
353 AVCodec mpc8_decoder = {
6716
aa09311685b2 Transform codec names into single words.
diego
parents: 6710
diff changeset
354 "mpc8",
5879
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
355 CODEC_TYPE_AUDIO,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
356 CODEC_ID_MUSEPACK8,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
357 sizeof(MPCContext),
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
358 mpc8_decode_init,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
359 NULL,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
360 NULL,
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
361 mpc8_decode_frame,
7040
e943e1409077 Make AVCodec long_names definition conditional depending on CONFIG_SMALL.
stefano
parents: 6763
diff changeset
362 .long_name = NULL_IF_CONFIG_SMALL("Musepack SV8"),
5879
ad73103623ab Musepack SV8 demuxer and decoder
kostya
parents:
diff changeset
363 };