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

Carl Eugen Hoyos cehoyos at ag.or.at
Sun May 1 10:42:43 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:
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 22874e6..173509e 100644
--- a/libavformat/mpegts.c
+++ b/libavformat/mpegts.c
@@ -2441,9 +2441,6 @@ static int mpegts_probe(AVProbeData *p)
 #define CHECK_COUNT 10
 #define CHECK_BLOCK 100
 
-    if (check_count < CHECK_COUNT)
-        return 0;
-
     for (i = 0; i<check_count; i+=CHECK_BLOCK) {
         int left = FFMIN(check_count - i, CHECK_BLOCK);
         int score      = analyze(p->buf + TS_PACKET_SIZE     *i, TS_PACKET_SIZE     *left, TS_PACKET_SIZE     , NULL, 1);
@@ -2459,10 +2456,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