Mercurial > libavcodec.hg
changeset 563:61442627f857 libavcodec
fixes fire.avi & subtitles.avi
author | michaelni |
---|---|
date | Wed, 17 Jul 2002 09:15:14 +0000 |
parents | 23e58889a108 |
children | 5329d156177a |
files | h263.c msmpeg4.c |
diffstat | 2 files changed, 34 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/h263.c Tue Jul 16 11:45:14 2002 +0000 +++ b/h263.c Wed Jul 17 09:15:14 2002 +0000 @@ -1654,14 +1654,14 @@ int level, run; if(len==0){ // illegal code - run= 65; + run= 66; level= MAX_LEVEL; }else if(len<0){ //more bits needed run= 0; level= code; }else{ if(code==rl->n){ //esc - run= 65; + run= 66; level= 0; }else{ run= rl->table_run [code] + 1;
--- a/msmpeg4.c Tue Jul 16 11:45:14 2002 +0000 +++ b/msmpeg4.c Wed Jul 17 09:15:14 2002 +0000 @@ -1625,7 +1625,7 @@ return 0; } - +//#define ERROR_DETAILS static inline int msmpeg4_decode_block(MpegEncContext * s, DCTELEM * block, int n, int coded) { @@ -1792,6 +1792,12 @@ #endif i+= run + 1; if(last) i+=192; +#ifdef ERROR_DETAILS + if(run==66) + fprintf(stderr, "illegal vlc code in ESC3 level=%d\n", level); + else if((i>62 && i<192) || i>192+63) + fprintf(stderr, "run overflow in ESC3 i=%d run=%d level=%d\n", i, run, level); +#endif } else { /* second escape */ #if MIN_CACHE_BITS < 23 @@ -1804,6 +1810,12 @@ i+= run + rl->max_run[run>>7][level/qmul] + run_diff; //FIXME opt indexing level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1); LAST_SKIP_BITS(re, &s->gb, 1); +#ifdef ERROR_DETAILS + if(run==66) + fprintf(stderr, "illegal vlc code in ESC2 level=%d\n", level); + else if((i>62 && i<192) || i>192+63) + fprintf(stderr, "run overflow in ESC2 i=%d run=%d level=%d\n", i, run, level); +#endif } } else { /* first escape */ @@ -1818,17 +1830,34 @@ level = level + rl->max_level[run>>7][(run-1)&63] * qmul;//FIXME opt indexing level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1); LAST_SKIP_BITS(re, &s->gb, 1); +#ifdef ERROR_DETAILS + if(run==66) + fprintf(stderr, "illegal vlc code in ESC1 level=%d\n", level); + else if((i>62 && i<192) || i>192+63) + fprintf(stderr, "run overflow in ESC1 i=%d run=%d level=%d\n", i, run, level); +#endif } } else { i+= run; level = (level ^ SHOW_SBITS(re, &s->gb, 1)) - SHOW_SBITS(re, &s->gb, 1); LAST_SKIP_BITS(re, &s->gb, 1); +#ifdef ERROR_DETAILS + if(run==66) + fprintf(stderr, "illegal vlc code level=%d\n", level); + else if((i>62 && i<192) || i>192+63) + fprintf(stderr, "run overflow i=%d run=%d level=%d\n", i, run, level); +#endif } if (i > 62){ i-= 192; if(i&(~63)){ - fprintf(stderr, "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y); - return -1; + if(i+192 == 64 && level/qmul==-1){ + fprintf(stderr, "ignoring overflow at %d %d\n", s->mb_x, s->mb_y); + break; + }else{ + fprintf(stderr, "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y); + return -1; + } } block[scan_table[i]] = level;