if(buf == buf0)
first_frames= frames;
}
- if (first_frames>=3) return AVPROBE_SCORE_MAX/2+1;
- else if(max_frames>500)return AVPROBE_SCORE_MAX/2;
- else if(max_frames>=3) return AVPROBE_SCORE_MAX/4;
+ if (first_frames>=3) return AVPROBE_SCORE_EXTENSION + 1;
+ else if(max_frames>500)return AVPROBE_SCORE_EXTENSION;
+ else if(max_frames>=3) return AVPROBE_SCORE_EXTENSION / 2;
else if(max_frames>=1) return 1;
else return 0;
}
if(codec_id != expected_codec_id) return 0;
// keep this in sync with mp3 probe, both need to avoid
// issues with MPEG-files!
- if (first_frames >= 4) return AVPROBE_SCORE_MAX / 2 + 1;
+ if (first_frames >= 4) return AVPROBE_SCORE_EXTENSION + 1;
if (max_frames) {
int pes = 0, i;
if (pes)
max_frames = (max_frames + pes - 1) / pes;
}
- if (max_frames > 500) return AVPROBE_SCORE_MAX / 2;
- else if (max_frames >= 4) return AVPROBE_SCORE_MAX / 4;
+ if (max_frames > 500) return AVPROBE_SCORE_EXTENSION;
+ else if (max_frames >= 4) return AVPROBE_SCORE_EXTENSION / 2;
else if (max_frames >= 1) return 1;
else return 0;
}
int buf_size; /**< Size of buf except extra allocated bytes */
} AVProbeData;
-#define AVPROBE_SCORE_MAX 100 ///< maximum score, half of that is used for file-extension-based detection
+#define AVPROBE_SCORE_EXTENSION 50 ///< score for file extension
+#define AVPROBE_SCORE_MAX 100 ///< maximum score
+
#define AVPROBE_PADDING_SIZE 32 ///< extra allocated bytes at the end of the probe buffer
/// Demuxer will use avio_open, no opened file should be provided by the caller.
static int read_gab2_sub(AVStream *st, AVPacket *pkt) {
if (!strcmp(pkt->data, "GAB2") && AV_RL16(pkt->data+5) == 2) {
uint8_t desc[256];
- int score = AVPROBE_SCORE_MAX / 2, ret;
+ int score = AVPROBE_SCORE_EXTENSION, ret;
AVIStream *ast = st->priv_data;
AVInputFormat *sub_demuxer;
AVRational time_base;
d = p->buf;
if (d[0] == 'w' && d[1] == 'W' && d[2] == 0x10 && d[3] == 0)
- return 50;
+ return AVPROBE_SCORE_EXTENSION;
return 0;
}
}
}
if(seq && seq*9<=pic*10)
- return AVPROBE_SCORE_MAX/2;
+ return AVPROBE_SCORE_EXTENSION;
return 0;
}
max = markers[2] > markers[max] ? 2 : max;
if (markers[max] > 3 && p->buf_size / markers[max] < 32*1024 &&
markers[max] * 4 > sum * 3)
- return AVPROBE_SCORE_MAX/2+1;
+ return AVPROBE_SCORE_EXTENSION + 1;
return 0;
}
{
if (p->buf_size < 4 || memcmp(p->buf, "fLaC", 4))
return 0;
- return AVPROBE_SCORE_MAX/2;
+ return AVPROBE_SCORE_EXTENSION;
}
AVInputFormat ff_flac_demuxer = {
}
}
if(valid_psc > 2*invalid_psc + 6){
- return 50;
+ return AVPROBE_SCORE_EXTENSION;
}else if(valid_psc > 2*invalid_psc + 2)
- return 25;
+ return AVPROBE_SCORE_EXTENSION / 2;
return 0;
}
}
}
if(valid_psc > 2*invalid_psc + 2*res_change + 3){
- return 50;
+ return AVPROBE_SCORE_EXTENSION;
}else if(valid_psc > 2*invalid_psc)
- return 25;
+ return AVPROBE_SCORE_EXTENSION / 2;
return 0;
}
}
}
if(sps && pps && (idr||sli>3) && res<(sps+pps+idr))
- return AVPROBE_SCORE_MAX/2+1; // +1 for .mpg
+ return AVPROBE_SCORE_EXTENSION + 1; // 1 more than .mpg
return 0;
}
return 0;
/* return half certainty since this check is a bit sketchy */
- return AVPROBE_SCORE_MAX / 2;
+ return AVPROBE_SCORE_EXTENSION;
}
static int idcin_read_header(AVFormatContext *s)
if (av_filename_number_test(p->filename))
return AVPROBE_SCORE_MAX;
else
- return AVPROBE_SCORE_MAX / 2;
+ return AVPROBE_SCORE_EXTENSION;
}
return 0;
}
}
if (VOP >= VISO && VOP >= VOL && VO >= VOL && VOL > 0 && res==0)
- return AVPROBE_SCORE_MAX/2;
+ return AVPROBE_SCORE_EXTENSION;
return 0;
}
}
// probably valid EBML header but no recognized doctype
- return AVPROBE_SCORE_MAX/2;
+ return AVPROBE_SCORE_EXTENSION;
}
static MatroskaTrack *matroska_find_track_by_num(MatroskaDemuxContext *matroska,
return 0;
/* only return half certainty since this check is a bit sketchy */
- return AVPROBE_SCORE_MAX / 2;
+ return AVPROBE_SCORE_EXTENSION;
}
static int read_header(AVFormatContext *s)
case MKTAG('p','r','f','l'):
offset = AV_RB32(p->buf+offset) + offset;
/* if we only find those cause probedata is too small at least rate them */
- score = AVPROBE_SCORE_MAX - 50;
+ score = AVPROBE_SCORE_EXTENSION;
break;
default:
/* unrecognized tag */
}
// keep this in sync with ac3 probe, both need to avoid
// issues with MPEG-files!
- if (first_frames >= 4) return AVPROBE_SCORE_MAX / 2 + 1;
+ if (first_frames >= 4) return AVPROBE_SCORE_EXTENSION + 1;
if (max_frames) {
int pes = 0, i;
if (pes)
max_frames = (max_frames + pes - 1) / pes;
}
- if (max_frames > 500) return AVPROBE_SCORE_MAX / 2;
- else if (max_frames >= 4) return AVPROBE_SCORE_MAX / 4;
+ if (max_frames > 500) return AVPROBE_SCORE_EXTENSION;
+ else if (max_frames >= 4) return AVPROBE_SCORE_EXTENSION / 2;
else if (max_frames >= 1) return 1;
else return 0;
//mpegps_mp3_unrecognized_format.mpg has max_frames=3
if (size < 2)
return 0;
if (bs + size - 2 >= bs_end)
- return AVPROBE_SCORE_MAX / 4 - 1; //seems to be valid MPC but no header yet
+ return AVPROBE_SCORE_EXTENSION - 1; // seems to be valid MPC but no header yet
if (header_found) {
if (size < 11 || size > 28)
return 0;
}
if(vid+audio > invalid) /* invalid VDR files nd short PES streams */
- score= AVPROBE_SCORE_MAX/4;
+ score = AVPROBE_SCORE_EXTENSION / 2;
if(sys>invalid && sys*9 <= pspack*10)
- return pspack > 2 ? AVPROBE_SCORE_MAX/2+2 : AVPROBE_SCORE_MAX/4; // +1 for .mpg
+ return pspack > 2 ? AVPROBE_SCORE_EXTENSION + 2 : AVPROBE_SCORE_EXTENSION / 2; // 1 more than .mpg
if(pspack > invalid && (priv1+vid+audio)*10 >= pspack*9)
- return pspack > 2 ? AVPROBE_SCORE_MAX/2+2 : AVPROBE_SCORE_MAX/4; // +1 for .mpg
+ return pspack > 2 ? AVPROBE_SCORE_EXTENSION + 2 : AVPROBE_SCORE_EXTENSION / 2; // 1 more than .mpg
if((!!vid ^ !!audio) && (audio > 4 || vid > 1) && !sys && !pspack && p->buf_size>2048 && vid + audio > invalid) /* PES stream */
- return (audio > 12 || vid > 3) ? AVPROBE_SCORE_MAX/2+2 : AVPROBE_SCORE_MAX/4;
+ return (audio > 12 || vid > 3) ? AVPROBE_SCORE_EXTENSION + 2 : AVPROBE_SCORE_EXTENSION / 2;
//02-Penguin.flac has sys:0 priv1:0 pspack:0 vid:0 audio:1
//mp3_misidentified_2.mp3 has sys:0 priv1:0 pspack:0 vid:0 audio:6
}
}
if(seq && seq*9<=pic*10 && pic*9<=slice*10 && !pspack && !pes)
- return pic>1 ? AVPROBE_SCORE_MAX/2+1 : AVPROBE_SCORE_MAX/4; // +1 for .mpg
+ return pic>1 ? AVPROBE_SCORE_EXTENSION + 1 : AVPROBE_SCORE_EXTENSION / 2; // 1 more than .mpg
return 0;
}
if(!AV_RL16(&p->buf[52]) || !AV_RL16(&p->buf[54]))
{
if(!!AV_RL16(&p->buf[56]))
- return AVPROBE_SCORE_MAX/2;
+ return AVPROBE_SCORE_EXTENSION;
else
return 0;
}
if(p->buf[51] != 16)
- return AVPROBE_SCORE_MAX/4; // But we are going to assume 16bpp anyway ..
+ return AVPROBE_SCORE_EXTENSION / 2; // But we are going to assume 16bpp anyway ..
return AVPROBE_SCORE_MAX;
}
}
/* so we'll have more luck on extension... */
if (av_match_ext(p->filename, "nsv"))
- return AVPROBE_SCORE_MAX/2;
+ return AVPROBE_SCORE_EXTENSION;
/* FIXME: add mime-type check */
return score;
}
/* This check cannot overflow as tag_len has at most 28 bits */
if (p->buf_size < tag_len + 5)
/* EA3 header comes late, might be outside of the probe buffer */
- return AVPROBE_SCORE_MAX / 2;
+ return AVPROBE_SCORE_EXTENSION;
buf += tag_len;
/* MPEG files (like those ripped from VCDs) can also look like this;
* only return half certainty */
- return 50;
+ return AVPROBE_SCORE_EXTENSION;
}
static int str_read_header(AVFormatContext *s)
unsigned char *buf = pd->buf;
if (AV_RB16(buf) == PVA_MAGIC && buf[2] && buf[2] < 3 && buf[4] == 0x55)
- return AVPROBE_SCORE_MAX / 2;
+ return AVPROBE_SCORE_EXTENSION;
return 0;
}
while (p < p_end && *p != '\0') {
if (p + sizeof("c=IN IP") - 1 < p_end &&
av_strstart(p, "c=IN IP", NULL))
- return AVPROBE_SCORE_MAX / 2;
+ return AVPROBE_SCORE_EXTENSION;
while (p < p_end - 1 && *p != '\n') p++;
if (++p >= p_end)
return 0;
/* only return half certainty since this check is a bit sketchy */
- return AVPROBE_SCORE_MAX / 2;
+ return AVPROBE_SCORE_EXTENSION;
}
static int vmd_read_header(AVFormatContext *s)
if (sync_codes >= 6)
/* good amount of sync codes but with unexpected offsets */
- return AVPROBE_SCORE_MAX / 2;
+ return AVPROBE_SCORE_EXTENSION;
/* some sync codes were found */
- return AVPROBE_SCORE_MAX / 8;
+ return AVPROBE_SCORE_EXTENSION / 4;
}
static int spdif_read_header(AVFormatContext *s)
static int tak_probe(AVProbeData *p)
{
if (!memcmp(p->buf, "tBaK", 4))
- return AVPROBE_SCORE_MAX / 2;
+ return AVPROBE_SCORE_EXTENSION;
return 0;
}
const uint8_t *d = p->buf;
if (d[0] == 'T' && d[1] == 'T' && d[2] == 'A' && d[3] == '1')
- return 80;
+ return AVPROBE_SCORE_EXTENSION + 30;
return 0;
}
score = fmt1->read_probe(&lpd);
} else if (fmt1->extensions) {
if (av_match_ext(lpd.filename, fmt1->extensions)) {
- score = 50;
+ score = AVPROBE_SCORE_EXTENSION;
}
}
if (score > *score_max) {
}
/* a hack for files with huge id3v2 tags -- try to guess by file extension. */
- if (!fmt && is_opened && *score_max < AVPROBE_SCORE_MAX/4) {
+ if (!fmt && is_opened && *score_max < AVPROBE_SCORE_EXTENSION / 2) {
while ((fmt = av_iformat_next(fmt)))
if (fmt->extensions && av_match_ext(lpd.filename, fmt->extensions)) {
- *score_max = AVPROBE_SCORE_MAX/4;
+ *score_max = AVPROBE_SCORE_EXTENSION / 2;
break;
}
}
- if (!fmt && id3 && *score_max < AVPROBE_SCORE_MAX/4-1) {
+ if (!fmt && id3 && *score_max < AVPROBE_SCORE_EXTENSION / 2 - 1) {
while ((fmt = av_iformat_next(fmt)))
if (fmt->extensions && av_match_ext("mp3", fmt->extensions)) {
- *score_max = AVPROBE_SCORE_MAX/4-1;
+ *score_max = AVPROBE_SCORE_EXTENSION / 2 - 1;
break;
}
}
if (p->buf[3] != 0xC5 || AV_RL32(&p->buf[4]) != 4 || AV_RL32(&p->buf[20]) != 0xC)
return 0;
- return AVPROBE_SCORE_MAX/2;
+ return AVPROBE_SCORE_EXTENSION;
}
static int vc1t_read_header(AVFormatContext *s)
if (!memcmp(probe_packet->buf + 4, "00052200", 8))
return AVPROBE_SCORE_MAX;
- return AVPROBE_SCORE_MAX/2;
+ return AVPROBE_SCORE_EXTENSION;
}
static void add_metadata(AVFormatContext *s, uint32_t tag,
return 0;
/* return 1/2 certainty since this file check is a little sketchy */
- return AVPROBE_SCORE_MAX / 2;
+ return AVPROBE_SCORE_EXTENSION;
}
static int wsaud_read_header(AVFormatContext *s)
if (!channels || channels > 8 || !srate || srate > 192000 ||
bits_per_sample < 4 || bits_per_sample > 32)
return 0;
- return AVPROBE_SCORE_MAX/2;
+ return AVPROBE_SCORE_EXTENSION;
}
static int xa_read_header(AVFormatContext *s)