From 07e0362f4fc19aa51650dfcce2764e88eed7750a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96man?= Date: Sun, 31 Oct 2010 09:42:16 +0000 Subject: [PATCH] Cleanup the ac3 parser and fix a bug (that mostly was unnoticed AFAIK) --- src/parsers.c | 35 ++++++++++++----------------------- 1 file changed, 12 insertions(+), 23 deletions(-) diff --git a/src/parsers.c b/src/parsers.c index 45eaf2ef..546eb142 100644 --- a/src/parsers.c +++ b/src/parsers.c @@ -585,31 +585,20 @@ parse_ac3(th_transport_t *t, th_stream_t *st, size_t ilen, for(i = 0; i < len - 6; i++) { const uint8_t *p = buf + i; if(ac3_valid_frame(p)) { - int bsid = p[5] & 0xf; - int fsize, sr; + int bsid = p[5] >> 3; - if(bsid <= 10) { - int fscod = p[4] >> 6; - int frmsizcod = p[4] & 0x3f; - fsize = ac3_frame_size_tab[frmsizcod][fscod] * 2; - - bsid -= 8; - if(bsid < 0) - bsid = 0; - sr = ac3_freq_tab[fscod] >> bsid; - - } else { - - fsize = ((((p[2] & 0x7) << 8) | p[3]) + 1) * 2; - - - if((p[4] & 0xc0) == 0xc0) { - sr = ac3_freq_tab[(p[4] >> 4) & 3] / 2; - } else { - sr = ac3_freq_tab[(p[4] >> 6) & 3]; - } - } + if(bsid > 10) + continue; + int fscod = p[4] >> 6; + int frmsizcod = p[4] & 0x3f; + int fsize = ac3_frame_size_tab[frmsizcod][fscod] * 2; + + bsid -= 8; + if(bsid < 0) + bsid = 0; + int sr = ac3_freq_tab[fscod] >> bsid; + if(sr) { int duration = 90000 * 1536 / sr; int64_t dts = st->st_curdts;