You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

80 lines
2.9KB

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