yading@10: /* yading@10: * MPEG-4 Parametric Stereo definitions and declarations yading@10: * Copyright (c) 2010 Alex Converse yading@10: * yading@10: * This file is part of FFmpeg. yading@10: * yading@10: * FFmpeg is free software; you can redistribute it and/or yading@10: * modify it under the terms of the GNU Lesser General Public yading@10: * License as published by the Free Software Foundation; either yading@10: * version 2.1 of the License, or (at your option) any later version. yading@10: * yading@10: * FFmpeg is distributed in the hope that it will be useful, yading@10: * but WITHOUT ANY WARRANTY; without even the implied warranty of yading@10: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU yading@10: * Lesser General Public License for more details. yading@10: * yading@10: * You should have received a copy of the GNU Lesser General Public yading@10: * License along with FFmpeg; if not, write to the Free Software yading@10: * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA yading@10: */ yading@10: yading@10: #ifndef AVCODEC_PS_H yading@10: #define AVCODEC_PS_H yading@10: yading@10: #include yading@10: yading@10: #include "aacpsdsp.h" yading@10: #include "avcodec.h" yading@10: #include "get_bits.h" yading@10: yading@10: #define PS_MAX_NUM_ENV 5 yading@10: #define PS_MAX_NR_IIDICC 34 yading@10: #define PS_MAX_NR_IPDOPD 17 yading@10: #define PS_MAX_SSB 91 yading@10: #define PS_MAX_AP_BANDS 50 yading@10: #define PS_QMF_TIME_SLOTS 32 yading@10: #define PS_MAX_DELAY 14 yading@10: #define PS_AP_LINKS 3 yading@10: #define PS_MAX_AP_DELAY 5 yading@10: yading@10: typedef struct PSContext { yading@10: int start; yading@10: int enable_iid; yading@10: int iid_quant; yading@10: int nr_iid_par; yading@10: int nr_ipdopd_par; yading@10: int enable_icc; yading@10: int icc_mode; yading@10: int nr_icc_par; yading@10: int enable_ext; yading@10: int frame_class; yading@10: int num_env_old; yading@10: int num_env; yading@10: int enable_ipdopd; yading@10: int border_position[PS_MAX_NUM_ENV+1]; yading@10: int8_t iid_par[PS_MAX_NUM_ENV][PS_MAX_NR_IIDICC]; ///< Inter-channel Intensity Difference Parameters yading@10: int8_t icc_par[PS_MAX_NUM_ENV][PS_MAX_NR_IIDICC]; ///< Inter-Channel Coherence Parameters yading@10: /* ipd/opd is iid/icc sized so that the same functions can handle both */ yading@10: int8_t ipd_par[PS_MAX_NUM_ENV][PS_MAX_NR_IIDICC]; ///< Inter-channel Phase Difference Parameters yading@10: int8_t opd_par[PS_MAX_NUM_ENV][PS_MAX_NR_IIDICC]; ///< Overall Phase Difference Parameters yading@10: int is34bands; yading@10: int is34bands_old; yading@10: yading@10: DECLARE_ALIGNED(16, float, in_buf)[5][44][2]; yading@10: DECLARE_ALIGNED(16, float, delay)[PS_MAX_SSB][PS_QMF_TIME_SLOTS + PS_MAX_DELAY][2]; yading@10: DECLARE_ALIGNED(16, float, ap_delay)[PS_MAX_AP_BANDS][PS_AP_LINKS][PS_QMF_TIME_SLOTS + PS_MAX_AP_DELAY][2]; yading@10: DECLARE_ALIGNED(16, float, peak_decay_nrg)[34]; yading@10: DECLARE_ALIGNED(16, float, power_smooth)[34]; yading@10: DECLARE_ALIGNED(16, float, peak_decay_diff_smooth)[34]; yading@10: DECLARE_ALIGNED(16, float, H11)[2][PS_MAX_NUM_ENV+1][PS_MAX_NR_IIDICC]; yading@10: DECLARE_ALIGNED(16, float, H12)[2][PS_MAX_NUM_ENV+1][PS_MAX_NR_IIDICC]; yading@10: DECLARE_ALIGNED(16, float, H21)[2][PS_MAX_NUM_ENV+1][PS_MAX_NR_IIDICC]; yading@10: DECLARE_ALIGNED(16, float, H22)[2][PS_MAX_NUM_ENV+1][PS_MAX_NR_IIDICC]; yading@10: int8_t opd_hist[PS_MAX_NR_IIDICC]; yading@10: int8_t ipd_hist[PS_MAX_NR_IIDICC]; yading@10: PSDSPContext dsp; yading@10: } PSContext; yading@10: yading@10: void ff_ps_init(void); yading@10: void ff_ps_ctx_init(PSContext *ps); yading@10: int ff_ps_read_data(AVCodecContext *avctx, GetBitContext *gb, PSContext *ps, int bits_left); yading@10: int ff_ps_apply(AVCodecContext *avctx, PSContext *ps, float L[2][38][64], float R[2][38][64], int top); yading@10: yading@10: #endif /* AVCODEC_PS_H */