aacps.h 2.9 KB

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