Mercurial > libavcodec.hg
changeset 12092:de9e45d04063 libavcodec
DCA: Occasionally a false XCH sync word can turn up after the core DTS data,
to verify the sync word the extension fsize field should be compared to
the core data length field.
Patch by nick.nbrereton@net
author | banan |
---|---|
date | Mon, 05 Jul 2010 08:16:43 +0000 |
parents | c2a1bb63bd30 |
children | 05f91a88f986 |
files | dca.c |
diffstat | 1 files changed, 7 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/dca.c Mon Jul 05 01:43:47 2010 +0000 +++ b/dca.c Mon Jul 05 08:16:43 2010 +0000 @@ -1298,7 +1298,13 @@ switch(bits) { case 0x5a5a5a5a: { int ext_base_ch = s->prim_channels; - int ext_amode; + int ext_amode, xch_fsize; + + /* validate sync word using XCHFSIZE field */ + xch_fsize = show_bits(&s->gb, 10); + if((s->frame_size != (get_bits_count(&s->gb) >> 3) - 4 + xch_fsize) && + (s->frame_size != (get_bits_count(&s->gb) >> 3) - 4 + xch_fsize + 1)) + continue; /* skip length-to-end-of-frame field for the moment */ skip_bits(&s->gb, 10);