GCC Code Coverage Report
Directory: ../../../ffmpeg/ Exec Total Coverage
File: src/libavcodec/mpegaudiodecheader.h Lines: 12 12 100.0 %
Date: 2019-11-20 04:07:19 Branches: 10 10 100.0 %

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