Mercurial > libavcodec.hg
changeset 7028:4ef389a71e03 libavcodec
split up header parsing function
author | jbr |
---|---|
date | Sat, 07 Jun 2008 22:30:51 +0000 |
parents | 1edec36c02c5 |
children | 05a09fe93944 |
files | ac3dec.c |
diffstat | 1 files changed, 43 insertions(+), 32 deletions(-) [+] |
line wrap: on
line diff
--- a/ac3dec.c Sat Jun 07 22:30:47 2008 +0000 +++ b/ac3dec.c Sat Jun 07 22:30:51 2008 +0000 @@ -236,9 +236,49 @@ */ static int ac3_parse_header(AC3DecodeContext *s) { + GetBitContext *gbc = &s->gbc; + int i; + + /* read the rest of the bsi. read twice for dual mono mode. */ + i = !(s->channel_mode); + do { + skip_bits(gbc, 5); // skip dialog normalization + if (get_bits1(gbc)) + skip_bits(gbc, 8); //skip compression + if (get_bits1(gbc)) + skip_bits(gbc, 8); //skip language code + if (get_bits1(gbc)) + skip_bits(gbc, 7); //skip audio production information + } while (i--); + + skip_bits(gbc, 2); //skip copyright bit and original bitstream bit + + /* skip the timecodes (or extra bitstream information for Alternate Syntax) + TODO: read & use the xbsi1 downmix levels */ + if (get_bits1(gbc)) + skip_bits(gbc, 14); //skip timecode1 / xbsi1 + if (get_bits1(gbc)) + skip_bits(gbc, 14); //skip timecode2 / xbsi2 + + /* skip additional bitstream info */ + if (get_bits1(gbc)) { + i = get_bits(gbc, 6); + do { + skip_bits(gbc, 8); + } while(i--); + } + + return 0; +} + +/** + * Common function to parse AC3 or E-AC3 frame header + */ +static int parse_frame_header(AC3DecodeContext *s) +{ AC3HeaderInfo hdr; GetBitContext *gbc = &s->gbc; - int err, i; + int err; err = ff_ac3_parse_header(gbc, &hdr); if(err) @@ -271,36 +311,7 @@ s->channel_in_cpl[s->lfe_ch] = 0; } - /* read the rest of the bsi. read twice for dual mono mode. */ - i = !(s->channel_mode); - do { - skip_bits(gbc, 5); // skip dialog normalization - if (get_bits1(gbc)) - skip_bits(gbc, 8); //skip compression - if (get_bits1(gbc)) - skip_bits(gbc, 8); //skip language code - if (get_bits1(gbc)) - skip_bits(gbc, 7); //skip audio production information - } while (i--); - - skip_bits(gbc, 2); //skip copyright bit and original bitstream bit - - /* skip the timecodes (or extra bitstream information for Alternate Syntax) - TODO: read & use the xbsi1 downmix levels */ - if (get_bits1(gbc)) - skip_bits(gbc, 14); //skip timecode1 / xbsi1 - if (get_bits1(gbc)) - skip_bits(gbc, 14); //skip timecode2 / xbsi2 - - /* skip additional bitstream info */ - if (get_bits1(gbc)) { - i = get_bits(gbc, 6); - do { - skip_bits(gbc, 8); - } while(i--); - } - - return 0; + return ac3_parse_header(s); } /** @@ -1081,7 +1092,7 @@ /* parse the syncinfo */ *data_size = 0; - err = ac3_parse_header(s); + err = parse_frame_header(s); /* check that reported frame size fits in input buffer */ if(s->frame_size > buf_size) {