| Line | Branch | Exec | Source |
|---|---|---|---|
| 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 "libavutil/mem_internal.h" | ||
| 28 | |||
| 29 | #include "aacpsdsp.h" | ||
| 30 | #include "get_bits.h" | ||
| 31 | |||
| 32 | #define PS_MAX_NUM_ENV 5 | ||
| 33 | #define PS_MAX_NR_IIDICC 34 | ||
| 34 | #define PS_MAX_NR_IPDOPD 17 | ||
| 35 | #define PS_MAX_SSB 91 | ||
| 36 | #define PS_MAX_AP_BANDS 50 | ||
| 37 | #define PS_QMF_TIME_SLOTS 32 | ||
| 38 | #define PS_MAX_DELAY 14 | ||
| 39 | #define PS_AP_LINKS 3 | ||
| 40 | #define PS_MAX_AP_DELAY 5 | ||
| 41 | #define PS_BASELINE 0 ///< Operate in Baseline PS mode | ||
| 42 | ///< Baseline implies 10 or 20 stereo bands, | ||
| 43 | ///< mixing mode A, and no ipd/opd | ||
| 44 | |||
| 45 | #define numQMFSlots 32 //numTimeSlots * RATE | ||
| 46 | |||
| 47 | typedef struct PSCommonContext { | ||
| 48 | int start; | ||
| 49 | int enable_iid; | ||
| 50 | int iid_quant; | ||
| 51 | int nr_iid_par; | ||
| 52 | int nr_ipdopd_par; | ||
| 53 | int enable_icc; | ||
| 54 | int icc_mode; | ||
| 55 | int nr_icc_par; | ||
| 56 | int enable_ext; | ||
| 57 | int frame_class; | ||
| 58 | int num_env_old; | ||
| 59 | int num_env; | ||
| 60 | int enable_ipdopd; | ||
| 61 | int border_position[PS_MAX_NUM_ENV+1]; | ||
| 62 | int8_t iid_par[PS_MAX_NUM_ENV][PS_MAX_NR_IIDICC]; ///< Inter-channel Intensity Difference Parameters | ||
| 63 | int8_t icc_par[PS_MAX_NUM_ENV][PS_MAX_NR_IIDICC]; ///< Inter-Channel Coherence Parameters | ||
| 64 | /* ipd/opd is iid/icc sized so that the same functions can handle both */ | ||
| 65 | int8_t ipd_par[PS_MAX_NUM_ENV][PS_MAX_NR_IIDICC]; ///< Inter-channel Phase Difference Parameters | ||
| 66 | int8_t opd_par[PS_MAX_NUM_ENV][PS_MAX_NR_IIDICC]; ///< Overall Phase Difference Parameters | ||
| 67 | int is34bands; | ||
| 68 | int is34bands_old; | ||
| 69 | } PSCommonContext; | ||
| 70 | |||
| 71 | typedef struct PSContext { | ||
| 72 | PSCommonContext common; | ||
| 73 | |||
| 74 | DECLARE_ALIGNED(16, INTFLOAT, in_buf)[5][44][2]; | ||
| 75 | DECLARE_ALIGNED(16, INTFLOAT, delay)[PS_MAX_SSB][PS_QMF_TIME_SLOTS + PS_MAX_DELAY][2]; | ||
| 76 | DECLARE_ALIGNED(16, INTFLOAT, ap_delay)[PS_MAX_AP_BANDS][PS_AP_LINKS][PS_QMF_TIME_SLOTS + PS_MAX_AP_DELAY][2]; | ||
| 77 | DECLARE_ALIGNED(16, INTFLOAT, peak_decay_nrg)[34]; | ||
| 78 | DECLARE_ALIGNED(16, INTFLOAT, power_smooth)[34]; | ||
| 79 | DECLARE_ALIGNED(16, INTFLOAT, peak_decay_diff_smooth)[34]; | ||
| 80 | DECLARE_ALIGNED(16, INTFLOAT, H11)[2][PS_MAX_NUM_ENV+1][PS_MAX_NR_IIDICC]; | ||
| 81 | DECLARE_ALIGNED(16, INTFLOAT, H12)[2][PS_MAX_NUM_ENV+1][PS_MAX_NR_IIDICC]; | ||
| 82 | DECLARE_ALIGNED(16, INTFLOAT, H21)[2][PS_MAX_NUM_ENV+1][PS_MAX_NR_IIDICC]; | ||
| 83 | DECLARE_ALIGNED(16, INTFLOAT, H22)[2][PS_MAX_NUM_ENV+1][PS_MAX_NR_IIDICC]; | ||
| 84 | DECLARE_ALIGNED(16, INTFLOAT, Lbuf)[91][32][2]; | ||
| 85 | DECLARE_ALIGNED(16, INTFLOAT, Rbuf)[91][32][2]; | ||
| 86 | int8_t opd_hist[PS_MAX_NR_IIDICC]; | ||
| 87 | int8_t ipd_hist[PS_MAX_NR_IIDICC]; | ||
| 88 | PSDSPContext dsp; | ||
| 89 | } PSContext; | ||
| 90 | |||
| 91 | extern const int8_t ff_k_to_i_20[]; | ||
| 92 | extern const int8_t ff_k_to_i_34[]; | ||
| 93 | |||
| 94 | void ff_ps_init_common(void); | ||
| 95 | void AAC_RENAME(ff_ps_init)(void); | ||
| 96 | |||
| 97 | 410 | static inline void AAC_RENAME(ff_ps_ctx_init)(PSContext *ps) | |
| 98 | { | ||
| 99 | 410 | AAC_RENAME(ff_psdsp_init)(&ps->dsp); | |
| 100 | 410 | } | |
| 101 | |||
| 102 | int ff_ps_read_data(void *logctx, GetBitContext *gb, | ||
| 103 | PSCommonContext *ps, int bits_left); | ||
| 104 | int AAC_RENAME(ff_ps_apply)(PSContext *ps, INTFLOAT L[2][38][64], INTFLOAT R[2][38][64], int top); | ||
| 105 | |||
| 106 | #endif /* AVCODEC_AACPS_H */ | ||
| 107 |