1cabdff1aSopenharmony_ci/*
2cabdff1aSopenharmony_ci * Musepack decoder
3cabdff1aSopenharmony_ci * Copyright (c) 2006 Konstantin Shishkov
4cabdff1aSopenharmony_ci *
5cabdff1aSopenharmony_ci * This file is part of FFmpeg.
6cabdff1aSopenharmony_ci *
7cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or
8cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public
9cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either
10cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version.
11cabdff1aSopenharmony_ci *
12cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful,
13cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of
14cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15cabdff1aSopenharmony_ci * Lesser General Public License for more details.
16cabdff1aSopenharmony_ci *
17cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public
18cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software
19cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20cabdff1aSopenharmony_ci */
21cabdff1aSopenharmony_ci
22cabdff1aSopenharmony_ci/**
23cabdff1aSopenharmony_ci * @file
24cabdff1aSopenharmony_ci * Musepack decoder
25cabdff1aSopenharmony_ci * MPEG Audio Layer 1/2 -like codec with frames of 1152 samples
26cabdff1aSopenharmony_ci * divided into 32 subbands.
27cabdff1aSopenharmony_ci */
28cabdff1aSopenharmony_ci
29cabdff1aSopenharmony_ci#ifndef AVCODEC_MPC_H
30cabdff1aSopenharmony_ci#define AVCODEC_MPC_H
31cabdff1aSopenharmony_ci
32cabdff1aSopenharmony_ci#include <stdint.h>
33cabdff1aSopenharmony_ci
34cabdff1aSopenharmony_ci#include "libavutil/lfg.h"
35cabdff1aSopenharmony_ci#include "libavutil/mem_internal.h"
36cabdff1aSopenharmony_ci
37cabdff1aSopenharmony_ci#include "bswapdsp.h"
38cabdff1aSopenharmony_ci#include "mpegaudio.h"
39cabdff1aSopenharmony_ci#include "mpegaudiodsp.h"
40cabdff1aSopenharmony_ci
41cabdff1aSopenharmony_ci#define BANDS            32
42cabdff1aSopenharmony_ci#define SAMPLES_PER_BAND 36
43cabdff1aSopenharmony_ci#define MPC_FRAME_SIZE   (BANDS * SAMPLES_PER_BAND)
44cabdff1aSopenharmony_ci
45cabdff1aSopenharmony_ci/** Subband structure - hold all variables for each subband */
46cabdff1aSopenharmony_citypedef struct Band {
47cabdff1aSopenharmony_ci    int msf; ///< mid-stereo flag
48cabdff1aSopenharmony_ci    int res[2];
49cabdff1aSopenharmony_ci    int scfi[2];
50cabdff1aSopenharmony_ci    int scf_idx[2][3];
51cabdff1aSopenharmony_ci    int Q[2];
52cabdff1aSopenharmony_ci}Band;
53cabdff1aSopenharmony_ci
54cabdff1aSopenharmony_citypedef struct MPCContext {
55cabdff1aSopenharmony_ci    BswapDSPContext bdsp;
56cabdff1aSopenharmony_ci    MPADSPContext mpadsp;
57cabdff1aSopenharmony_ci    int IS, MSS, gapless;
58cabdff1aSopenharmony_ci    int lastframelen;
59cabdff1aSopenharmony_ci    int maxbands, last_max_band;
60cabdff1aSopenharmony_ci    int last_bits_used;
61cabdff1aSopenharmony_ci    int oldDSCF[2][BANDS];
62cabdff1aSopenharmony_ci    Band bands[BANDS];
63cabdff1aSopenharmony_ci    int Q[2][MPC_FRAME_SIZE];
64cabdff1aSopenharmony_ci    int cur_frame, frames;
65cabdff1aSopenharmony_ci    uint8_t *bits;
66cabdff1aSopenharmony_ci    int buf_size;
67cabdff1aSopenharmony_ci    AVLFG rnd;
68cabdff1aSopenharmony_ci    int frames_to_skip;
69cabdff1aSopenharmony_ci    /* for synthesis */
70cabdff1aSopenharmony_ci    DECLARE_ALIGNED(16, MPA_INT, synth_buf)[MPA_MAX_CHANNELS][512*2];
71cabdff1aSopenharmony_ci    int synth_buf_offset[MPA_MAX_CHANNELS];
72cabdff1aSopenharmony_ci    DECLARE_ALIGNED(16, int32_t, sb_samples)[MPA_MAX_CHANNELS][36][SBLIMIT];
73cabdff1aSopenharmony_ci} MPCContext;
74cabdff1aSopenharmony_ci
75cabdff1aSopenharmony_civoid ff_mpc_dequantize_and_synth(MPCContext *c, int maxband, int16_t **out, int channels);
76cabdff1aSopenharmony_ci
77cabdff1aSopenharmony_ci#endif /* AVCODEC_MPC_H */
78