mirror of https://git.ffmpeg.org/ffmpeg.git
split up header parsing function
Originally committed as revision 13705 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
da04be10a2
commit
4397d95ce0
|
@ -235,10 +235,50 @@ static av_cold int ac3_decode_init(AVCodecContext *avctx)
|
|||
* start of the synchronized ac3 bitstream.
|
||||
*/
|
||||
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 @@ static int ac3_parse_header(AC3DecodeContext *s)
|
|||
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 @@ static int ac3_decode_frame(AVCodecContext * avctx, void *data, int *data_size,
|
|||
|
||||
/* 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) {
|
||||
|
|
Loading…
Reference in New Issue