mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-21 10:55:51 +02:00
ac3_probe: fix probing of non standard AC3
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
4b9e44868b
commit
0c3a3b75d7
@ -37,18 +37,36 @@ static int ac3_eac3_probe(AVProbeData *p, enum AVCodecID expected_codec_id)
|
||||
end = buf + p->buf_size;
|
||||
|
||||
for(; buf < end; buf++) {
|
||||
if(buf > p->buf && (buf[0] != 0x0B || buf[1] != 0x77) )
|
||||
if(buf > p->buf && !(buf[0] == 0x0B && buf[1] == 0x77)
|
||||
&& !(buf[0] == 0x77 && buf[1] == 0x0B) )
|
||||
continue;
|
||||
buf2 = buf;
|
||||
|
||||
for(frames = 0; buf2 < end; frames++) {
|
||||
uint8_t buf3[4096];
|
||||
int i;
|
||||
if(!memcmp(buf2, "\x1\x10\0\0\0\0\0\0", 8))
|
||||
buf2+=16;
|
||||
init_get_bits(&gbc, buf2, 54);
|
||||
if (buf[0] == 0x77 && buf[1] == 0x0B) {
|
||||
for(i=0; i<8; i+=2) {
|
||||
buf3[i ] = buf[i+1];
|
||||
buf3[i+1] = buf[i ];
|
||||
}
|
||||
init_get_bits(&gbc, buf3, 54);
|
||||
}else
|
||||
init_get_bits(&gbc, buf2, 54);
|
||||
if(avpriv_ac3_parse_header(&gbc, &hdr) < 0)
|
||||
break;
|
||||
if(buf2 + hdr.frame_size > end ||
|
||||
av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, buf2 + 2, hdr.frame_size - 2))
|
||||
if(buf2 + hdr.frame_size > end)
|
||||
break;
|
||||
if (buf[0] == 0x77 && buf[1] == 0x0B) {
|
||||
av_assert0(hdr.frame_size <= sizeof(buf3));
|
||||
for(; i<hdr.frame_size; i+=2) {
|
||||
buf3[i ] = buf[i+1];
|
||||
buf3[i+1] = buf[i ];
|
||||
}
|
||||
}
|
||||
if(av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0, gbc.buffer + 2, hdr.frame_size - 2))
|
||||
break;
|
||||
if (hdr.bitstream_id > 10)
|
||||
codec_id = AV_CODEC_ID_EAC3;
|
||||
|
Loading…
Reference in New Issue
Block a user