lsp.h 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /*
  2. * LSP computing for ACELP-based codecs
  3. *
  4. * Copyright (c) 2008 Vladimir Voroshilov
  5. *
  6. * This file is part of FFmpeg.
  7. *
  8. * FFmpeg is free software; you can redistribute it and/or
  9. * modify it under the terms of the GNU Lesser General Public
  10. * License as published by the Free Software Foundation; either
  11. * version 2.1 of the License, or (at your option) any later version.
  12. *
  13. * FFmpeg is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  16. * Lesser General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU Lesser General Public
  19. * License along with FFmpeg; if not, write to the Free Software
  20. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  21. */
  22. #ifndef AVCODEC_LSP_H
  23. #define AVCODEC_LSP_H
  24. #include <stdint.h>
  25. /**
  26. (I.F) means fixed-point value with F fractional and I integer bits
  27. */
  28. /**
  29. * \brief ensure a minimum distance between LSFs
  30. * \param lsfq [in/out] LSF to check and adjust
  31. * \param lsfq_min_distance minimum distance between LSFs
  32. * \param lsfq_min minimum allowed LSF value
  33. * \param lsfq_max maximum allowed LSF value
  34. * \param lp_order LP filter order
  35. */
  36. void ff_acelp_reorder_lsf(int16_t* lsfq, int lsfq_min_distance, int lsfq_min, int lsfq_max, int lp_order);
  37. /**
  38. * \brief Convert LSF to LSP
  39. * \param lsp [out] LSP coefficients (-0x8000 <= (0.15) < 0x8000)
  40. * \param lsf normalized LSF coefficients (0 <= (2.13) < 0x2000 * PI)
  41. * \param lp_order LP filter order
  42. *
  43. * \remark It is safe to pass the same array into the lsf and lsp parameters.
  44. */
  45. void ff_acelp_lsf2lsp(int16_t *lsp, const int16_t *lsf, int lp_order);
  46. /**
  47. * \brief LSP to LP conversion (3.2.6 of G.729)
  48. * \param lp [out] decoded LP coefficients (-0x8000 <= (3.12) < 0x8000)
  49. * \param lsp LSP coefficients (-0x8000 <= (0.15) < 0x8000)
  50. * \param lp_half_order LP filter order, divided by 2
  51. */
  52. void ff_acelp_lsp2lpc(int16_t* lp, const int16_t* lsp, int lp_half_order);
  53. /**
  54. * \brief Interpolate LSP for the first subframe and convert LSP -> LP for both subframes (3.2.5 and 3.2.6 of G.729)
  55. * \param lp_1st [out] decoded LP coefficients for first subframe (-0x8000 <= (3.12) < 0x8000)
  56. * \param lp_2nd [out] decoded LP coefficients for second subframe (-0x8000 <= (3.12) < 0x8000)
  57. * \param lsp_2nd LSP coefficients of the second subframe (-0x8000 <= (0.15) < 0x8000)
  58. * \param lsp_prev LSP coefficients from the second subframe of the previous frame (-0x8000 <= (0.15) < 0x8000)
  59. * \param lp_order LP filter order
  60. */
  61. void ff_acelp_lp_decode(int16_t* lp_1st, int16_t* lp_2nd, const int16_t* lsp_2nd, const int16_t* lsp_prev, int lp_order);
  62. #endif /* AVCODEC_LSP_H */