3 * Copyright (c) 2006 Konstantin Shishkov
5 * This file is part of Libav.
7 * Libav is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * Libav is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with Libav; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 * MPEG Audio Layer 1/2 -like codec with frames of 1152 samples
25 * divided into 32 subbands.
28 #include "libavutil/channel_layout.h"
29 #include "libavutil/lfg.h"
34 #include "mpegaudiodsp.h"
40 #define SAMPLES_PER_BAND 36
41 #define MPC_FRAME_SIZE (BANDS * SAMPLES_PER_BAND)
43 static VLC scfi_vlc
, dscf_vlc
, hdr_vlc
, quant_vlc
[MPC7_QUANT_VLC_TABLES
][2];
45 static const uint16_t quant_offsets
[MPC7_QUANT_VLC_TABLES
*2 + 1] =
47 0, 512, 1024, 1536, 2052, 2564, 3076, 3588, 4100, 4612, 5124,
48 5636, 6164, 6676, 7224
52 static av_cold
int mpc7_decode_init(AVCodecContext
* avctx
)
55 MPCContext
*c
= avctx
->priv_data
;
57 LOCAL_ALIGNED_16(uint8_t, buf
, [16]);
58 static int vlc_initialized
= 0;
60 static VLC_TYPE scfi_table
[1 << MPC7_SCFI_BITS
][2];
61 static VLC_TYPE dscf_table
[1 << MPC7_DSCF_BITS
][2];
62 static VLC_TYPE hdr_table
[1 << MPC7_HDR_BITS
][2];
63 static VLC_TYPE quant_tables
[7224][2];
65 /* Musepack SV7 is always stereo */
66 if (avctx
->channels
!= 2) {
67 av_log_ask_for_sample(avctx
, "Unsupported number of channels: %d\n",
69 return AVERROR_PATCHWELCOME
;
72 if(avctx
->extradata_size
< 16){
73 av_log(avctx
, AV_LOG_ERROR
, "Too small extradata size (%i)!\n", avctx
->extradata_size
);
76 memset(c
->oldDSCF
, 0, sizeof(c
->oldDSCF
));
77 av_lfg_init(&c
->rnd
, 0xDEADBEEF);
78 ff_dsputil_init(&c
->dsp
, avctx
);
79 ff_mpadsp_init(&c
->mpadsp
);
80 c
->dsp
.bswap_buf((uint32_t*)buf
, (const uint32_t*)avctx
->extradata
, 4);
82 init_get_bits(&gb
, buf
, 128);
84 c
->IS
= get_bits1(&gb
);
85 c
->MSS
= get_bits1(&gb
);
86 c
->maxbands
= get_bits(&gb
, 6);
87 if(c
->maxbands
>= BANDS
){
88 av_log(avctx
, AV_LOG_ERROR
, "Too many bands: %i\n", c
->maxbands
);
91 skip_bits_long(&gb
, 88);
92 c
->gapless
= get_bits1(&gb
);
93 c
->lastframelen
= get_bits(&gb
, 11);
94 av_log(avctx
, AV_LOG_DEBUG
, "IS: %d, MSS: %d, TG: %d, LFL: %d, bands: %d\n",
95 c
->IS
, c
->MSS
, c
->gapless
, c
->lastframelen
, c
->maxbands
);
96 c
->frames_to_skip
= 0;
98 avctx
->sample_fmt
= AV_SAMPLE_FMT_S16P
;
99 avctx
->channel_layout
= AV_CH_LAYOUT_STEREO
;
101 if(vlc_initialized
) return 0;
102 av_log(avctx
, AV_LOG_DEBUG
, "Initing VLC\n");
103 scfi_vlc
.table
= scfi_table
;
104 scfi_vlc
.table_allocated
= 1 << MPC7_SCFI_BITS
;
105 if(init_vlc(&scfi_vlc
, MPC7_SCFI_BITS
, MPC7_SCFI_SIZE
,
107 &mpc7_scfi
[0], 2, 1, INIT_VLC_USE_NEW_STATIC
)){
108 av_log(avctx
, AV_LOG_ERROR
, "Cannot init SCFI VLC\n");
111 dscf_vlc
.table
= dscf_table
;
112 dscf_vlc
.table_allocated
= 1 << MPC7_DSCF_BITS
;
113 if(init_vlc(&dscf_vlc
, MPC7_DSCF_BITS
, MPC7_DSCF_SIZE
,
115 &mpc7_dscf
[0], 2, 1, INIT_VLC_USE_NEW_STATIC
)){
116 av_log(avctx
, AV_LOG_ERROR
, "Cannot init DSCF VLC\n");
119 hdr_vlc
.table
= hdr_table
;
120 hdr_vlc
.table_allocated
= 1 << MPC7_HDR_BITS
;
121 if(init_vlc(&hdr_vlc
, MPC7_HDR_BITS
, MPC7_HDR_SIZE
,
123 &mpc7_hdr
[0], 2, 1, INIT_VLC_USE_NEW_STATIC
)){
124 av_log(avctx
, AV_LOG_ERROR
, "Cannot init HDR VLC\n");
127 for(i
= 0; i
< MPC7_QUANT_VLC_TABLES
; i
++){
128 for(j
= 0; j
< 2; j
++){
129 quant_vlc
[i
][j
].table
= &quant_tables
[quant_offsets
[i
*2 + j
]];
130 quant_vlc
[i
][j
].table_allocated
= quant_offsets
[i
*2 + j
+ 1] - quant_offsets
[i
*2 + j
];
131 if(init_vlc(&quant_vlc
[i
][j
], 9, mpc7_quant_vlc_sizes
[i
],
132 &mpc7_quant_vlc
[i
][j
][1], 4, 2,
133 &mpc7_quant_vlc
[i
][j
][0], 4, 2, INIT_VLC_USE_NEW_STATIC
)){
134 av_log(avctx
, AV_LOG_ERROR
, "Cannot init QUANT VLC %i,%i\n",i
,j
);
141 avcodec_get_frame_defaults(&c
->frame
);
142 avctx
->coded_frame
= &c
->frame
;
148 * Fill samples for given subband
150 static inline void idx_to_quant(MPCContext
*c
, GetBitContext
*gb
, int idx
, int *dst
)
155 for(i
= 0; i
< SAMPLES_PER_BAND
; i
++){
156 *dst
++ = (av_lfg_get(&c
->rnd
) & 0x3FC) - 510;
161 for(i
= 0; i
< SAMPLES_PER_BAND
/3; i
++){
162 t
= get_vlc2(gb
, quant_vlc
[0][i1
].table
, 9, 2);
163 *dst
++ = mpc7_idx30
[t
];
164 *dst
++ = mpc7_idx31
[t
];
165 *dst
++ = mpc7_idx32
[t
];
170 for(i
= 0; i
< SAMPLES_PER_BAND
/2; i
++){
171 t
= get_vlc2(gb
, quant_vlc
[1][i1
].table
, 9, 2);
172 *dst
++ = mpc7_idx50
[t
];
173 *dst
++ = mpc7_idx51
[t
];
176 case 3: case 4: case 5: case 6: case 7:
178 for(i
= 0; i
< SAMPLES_PER_BAND
; i
++)
179 *dst
++ = get_vlc2(gb
, quant_vlc
[idx
-1][i1
].table
, 9, 2) - mpc7_quant_vlc_off
[idx
-1];
181 case 8: case 9: case 10: case 11: case 12:
182 case 13: case 14: case 15: case 16: case 17:
183 t
= (1 << (idx
- 2)) - 1;
184 for(i
= 0; i
< SAMPLES_PER_BAND
; i
++)
185 *dst
++ = get_bits(gb
, idx
- 1) - t
;
187 default: // case 0 and -2..-17
192 static int get_scale_idx(GetBitContext
*gb
, int ref
)
194 int t
= get_vlc2(gb
, dscf_vlc
.table
, MPC7_DSCF_BITS
, 1) - 7;
196 return get_bits(gb
, 6);
197 return av_clip_uintp2(ref
+ t
, 7);
200 static int mpc7_decode_frame(AVCodecContext
* avctx
, void *data
,
201 int *got_frame_ptr
, AVPacket
*avpkt
)
203 const uint8_t *buf
= avpkt
->data
;
205 MPCContext
*c
= avctx
->priv_data
;
209 Band
*bands
= c
->bands
;
210 int off
, ret
, last_frame
, skip
;
211 int bits_used
, bits_avail
;
213 memset(bands
, 0, sizeof(*bands
) * (c
->maxbands
+ 1));
215 buf_size
= avpkt
->size
& ~3;
217 av_log(avctx
, AV_LOG_ERROR
, "packet size is too small (%i bytes)\n",
219 return AVERROR_INVALIDDATA
;
221 if (buf_size
!= avpkt
->size
) {
222 av_log(avctx
, AV_LOG_WARNING
, "packet size is not a multiple of 4. "
223 "extra bytes at the end will be skipped.\n");
231 /* get output buffer */
232 c
->frame
.nb_samples
= last_frame
? c
->lastframelen
: MPC_FRAME_SIZE
;
233 if ((ret
= ff_get_buffer(avctx
, &c
->frame
)) < 0) {
234 av_log(avctx
, AV_LOG_ERROR
, "get_buffer() failed\n");
238 av_fast_padded_malloc(&c
->bits
, &c
->buf_size
, buf_size
);
240 return AVERROR(ENOMEM
);
241 c
->dsp
.bswap_buf((uint32_t *)c
->bits
, (const uint32_t *)buf
, buf_size
>> 2);
242 init_get_bits(&gb
, c
->bits
, buf_size
* 8);
243 skip_bits_long(&gb
, skip
);
245 /* read subband indexes */
246 for(i
= 0; i
<= c
->maxbands
; i
++){
247 for(ch
= 0; ch
< 2; ch
++){
249 if(i
) t
= get_vlc2(&gb
, hdr_vlc
.table
, MPC7_HDR_BITS
, 1) - 5;
250 if(t
== 4) bands
[i
].res
[ch
] = get_bits(&gb
, 4);
251 else bands
[i
].res
[ch
] = av_clip(bands
[i
-1].res
[ch
] + t
, 0, 17);
254 if(bands
[i
].res
[0] || bands
[i
].res
[1]){
256 if(c
->MSS
) bands
[i
].msf
= get_bits1(&gb
);
259 /* get scale indexes coding method */
260 for(i
= 0; i
<= mb
; i
++)
261 for(ch
= 0; ch
< 2; ch
++)
262 if(bands
[i
].res
[ch
]) bands
[i
].scfi
[ch
] = get_vlc2(&gb
, scfi_vlc
.table
, MPC7_SCFI_BITS
, 1);
263 /* get scale indexes */
264 for(i
= 0; i
<= mb
; i
++){
265 for(ch
= 0; ch
< 2; ch
++){
266 if(bands
[i
].res
[ch
]){
267 bands
[i
].scf_idx
[ch
][2] = c
->oldDSCF
[ch
][i
];
268 bands
[i
].scf_idx
[ch
][0] = get_scale_idx(&gb
, bands
[i
].scf_idx
[ch
][2]);
269 switch(bands
[i
].scfi
[ch
]){
271 bands
[i
].scf_idx
[ch
][1] = get_scale_idx(&gb
, bands
[i
].scf_idx
[ch
][0]);
272 bands
[i
].scf_idx
[ch
][2] = get_scale_idx(&gb
, bands
[i
].scf_idx
[ch
][1]);
275 bands
[i
].scf_idx
[ch
][1] = get_scale_idx(&gb
, bands
[i
].scf_idx
[ch
][0]);
276 bands
[i
].scf_idx
[ch
][2] = bands
[i
].scf_idx
[ch
][1];
279 bands
[i
].scf_idx
[ch
][1] = bands
[i
].scf_idx
[ch
][0];
280 bands
[i
].scf_idx
[ch
][2] = get_scale_idx(&gb
, bands
[i
].scf_idx
[ch
][1]);
283 bands
[i
].scf_idx
[ch
][2] = bands
[i
].scf_idx
[ch
][1] = bands
[i
].scf_idx
[ch
][0];
286 c
->oldDSCF
[ch
][i
] = bands
[i
].scf_idx
[ch
][2];
291 memset(c
->Q
, 0, sizeof(c
->Q
));
293 for(i
= 0; i
< BANDS
; i
++, off
+= SAMPLES_PER_BAND
)
294 for(ch
= 0; ch
< 2; ch
++)
295 idx_to_quant(c
, &gb
, bands
[i
].res
[ch
], c
->Q
[ch
] + off
);
297 ff_mpc_dequantize_and_synth(c
, mb
, (int16_t **)c
->frame
.extended_data
, 2);
299 bits_used
= get_bits_count(&gb
);
300 bits_avail
= buf_size
* 8;
301 if (!last_frame
&& ((bits_avail
< bits_used
) || (bits_used
+ 32 <= bits_avail
))) {
302 av_log(avctx
, AV_LOG_ERROR
, "Error decoding frame: used %i of %i bits\n", bits_used
, bits_avail
);
305 if(c
->frames_to_skip
){
312 *(AVFrame
*)data
= c
->frame
;
317 static void mpc7_decode_flush(AVCodecContext
*avctx
)
319 MPCContext
*c
= avctx
->priv_data
;
321 memset(c
->oldDSCF
, 0, sizeof(c
->oldDSCF
));
322 c
->frames_to_skip
= 32;
325 static av_cold
int mpc7_decode_close(AVCodecContext
*avctx
)
327 MPCContext
*c
= avctx
->priv_data
;
333 AVCodec ff_mpc7_decoder
= {
335 .type
= AVMEDIA_TYPE_AUDIO
,
336 .id
= AV_CODEC_ID_MUSEPACK7
,
337 .priv_data_size
= sizeof(MPCContext
),
338 .init
= mpc7_decode_init
,
339 .close
= mpc7_decode_close
,
340 .decode
= mpc7_decode_frame
,
341 .flush
= mpc7_decode_flush
,
342 .capabilities
= CODEC_CAP_DR1
,
343 .long_name
= NULL_IF_CONFIG_SMALL("Musepack SV7"),
344 .sample_fmts
= (const enum AVSampleFormat
[]) { AV_SAMPLE_FMT_S16P
,
345 AV_SAMPLE_FMT_NONE
},