blob: 61edce35496435720215d2e09c98e1d870ebd81f
1 | /* |
2 | * MPEG-4 Parametric Stereo definitions and declarations |
3 | * Copyright (c) 2010 Alex Converse <alex.converse@gmail.com> |
4 | * |
5 | * This file is part of FFmpeg. |
6 | * |
7 | * FFmpeg 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. |
11 | * |
12 | * FFmpeg 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. |
16 | * |
17 | * You should have received a copy of the GNU Lesser General Public |
18 | * License along with FFmpeg; if not, write to the Free Software |
19 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
20 | */ |
21 | |
22 | #ifndef AVCODEC_AACPS_H |
23 | #define AVCODEC_AACPS_H |
24 | |
25 | #include <stdint.h> |
26 | |
27 | #include "aacpsdsp.h" |
28 | #include "avcodec.h" |
29 | #include "get_bits.h" |
30 | |
31 | #define PS_MAX_NUM_ENV 5 |
32 | #define PS_MAX_NR_IIDICC 34 |
33 | #define PS_MAX_NR_IPDOPD 17 |
34 | #define PS_MAX_SSB 91 |
35 | #define PS_MAX_AP_BANDS 50 |
36 | #define PS_QMF_TIME_SLOTS 32 |
37 | #define PS_MAX_DELAY 14 |
38 | #define PS_AP_LINKS 3 |
39 | #define PS_MAX_AP_DELAY 5 |
40 | |
41 | typedef struct PSContext { |
42 | int start; |
43 | int enable_iid; |
44 | int iid_quant; |
45 | int nr_iid_par; |
46 | int nr_ipdopd_par; |
47 | int enable_icc; |
48 | int icc_mode; |
49 | int nr_icc_par; |
50 | int enable_ext; |
51 | int frame_class; |
52 | int num_env_old; |
53 | int num_env; |
54 | int enable_ipdopd; |
55 | int border_position[PS_MAX_NUM_ENV+1]; |
56 | int8_t iid_par[PS_MAX_NUM_ENV][PS_MAX_NR_IIDICC]; ///< Inter-channel Intensity Difference Parameters |
57 | int8_t icc_par[PS_MAX_NUM_ENV][PS_MAX_NR_IIDICC]; ///< Inter-Channel Coherence Parameters |
58 | /* ipd/opd is iid/icc sized so that the same functions can handle both */ |
59 | int8_t ipd_par[PS_MAX_NUM_ENV][PS_MAX_NR_IIDICC]; ///< Inter-channel Phase Difference Parameters |
60 | int8_t opd_par[PS_MAX_NUM_ENV][PS_MAX_NR_IIDICC]; ///< Overall Phase Difference Parameters |
61 | int is34bands; |
62 | int is34bands_old; |
63 | |
64 | DECLARE_ALIGNED(16, INTFLOAT, in_buf)[5][44][2]; |
65 | DECLARE_ALIGNED(16, INTFLOAT, delay)[PS_MAX_SSB][PS_QMF_TIME_SLOTS + PS_MAX_DELAY][2]; |
66 | DECLARE_ALIGNED(16, INTFLOAT, ap_delay)[PS_MAX_AP_BANDS][PS_AP_LINKS][PS_QMF_TIME_SLOTS + PS_MAX_AP_DELAY][2]; |
67 | DECLARE_ALIGNED(16, INTFLOAT, peak_decay_nrg)[34]; |
68 | DECLARE_ALIGNED(16, INTFLOAT, power_smooth)[34]; |
69 | DECLARE_ALIGNED(16, INTFLOAT, peak_decay_diff_smooth)[34]; |
70 | DECLARE_ALIGNED(16, INTFLOAT, H11)[2][PS_MAX_NUM_ENV+1][PS_MAX_NR_IIDICC]; |
71 | DECLARE_ALIGNED(16, INTFLOAT, H12)[2][PS_MAX_NUM_ENV+1][PS_MAX_NR_IIDICC]; |
72 | DECLARE_ALIGNED(16, INTFLOAT, H21)[2][PS_MAX_NUM_ENV+1][PS_MAX_NR_IIDICC]; |
73 | DECLARE_ALIGNED(16, INTFLOAT, H22)[2][PS_MAX_NUM_ENV+1][PS_MAX_NR_IIDICC]; |
74 | DECLARE_ALIGNED(16, INTFLOAT, Lbuf)[91][32][2]; |
75 | DECLARE_ALIGNED(16, INTFLOAT, Rbuf)[91][32][2]; |
76 | int8_t opd_hist[PS_MAX_NR_IIDICC]; |
77 | int8_t ipd_hist[PS_MAX_NR_IIDICC]; |
78 | PSDSPContext dsp; |
79 | } PSContext; |
80 | |
81 | void AAC_RENAME(ff_ps_init)(void); |
82 | void AAC_RENAME(ff_ps_ctx_init)(PSContext *ps); |
83 | int AAC_RENAME(ff_ps_read_data)(AVCodecContext *avctx, GetBitContext *gb, PSContext *ps, int bits_left); |
84 | int AAC_RENAME(ff_ps_apply)(AVCodecContext *avctx, PSContext *ps, INTFLOAT L[2][38][64], INTFLOAT R[2][38][64], int top); |
85 | |
86 | #endif /* AVCODEC_AACPS_H */ |
87 |