[FFmpeg-devel] [RFC v2]lavf/mpegts: Return small probe score for very short transport streams

Carl Eugen Hoyos cehoyos at ag.or.at
Sun May 1 12:24:06 CEST 2016


Hi!

Debian uses the following as a regression test for aac in mpegts:
$ ffmpeg -f lavfi -i sine=d=0.1 -acodec aac -strict -2 out.ts
$ ffmpeg -i out.ts
(possibly simplified)

This worked in 2.8 when the default aac bitrate was 128k and the 
length of the output file 2632 bytes. Since f0a82124 the bitrate 
is 69k and the output file size 1880 bytes. For this size the 
mpegts probe function never returns a positive value.

Attached patch fixes Debian bug 823098 here (and does not crash 
probetest):
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=823098

Please comment, Carl Eugen
-------------- next part --------------
diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c
index f8fe91e..1f3be96 100644
--- a/libavformat/mpegts.c
+++ b/libavformat/mpegts.c
@@ -2482,7 +2482,7 @@ static int mpegts_probe(AVProbeData *p)
 #define CHECK_COUNT 10
 #define CHECK_BLOCK 100
 
-    if (check_count < CHECK_COUNT)
+    if (!check_count)
         return 0;
 
     for (i = 0; i<check_count; i+=CHECK_BLOCK) {
@@ -2500,10 +2500,15 @@ static int mpegts_probe(AVProbeData *p)
 
     ff_dlog(0, "TS score: %d %d\n", sumscore, maxscore);
 
-    if      (sumscore > 6) return AVPROBE_SCORE_MAX   + sumscore - CHECK_COUNT;
-    else if (maxscore > 6) return AVPROBE_SCORE_MAX/2 + sumscore - CHECK_COUNT;
-    else
+    if        (check_count >= CHECK_COUNT && sumscore > 6) {
+        return AVPROBE_SCORE_MAX   + sumscore - CHECK_COUNT;
+    } else if (check_count >= CHECK_COUNT && maxscore > 6) {
+        return AVPROBE_SCORE_MAX/2 + sumscore - CHECK_COUNT;
+    } else if (sumscore > 6) {
+        return 2;
+    } else {
         return 0;
+    }
 }
 
 /* return the 90kHz PCR and the extension for the 27MHz PCR. return


More information about the ffmpeg-devel mailing list