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 Libav. 6 * 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. 11 * 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. 16 * 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 20 */ 21 22#ifndef AVCODEC_PS_H 23#define AVCODEC_PS_H 24 25#include <stdint.h> 26 27#include "avcodec.h" 28#include "get_bits.h" 29 30#define PS_MAX_NUM_ENV 5 31#define PS_MAX_NR_IIDICC 34 32#define PS_MAX_NR_IPDOPD 17 33#define PS_MAX_SSB 91 34#define PS_MAX_AP_BANDS 50 35#define PS_QMF_TIME_SLOTS 32 36#define PS_MAX_DELAY 14 37#define PS_AP_LINKS 3 38#define PS_MAX_AP_DELAY 5 39 40typedef struct { 41 int start; 42 int enable_iid; 43 int iid_quant; 44 int nr_iid_par; 45 int nr_ipdopd_par; 46 int enable_icc; 47 int icc_mode; 48 int nr_icc_par; 49 int enable_ext; 50 int frame_class; 51 int num_env_old; 52 int num_env; 53 int enable_ipdopd; 54 int border_position[PS_MAX_NUM_ENV+1]; 55 int8_t iid_par[PS_MAX_NUM_ENV][PS_MAX_NR_IIDICC]; ///< Inter-channel Intensity Difference Parameters 56 int8_t icc_par[PS_MAX_NUM_ENV][PS_MAX_NR_IIDICC]; ///< Inter-Channel Coherence Parameters 57 /* ipd/opd is iid/icc sized so that the same functions can handle both */ 58 int8_t ipd_par[PS_MAX_NUM_ENV][PS_MAX_NR_IIDICC]; ///< Inter-channel Phase Difference Parameters 59 int8_t opd_par[PS_MAX_NUM_ENV][PS_MAX_NR_IIDICC]; ///< Overall Phase Difference Parameters 60 int is34bands; 61 int is34bands_old; 62 63 float in_buf[5][44][2]; 64 float delay[PS_MAX_SSB][PS_QMF_TIME_SLOTS + PS_MAX_DELAY][2]; 65 float ap_delay[PS_MAX_AP_BANDS][PS_AP_LINKS][PS_QMF_TIME_SLOTS + PS_MAX_AP_DELAY][2]; 66 float peak_decay_nrg[34]; 67 float power_smooth[34]; 68 float peak_decay_diff_smooth[34]; 69 float H11[2][PS_MAX_NUM_ENV+1][PS_MAX_NR_IIDICC]; 70 float H12[2][PS_MAX_NUM_ENV+1][PS_MAX_NR_IIDICC]; 71 float H21[2][PS_MAX_NUM_ENV+1][PS_MAX_NR_IIDICC]; 72 float H22[2][PS_MAX_NUM_ENV+1][PS_MAX_NR_IIDICC]; 73 int8_t opd_hist[PS_MAX_NR_IIDICC]; 74 int8_t ipd_hist[PS_MAX_NR_IIDICC]; 75} PSContext; 76 77void ff_ps_init(void); 78void ff_ps_ctx_init(PSContext *ps); 79int ff_ps_read_data(AVCodecContext *avctx, GetBitContext *gb, PSContext *ps, int bits_left); 80int ff_ps_apply(AVCodecContext *avctx, PSContext *ps, float L[2][38][64], float R[2][38][64], int top); 81 82#endif /* AVCODEC_PS_H */ 83