From 504c45256809ddfa6c79dc31e38882d87b86af59 Mon Sep 17 00:00:00 2001 From: wm4 Date: Thu, 31 Oct 2013 18:16:30 +0100 Subject: sd_lavc: display DVD subs with unknown duration DVD subs (rarely) have subtitle events without end timestamp. The duration is unknown, and they should be displayed until they're replaced by the next event. FFmpeg fails hard to make us aware whether duration is unknown or actually 0, so we can't distinguish between these two cases. It fails at this twice: AVPacket.duration is set to 0 if duration is unknown, and AVSubtitle.end_display_time has the same issue. Add a hack that considers all bitmap subtitles with duration==0 as events with uknown length. I'd rather accidentally display a hidden subtitle (if they exist at all), instead of not displaying random subtitles at all. See github issue #325. --- sub/sd_lavc.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sub/sd_lavc.c b/sub/sd_lavc.c index a906e72f10..b03861025d 100644 --- a/sub/sd_lavc.c +++ b/sub/sd_lavc.c @@ -136,6 +136,12 @@ static void decode(struct sd *sd, struct demux_packet *packet) AVSubtitle sub; AVPacket pkt; + // libavformat sets duration==0, even if the duration is unknown. + // Assume there are no bitmap subs that actually use duration==0 for + // hidden subtitle events. + if (duration == 0) + duration = -1; + clear(priv); av_init_packet(&pkt); pkt.data = packet->buffer; -- cgit v1.2.3