Blame view

ffmpeg-4.2.2/libavcodec/mpegaudiodecheader.h 2.37 KB
aac5773f   hucm   功能基本完成,接口待打磨
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
  /*
   * MPEG Audio header decoder
   * Copyright (c) 2001, 2002 Fabrice Bellard
   *
   * 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
   */
  
  /**
   * @file
   * MPEG Audio header decoder.
   */
  
  #ifndef AVCODEC_MPEGAUDIODECHEADER_H
  #define AVCODEC_MPEGAUDIODECHEADER_H
  
  #include "avcodec.h"
  
  #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;
  
  /* 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 */
  int avpriv_mpegaudio_decode_header(MPADecodeHeader *s, uint32_t header);
  
  /* useful helper to get MPEG audio stream info. Return -1 if error in
     header, otherwise the coded frame size in bytes */
  int ff_mpa_decode_header(uint32_t head, int *sample_rate,
                           int *channels, int *frame_size, int *bitrate, enum AVCodecID *codec_id);
  
  /* fast header check for resync */
  static inline int ff_mpa_check_header(uint32_t header){
      /* header */
      if ((header & 0xffe00000) != 0xffe00000)
          return -1;
      /* version check */
      if ((header & (3<<19)) == 1<<19)
          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;
  }
  
  #endif /* AVCODEC_MPEGAUDIODECHEADER_H */