Mercurial > libavformat.hg
changeset 5179:cd0985411145 libavformat
Rewrite h263_probe().
The new code should detect h263 even if the first startcode is damaged or
somewhere else than the first byte. It also passes probetest v2 as just
posted on ffmpeg-dev.
author | michael |
---|---|
date | Mon, 14 Sep 2009 19:06:36 +0000 |
parents | 092a527cabc8 |
children | a026efc0ca86 |
files | raw.c |
diffstat | 1 files changed, 25 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/raw.c Mon Sep 14 17:15:18 2009 +0000 +++ b/raw.c Mon Sep 14 19:06:36 2009 +0000 @@ -455,14 +455,33 @@ #if CONFIG_H263_DEMUXER static int h263_probe(AVProbeData *p) { - int code; - const uint8_t *d; + uint64_t code= -1; + int i; + int valid_psc=0; + int invalid_psc=0; + int res_change=0; + int src_fmt, last_src_fmt=-1; - d = p->buf; - code = (d[0] << 14) | (d[1] << 6) | (d[2] >> 2); - if (code == 0x20) { + for(i=0; i<p->buf_size; i++){ + code = (code<<8) + p->buf[i]; + if ((code & 0xfffffc0000) == 0x800000) { + src_fmt= (code>>2)&3; + if( src_fmt != last_src_fmt + && last_src_fmt>0 && last_src_fmt<6 + && src_fmt<6) + res_change++; + + if((code&0x300)==0x200 && src_fmt){ + valid_psc++; + }else + invalid_psc++; + last_src_fmt= src_fmt; + } + } + if(valid_psc > 2*invalid_psc + 2*res_change + 2){ return 50; - } + }else if(valid_psc > 2*invalid_psc) + return 25; return 0; } #endif