Mercurial > libavcodec.hg
comparison ac3_parser.c @ 6671:2d0b86dfe5bb libavcodec
add a ff_ac3_parse_header_full() which calls ff_ac3_parse_header()
and then reads the channel_map stuff
author | bwolowiec |
---|---|
date | Thu, 24 Apr 2008 22:27:13 +0000 |
parents | a409fbf1f42b |
children | 77f607fb4e8b |
comparison
equal
deleted
inserted
replaced
6670:33d3c14d5a57 | 6671:2d0b86dfe5bb |
---|---|
134 } | 134 } |
135 | 135 |
136 return 0; | 136 return 0; |
137 } | 137 } |
138 | 138 |
139 int ff_ac3_parse_header_full(GetBitContext *gbc, AC3HeaderInfo *hdr){ | |
140 int ret, i; | |
141 ret = ff_ac3_parse_header(gbc, hdr); | |
142 if(!ret){ | |
143 if(hdr->bitstream_id>10){ | |
144 /* Enhanced AC-3 */ | |
145 skip_bits(gbc, 5); // skip bitstream id | |
146 | |
147 /* skip dialog normalization and compression gain */ | |
148 for (i = 0; i < (hdr->channel_mode ? 1 : 2); i++) { | |
149 skip_bits(gbc, 5); // skip dialog normalization | |
150 if (get_bits1(gbc)) { | |
151 skip_bits(gbc, 8); //skip Compression gain word | |
152 } | |
153 } | |
154 /* dependent stream channel map */ | |
155 if (hdr->frame_type == EAC3_FRAME_TYPE_DEPENDENT && get_bits1(gbc)) { | |
156 hdr->channel_map = get_bits(gbc, 16); //custom channel map | |
157 return 0; | |
158 } | |
159 } | |
160 //default channel map based on acmod and lfeon | |
161 hdr->channel_map = ff_eac3_default_chmap[hdr->channel_mode]; | |
162 if(hdr->lfe_on) | |
163 hdr->channel_map |= AC3_CHMAP_LFE; | |
164 } | |
165 return ret; | |
166 } | |
167 | |
139 static int ac3_sync(uint64_t state, AACAC3ParseContext *hdr_info, | 168 static int ac3_sync(uint64_t state, AACAC3ParseContext *hdr_info, |
140 int *need_next_header, int *new_frame_start) | 169 int *need_next_header, int *new_frame_start) |
141 { | 170 { |
142 int err; | 171 int err; |
143 uint64_t tmp = be2me_64(state); | 172 uint64_t tmp = be2me_64(state); |