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);