FFmpeg
libavcodec
aac_parser.c
Go to the documentation of this file.
1
/*
2
* Audio and Video frame extraction
3
* Copyright (c) 2003 Fabrice Bellard
4
* Copyright (c) 2003 Michael Niedermayer
5
*
6
* This file is part of FFmpeg.
7
*
8
* FFmpeg is free software; you can redistribute it and/or
9
* modify it under the terms of the GNU Lesser General Public
10
* License as published by the Free Software Foundation; either
11
* version 2.1 of the License, or (at your option) any later version.
12
*
13
* FFmpeg is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
* Lesser General Public License for more details.
17
*
18
* You should have received a copy of the GNU Lesser General Public
19
* License along with FFmpeg; if not, write to the Free Software
20
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
*/
22
23
#include "
parser.h
"
24
#include "
aac_ac3_parser.h
"
25
#include "
adts_header.h
"
26
#include "
adts_parser.h
"
27
#include "
get_bits.h
"
28
#include "
mpeg4audio.h
"
29
30
static
int
aac_sync
(uint64_t
state
,
AACAC3ParseContext
*hdr_info,
31
int
*need_next_header,
int
*new_frame_start)
32
{
33
GetBitContext
bits
;
34
AACADTSHeaderInfo
hdr;
35
int
size
;
36
union
{
37
uint64_t u64;
38
uint8_t u8[8 +
AV_INPUT_BUFFER_PADDING_SIZE
];
39
}
tmp
;
40
41
tmp
.u64 =
av_be2ne64
(
state
);
42
init_get_bits
(&
bits
,
tmp
.u8 + 8 -
AV_AAC_ADTS_HEADER_SIZE
,
43
AV_AAC_ADTS_HEADER_SIZE
* 8);
44
45
if
((
size
=
ff_adts_header_parse
(&
bits
, &hdr)) < 0)
46
return
0;
47
*need_next_header = 0;
48
*new_frame_start = 1;
49
hdr_info->
sample_rate
= hdr.
sample_rate
;
50
hdr_info->
channels
=
ff_mpeg4audio_channels
[hdr.
chan_config
];
51
hdr_info->
samples
= hdr.
samples
;
52
hdr_info->
bit_rate
= hdr.
bit_rate
;
53
return
size
;
54
}
55
56
static
av_cold
int
aac_parse_init
(
AVCodecParserContext
*
s1
)
57
{
58
AACAC3ParseContext
*
s
=
s1
->priv_data;
59
s
->header_size =
AV_AAC_ADTS_HEADER_SIZE
;
60
s
->sync =
aac_sync
;
61
return
0;
62
}
63
64
65
const
AVCodecParser
ff_aac_parser
= {
66
.
codec_ids
= {
AV_CODEC_ID_AAC
},
67
.priv_data_size =
sizeof
(
AACAC3ParseContext
),
68
.parser_init =
aac_parse_init
,
69
.parser_parse =
ff_aac_ac3_parse
,
70
.parser_close =
ff_parse_close
,
71
};
ff_aac_parser
const AVCodecParser ff_aac_parser
Definition:
aac_parser.c:65
AV_AAC_ADTS_HEADER_SIZE
#define AV_AAC_ADTS_HEADER_SIZE
Definition:
adts_parser.h:25
aac_ac3_parser.h
av_be2ne64
#define av_be2ne64(x)
Definition:
bswap.h:94
tmp
static uint8_t tmp[11]
Definition:
aes_ctr.c:28
ff_parse_close
void ff_parse_close(AVCodecParserContext *s)
Definition:
parser.c:284
AACADTSHeaderInfo::samples
uint32_t samples
Definition:
adts_header.h:30
AACADTSHeaderInfo::bit_rate
uint32_t bit_rate
Definition:
adts_header.h:31
init_get_bits
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
Definition:
get_bits.h:649
mpeg4audio.h
ff_adts_header_parse
int ff_adts_header_parse(GetBitContext *gbc, AACADTSHeaderInfo *hdr)
Parse the ADTS frame header to the end of the variable header, which is the first 54 bits.
Definition:
adts_header.c:30
GetBitContext
Definition:
get_bits.h:61
AACADTSHeaderInfo::chan_config
uint8_t chan_config
Definition:
adts_header.h:35
av_cold
#define av_cold
Definition:
attributes.h:90
s
#define s(width, name)
Definition:
cbs_vp9.c:256
s1
#define s1
Definition:
regdef.h:38
bits
uint8_t bits
Definition:
vp3data.h:141
get_bits.h
ff_aac_ac3_parse
int ff_aac_ac3_parse(AVCodecParserContext *s1, AVCodecContext *avctx, const uint8_t **poutbuf, int *poutbuf_size, const uint8_t *buf, int buf_size)
Definition:
aac_ac3_parser.c:30
AACAC3ParseContext::sample_rate
int sample_rate
Definition:
aac_ac3_parser.h:48
ff_mpeg4audio_channels
const uint8_t ff_mpeg4audio_channels[14]
Definition:
mpeg4audio.c:60
AACAC3ParseContext
Definition:
aac_ac3_parser.h:40
AV_CODEC_ID_AAC
@ AV_CODEC_ID_AAC
Definition:
codec_id.h:429
AVCodecParser::codec_ids
int codec_ids[7]
Definition:
avcodec.h:2949
size
int size
Definition:
twinvq_data.h:10344
state
static struct @327 state
aac_sync
static int aac_sync(uint64_t state, AACAC3ParseContext *hdr_info, int *need_next_header, int *new_frame_start)
Definition:
aac_parser.c:30
AACAC3ParseContext::channels
int channels
Definition:
aac_ac3_parser.h:47
parser.h
AACADTSHeaderInfo::sample_rate
uint32_t sample_rate
Definition:
adts_header.h:29
AVCodecParserContext
Definition:
avcodec.h:2789
adts_parser.h
AV_INPUT_BUFFER_PADDING_SIZE
#define AV_INPUT_BUFFER_PADDING_SIZE
Definition:
defs.h:40
aac_parse_init
static av_cold int aac_parse_init(AVCodecParserContext *s1)
Definition:
aac_parser.c:56
adts_header.h
AVCodecParser
Definition:
avcodec.h:2948
AACAC3ParseContext::samples
int samples
Definition:
aac_ac3_parser.h:50
AACAC3ParseContext::bit_rate
int bit_rate
Definition:
aac_ac3_parser.h:49
AACADTSHeaderInfo
Definition:
adts_header.h:28
Generated on Wed Aug 24 2022 21:41:15 for FFmpeg by
1.8.17