mpegaudio.h 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /**
  2. * @file mpegaudio.h
  3. * mpeg audio declarations for both encoder and decoder.
  4. */
  5. /* max frame size, in samples */
  6. #define MPA_FRAME_SIZE 1152
  7. /* max compressed frame size */
  8. #define MPA_MAX_CODED_FRAME_SIZE 1792
  9. #define MPA_MAX_CHANNELS 2
  10. #define SBLIMIT 32 /* number of subbands */
  11. #define MPA_STEREO 0
  12. #define MPA_JSTEREO 1
  13. #define MPA_DUAL 2
  14. #define MPA_MONO 3
  15. /* header + layer + bitrate + freq + lsf/mpeg25 */
  16. #define SAME_HEADER_MASK \
  17. (0xffe00000 | (3 << 17) | (0xf << 12) | (3 << 10) | (3 << 19))
  18. /* define USE_HIGHPRECISION to have a bit exact (but slower) mpeg
  19. audio decoder */
  20. #ifdef USE_HIGHPRECISION
  21. #define FRAC_BITS 23 /* fractional bits for sb_samples and dct */
  22. #define WFRAC_BITS 16 /* fractional bits for window */
  23. #else
  24. #define FRAC_BITS 15 /* fractional bits for sb_samples and dct */
  25. #define WFRAC_BITS 14 /* fractional bits for window */
  26. #endif
  27. #if defined(USE_HIGHPRECISION) && defined(CONFIG_AUDIO_NONSHORT)
  28. typedef int32_t OUT_INT;
  29. #define OUT_MAX INT32_MAX
  30. #define OUT_MIN INT32_MIN
  31. #define OUT_SHIFT (WFRAC_BITS + FRAC_BITS - 31)
  32. #else
  33. typedef int16_t OUT_INT;
  34. #define OUT_MAX INT16_MAX
  35. #define OUT_MIN INT16_MIN
  36. #define OUT_SHIFT (WFRAC_BITS + FRAC_BITS - 15)
  37. #endif
  38. #if FRAC_BITS <= 15
  39. typedef int16_t MPA_INT;
  40. #else
  41. typedef int32_t MPA_INT;
  42. #endif
  43. int l2_select_table(int bitrate, int nb_channels, int freq, int lsf);
  44. int mpa_decode_header(AVCodecContext *avctx, uint32_t head);
  45. void ff_mpa_synth_init(MPA_INT *window);
  46. void ff_mpa_synth_filter(MPA_INT *synth_buf_ptr, int *synth_buf_offset,
  47. MPA_INT *window, int *dither_state,
  48. OUT_INT *samples, int incr,
  49. int32_t sb_samples[SBLIMIT]);
  50. extern const uint16_t mpa_bitrate_tab[2][3][15];
  51. extern const uint16_t mpa_freq_tab[3];
  52. extern const unsigned char *alloc_tables[5];
  53. extern const double enwindow[512];
  54. extern const int sblimit_table[5];
  55. extern const int quant_steps[17];
  56. extern const int quant_bits[17];
  57. extern const int32_t mpa_enwindow[257];
  58. /* fast header check for resync */
  59. static inline int ff_mpa_check_header(uint32_t header){
  60. /* header */
  61. if ((header & 0xffe00000) != 0xffe00000)
  62. return -1;
  63. /* layer check */
  64. if ((header & (3<<17)) == 0)
  65. return -1;
  66. /* bit rate */
  67. if ((header & (0xf<<12)) == 0xf<<12)
  68. return -1;
  69. /* frequency */
  70. if ((header & (3<<10)) == 3<<10)
  71. return -1;
  72. return 0;
  73. }