ffmpeg | branch: master | Clément Bœsch <[email protected]> | Mon Mar 7 12:43:42 2016 +0100| [920f592b81c750d30dd87c752b110bddb430c4bc] | committer: Clément Bœsch
lavf/vplayerdec: support time durations with no ms specified Example found in the wild: 0:00:03:25.000 0:01:47:A legend is sung 0:01:50:Of when England was young 0:01:53:And knights|were brave and bold 0:01:59:The good king had died Reported-by: wm4 > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=920f592b81c750d30dd87c752b110bddb430c4bc --- libavformat/vplayerdec.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/libavformat/vplayerdec.c b/libavformat/vplayerdec.c index 860b778..2bb7f32 100644 --- a/libavformat/vplayerdec.c +++ b/libavformat/vplayerdec.c @@ -36,7 +36,8 @@ static int vplayer_probe(AVProbeData *p) char c; const unsigned char *ptr = p->buf; - if (sscanf(ptr, "%*d:%*d:%*d.%*d%c", &c) == 1 && strchr(": =", c)) + if ((sscanf(ptr, "%*d:%*d:%*d.%*d%c", &c) == 1 || + sscanf(ptr, "%*d:%*d:%*d%c", &c) == 1) && strchr(": =", c)) return AVPROBE_SCORE_MAX; return 0; } @@ -44,12 +45,12 @@ static int vplayer_probe(AVProbeData *p) static int64_t read_ts(char **line) { char c; - int hh, mm, ss, ms, len; + int hh, mm, ss, ms, n, len; - if (sscanf(*line, "%d:%d:%d.%d%c%n", - &hh, &mm, &ss, &ms, &c, &len) >= 5) { + if (((n = sscanf(*line, "%d:%d:%d.%d%c%n", &hh, &mm, &ss, &ms, &c, &len)) >= 5 || + (n = sscanf(*line, "%d:%d:%d%c%n", &hh, &mm, &ss, &c, &len)) >= 4) && strchr(": =", c)) { *line += len; - return (hh*3600LL + mm*60LL + ss) * 100LL + ms; + return (hh*3600LL + mm*60LL + ss) * 100LL + (n < 5 ? 0 : ms); } return AV_NOPTS_VALUE; } _______________________________________________ ffmpeg-cvslog mailing list [email protected] http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
