00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 #include "avformat.h"
00023 #include "rawdec.h"
00024 
00025 static int h263_probe(AVProbeData *p)
00026 {
00027     uint64_t code= -1;
00028     int i;
00029     int valid_psc=0;
00030     int invalid_psc=0;
00031     int res_change=0;
00032     int src_fmt, last_src_fmt=-1;
00033     int last_gn=0;
00034 
00035     for(i=0; i<p->buf_size; i++){
00036         code = (code<<8) + p->buf[i];
00037         if ((code & 0xfffffc0000) == 0x800000) {
00038             src_fmt= (code>>2)&3;
00039             if(   src_fmt != last_src_fmt
00040                && last_src_fmt>0 && last_src_fmt<6
00041                && src_fmt<6)
00042                 res_change++;
00043 
00044             if((code&0x300)==0x200 && src_fmt){
00045                 valid_psc++;
00046                 last_gn=0;
00047             }else
00048                 invalid_psc++;
00049             last_src_fmt= src_fmt;
00050         } else if((code & 0xffff800000) == 0x800000) {
00051             int gn= (code>>(23-5)) & 0x1F;
00052             if(gn<last_gn){
00053                 invalid_psc++;
00054             }else
00055                 last_gn= gn;
00056         }
00057     }
00058 
00059 
00060     if(valid_psc > 2*invalid_psc + 2*res_change + 3){
00061         return 50;
00062     }else if(valid_psc > 2*invalid_psc)
00063         return 25;
00064     return 0;
00065 }
00066 
00067 FF_DEF_RAWVIDEO_DEMUXER(h263, "raw H.263", h263_probe, NULL, CODEC_ID_H263)