[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