mpegaudiodecheader.h 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. /*
  2. * MPEG Audio header decoder
  3. * Copyright (c) 2001, 2002 Fabrice Bellard
  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. /**
  22. * @file
  23. * MPEG Audio header decoder.
  24. */
  25. #ifndef AVCODEC_MPEGAUDIODECHEADER_H
  26. #define AVCODEC_MPEGAUDIODECHEADER_H
  27. #include "avcodec.h"
  28. #define MP3_MASK 0xFFFE0CCF
  29. #define MPA_DECODE_HEADER \
  30. int frame_size; \
  31. int error_protection; \
  32. int layer; \
  33. int sample_rate; \
  34. int sample_rate_index; /* between 0 and 8 */ \
  35. int bit_rate; \
  36. int nb_channels; \
  37. int mode; \
  38. int mode_ext; \
  39. int lsf;
  40. typedef struct MPADecodeHeader {
  41. MPA_DECODE_HEADER
  42. } MPADecodeHeader;
  43. /* header decoding. MUST check the header before because no
  44. consistency check is done there. Return 1 if free format found and
  45. that the frame size must be computed externally */
  46. int avpriv_mpegaudio_decode_header(MPADecodeHeader *s, uint32_t header);
  47. /* useful helper to get MPEG audio stream info. Return -1 if error in
  48. header, otherwise the coded frame size in bytes */
  49. int ff_mpa_decode_header(uint32_t head, int *sample_rate,
  50. int *channels, int *frame_size, int *bitrate, enum AVCodecID *codec_id);
  51. /* fast header check for resync */
  52. static inline int ff_mpa_check_header(uint32_t header){
  53. /* header */
  54. if ((header & 0xffe00000) != 0xffe00000)
  55. return -1;
  56. /* version check */
  57. if ((header & (3<<19)) == 1<<19)
  58. return -1;
  59. /* layer check */
  60. if ((header & (3<<17)) == 0)
  61. return -1;
  62. /* bit rate */
  63. if ((header & (0xf<<12)) == 0xf<<12)
  64. return -1;
  65. /* frequency */
  66. if ((header & (3<<10)) == 3<<10)
  67. return -1;
  68. return 0;
  69. }
  70. #endif /* AVCODEC_MPEGAUDIODECHEADER_H */