summaryrefslogtreecommitdiff
path: root/ffmpeg.c
diff options
context:
space:
mode:
authorMarton Balint <cus@passwd.hu>2013-11-23 17:48:49 +0100
committerMarton Balint <cus@passwd.hu>2013-11-28 21:30:03 +0100
commit31bb172be26aa7531a0917994d79ea5dc3709a0b (patch)
treedce78aa08e0aff93874605de2ec4ed4f1639d612 /ffmpeg.c
parent4d6f2ff524afc01f2af30677ca271a6387cf8657 (diff)
ffmpeg: ensure that -fix_sub_duration doesnt create subtitles with zero duration
When fix_sub_duration is used, and the duration fixing code is generating 0 duration, that is definitely zero, and not undefined or infinite (which may be the case for decoded AVSubtitles depending on the codec), so it is safe to drop it. It fixes teletext subtitle sources, when the subtitles are transmitted twice after each other for some reason. Signed-off-by: Marton Balint <cus@passwd.hu> Reviewed-by: Nicolas George <george@nsup.org>
Diffstat (limited to 'ffmpeg.c')
-rw-r--r--ffmpeg.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/ffmpeg.c b/ffmpeg.c
index 105efbcb22..6411ce3039 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -1807,19 +1807,23 @@ static int transcode_subtitles(InputStream *ist, AVPacket *pkt, int *got_output)
}
if (ist->fix_sub_duration) {
+ int end = 1;
if (ist->prev_sub.got_output) {
- int end = av_rescale(subtitle.pts - ist->prev_sub.subtitle.pts,
- 1000, AV_TIME_BASE);
+ end = av_rescale(subtitle.pts - ist->prev_sub.subtitle.pts,
+ 1000, AV_TIME_BASE);
if (end < ist->prev_sub.subtitle.end_display_time) {
av_log(ist->st->codec, AV_LOG_DEBUG,
- "Subtitle duration reduced from %d to %d\n",
- ist->prev_sub.subtitle.end_display_time, end);
+ "Subtitle duration reduced from %d to %d%s\n",
+ ist->prev_sub.subtitle.end_display_time, end,
+ end <= 0 ? ", dropping it" : "");
ist->prev_sub.subtitle.end_display_time = end;
}
}
FFSWAP(int, *got_output, ist->prev_sub.got_output);
FFSWAP(int, ret, ist->prev_sub.ret);
FFSWAP(AVSubtitle, subtitle, ist->prev_sub.subtitle);
+ if (end <= 0)
+ goto out;
}
if (!*got_output)