libavcodec/mpegaudiodecheader.h
4bd8e17c
 /*
  * MPEG Audio header decoder
406792e7
  * Copyright (c) 2001, 2002 Fabrice Bellard
4bd8e17c
  *
  * This file is part of FFmpeg.
  *
  * FFmpeg is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
  * version 2.1 of the License, or (at your option) any later version.
  *
  * FFmpeg is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with FFmpeg; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
 /**
ba87f080
  * @file
4bd8e17c
  * MPEG Audio header decoder.
  */
 
98790382
 #ifndef AVCODEC_MPEGAUDIODECHEADER_H
 #define AVCODEC_MPEGAUDIODECHEADER_H
4bd8e17c
 
0199e00b
 #include "avcodec.h"
4bd8e17c
 
0199e00b
 #define MP3_MASK 0xFFFE0CCF
 
 #define MPA_DECODE_HEADER \
     int frame_size; \
     int error_protection; \
     int layer; \
     int sample_rate; \
     int sample_rate_index; /* between 0 and 8 */ \
     int bit_rate; \
     int nb_channels; \
     int mode; \
     int mode_ext; \
     int lsf;
 
 typedef struct MPADecodeHeader {
   MPA_DECODE_HEADER
 } MPADecodeHeader;
4bd8e17c
 
 /* header decoding. MUST check the header before because no
    consistency check is done there. Return 1 if free format found and
    that the frame size must be computed externally */
82ab61f9
 int avpriv_mpegaudio_decode_header(MPADecodeHeader *s, uint32_t header);
4bd8e17c
 
0199e00b
 /* useful helper to get mpeg audio stream infos. Return -1 if error in
    header, otherwise the coded frame size in bytes */
82ab61f9
 int avpriv_mpa_decode_header(AVCodecContext *avctx, uint32_t head, int *sample_rate, int *channels, int *frame_size, int *bitrate);
0199e00b
 
 /* fast header check for resync */
 static inline int ff_mpa_check_header(uint32_t header){
     /* header */
     if ((header & 0xffe00000) != 0xffe00000)
         return -1;
     /* layer check */
     if ((header & (3<<17)) == 0)
         return -1;
     /* bit rate */
     if ((header & (0xf<<12)) == 0xf<<12)
         return -1;
     /* frequency */
     if ((header & (3<<10)) == 3<<10)
         return -1;
     return 0;
 }
 
98790382
 #endif /* AVCODEC_MPEGAUDIODECHEADER_H */