]> granicus.if.org Git - handbrake/commitdiff
sync: fix delayed subtitles when burned-in
authorJohn Stebbins <jstebbins.hb@gmail.com>
Wed, 27 Jan 2016 16:27:45 +0000 (09:27 -0700)
committerJohn Stebbins <jstebbins.hb@gmail.com>
Wed, 27 Jan 2016 16:27:45 +0000 (09:27 -0700)
sync was delaying delivery of subtitles which caused burn-in late.

libhb/sync.c

index 23e96a9644332cfa92691e535b29cccc0fdc6019..9f95c3c53410f2b0eafb5b5129bcbc0807d7ce2e 100644 (file)
@@ -801,6 +801,20 @@ static void OutputBuffer( sync_common_t * common )
             if (hb_list_count(stream->in_queue) > stream->min_len)
             {
                 buf = hb_list_item(stream->in_queue, 0);
+                if (stream->type == SYNC_TYPE_SUBTITLE)
+                {
+                    // Forward subtitles immediately instead of interleaving.
+                    //
+                    // Normally, we interleave output by PTS in order to
+                    // optimize sync recovery.  This results in queueing
+                    // stream data that may not get delivered to it's
+                    // respecitive output fifo until the next input data
+                    // is received for that stream.  This isn't a problem
+                    // for continuous streams like audio and video, but
+                    // it delays subtitles unacceptably.
+                    out_stream = stream;
+                    break;
+                }
                 if (buf->s.start < pts)
                 {
                     pts = buf->s.start;