23
23
#include "parser.h"
24
24
#include "aac_ac3_parser.h"
25
#include "aac_parser.h"
25
26
#include "bitstream.h"
26
27
#include "mpeg4audio.h"
28
29
#define AAC_HEADER_SIZE 7
30
static int aac_sync(uint64_t state, AACAC3ParseContext *hdr_info,
31
int *need_next_header, int *new_frame_start)
31
int ff_aac_parse_header(GetBitContext *gbc, AACADTSHeaderInfo *hdr)
34
33
int size, rdb, ch, sr;
38
init_get_bits(&bits, tmp+8-AAC_HEADER_SIZE, AAC_HEADER_SIZE * 8);
40
if(get_bits(&bits, 12) != 0xfff)
43
skip_bits1(&bits); /* id */
44
skip_bits(&bits, 2); /* layer */
45
skip_bits1(&bits); /* protection_absent */
46
skip_bits(&bits, 2); /* profile_objecttype */
47
sr = get_bits(&bits, 4); /* sample_frequency_index */
36
if(get_bits(gbc, 12) != 0xfff)
37
return AAC_AC3_PARSE_ERROR_SYNC;
39
skip_bits1(gbc); /* id */
40
skip_bits(gbc, 2); /* layer */
41
crc_abs = get_bits1(gbc); /* protection_absent */
42
aot = get_bits(gbc, 2); /* profile_objecttype */
43
sr = get_bits(gbc, 4); /* sample_frequency_index */
48
44
if(!ff_mpeg4audio_sample_rates[sr])
50
skip_bits1(&bits); /* private_bit */
51
ch = get_bits(&bits, 3); /* channel_configuration */
45
return AAC_AC3_PARSE_ERROR_SAMPLE_RATE;
46
skip_bits1(gbc); /* private_bit */
47
ch = get_bits(gbc, 3); /* channel_configuration */
52
49
if(!ff_mpeg4audio_channels[ch])
54
skip_bits1(&bits); /* original/copy */
55
skip_bits1(&bits); /* home */
50
return AAC_AC3_PARSE_ERROR_CHANNEL_CFG;
52
skip_bits1(gbc); /* original/copy */
53
skip_bits1(gbc); /* home */
57
55
/* adts_variable_header */
58
skip_bits1(&bits); /* copyright_identification_bit */
59
skip_bits1(&bits); /* copyright_identification_start */
60
size = get_bits(&bits, 13); /* aac_frame_length */
56
skip_bits1(gbc); /* copyright_identification_bit */
57
skip_bits1(gbc); /* copyright_identification_start */
58
size = get_bits(gbc, 13); /* aac_frame_length */
61
59
if(size < AAC_HEADER_SIZE)
60
return AAC_AC3_PARSE_ERROR_FRAME_SIZE;
62
skip_bits(gbc, 11); /* adts_buffer_fullness */
63
rdb = get_bits(gbc, 2); /* number_of_raw_data_blocks_in_frame */
65
hdr->object_type = aot;
66
hdr->chan_config = ch;
67
hdr->crc_absent = crc_abs;
68
hdr->num_aac_frames = rdb + 1;
69
hdr->sampling_index = sr;
70
hdr->sample_rate = ff_mpeg4audio_sample_rates[sr];
71
hdr->samples = (rdb + 1) * 1024;
72
hdr->bit_rate = size * 8 * hdr->sample_rate / hdr->samples;
77
static int aac_sync(uint64_t state, AACAC3ParseContext *hdr_info,
78
int *need_next_header, int *new_frame_start)
81
AACADTSHeaderInfo hdr;
88
tmp.u64 = be2me_64(state);
89
init_get_bits(&bits, tmp.u8+8-AAC_HEADER_SIZE, AAC_HEADER_SIZE * 8);
91
if ((size = ff_aac_parse_header(&bits, &hdr)) < 0)
64
skip_bits(&bits, 11); /* adts_buffer_fullness */
65
rdb = get_bits(&bits, 2); /* number_of_raw_data_blocks_in_frame */
67
hdr_info->channels = ff_mpeg4audio_channels[ch];
68
hdr_info->sample_rate = ff_mpeg4audio_sample_rates[sr];
69
hdr_info->samples = (rdb + 1) * 1024;
70
hdr_info->bit_rate = size * 8 * hdr_info->sample_rate / hdr_info->samples;
72
93
*need_next_header = 0;
73
94
*new_frame_start = 1;
95
hdr_info->sample_rate = hdr.sample_rate;
96
hdr_info->channels = ff_mpeg4audio_channels[hdr.chan_config];
97
hdr_info->samples = hdr.samples;
98
hdr_info->bit_rate = hdr.bit_rate;