summaryrefslogtreecommitdiff
path: root/libavformat/utils.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2007-03-27 19:28:40 +0000
committerMichael Niedermayer <michaelni@gmx.at>2007-03-27 19:28:40 +0000
commit7975048628e0e9900797283da1a5b6d98757d3e4 (patch)
tree49d1ae0474ce191a2e577193cce050273f99a552 /libavformat/utils.c
parent7ebf5927fd335b4f0178702cce38218e3289c615 (diff)
require at least a score of AVPROBE_SCORE_MAX/4 or reaching of PROBE_BUF_MAX
to detect a container fixes probing of mpeg_probe_fail.mpg Originally committed as revision 8535 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat/utils.c')
-rw-r--r--libavformat/utils.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/libavformat/utils.c b/libavformat/utils.c
index 8330a429f1..6ff6a7962a 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -237,13 +237,12 @@ int av_filename_number_test(const char *filename)
return filename && (av_get_frame_filename(buf, sizeof(buf), filename, 1)>=0);
}
-AVInputFormat *av_probe_input_format(AVProbeData *pd, int is_opened)
+static AVInputFormat *av_probe_input_format2(AVProbeData *pd, int is_opened, int *score_max)
{
AVInputFormat *fmt1, *fmt;
- int score, score_max;
+ int score;
fmt = NULL;
- score_max = 0;
for(fmt1 = first_iformat; fmt1 != NULL; fmt1 = fmt1->next) {
if (!is_opened == !(fmt1->flags & AVFMT_NOFILE))
continue;
@@ -255,14 +254,19 @@ AVInputFormat *av_probe_input_format(AVProbeData *pd, int is_opened)
score = 50;
}
}
- if (score > score_max) {
- score_max = score;
+ if (score > *score_max) {
+ *score_max = score;
fmt = fmt1;
}
}
return fmt;
}
+AVInputFormat *av_probe_input_format(AVProbeData *pd, int is_opened){
+ int score=0;
+ return av_probe_input_format2(pd, is_opened, &score);
+}
+
/************************************************************/
/* input media file */
@@ -423,6 +427,7 @@ int av_open_input_file(AVFormatContext **ic_ptr, const char *filename,
}
for(probe_size= PROBE_BUF_MIN; probe_size<=PROBE_BUF_MAX && !fmt; probe_size<<=1){
+ int score= probe_size < PROBE_BUF_MAX ? AVPROBE_SCORE_MAX/4 : 0;
/* read probe data */
pd->buf= av_realloc(pd->buf, probe_size);
pd->buf_size = get_buffer(pb, pd->buf, probe_size);
@@ -435,7 +440,7 @@ int av_open_input_file(AVFormatContext **ic_ptr, const char *filename,
}
}
/* guess file format */
- fmt = av_probe_input_format(pd, 1);
+ fmt = av_probe_input_format2(pd, 1, &score);
}
av_freep(&pd->buf);
}