From 00717665af4ddcf7a9290b97dd0891eb34251b0f Mon Sep 17 00:00:00 2001
From: Richard <peper03@yahoo.com>
Date: Wed, 13 Mar 2013 22:33:06 +0100
Subject: [PATCH] Ensure that DVD subpictures that don't explicitly set the
 'end' time are still shown. Also, handle 'CHG_COLCON'
 command by skipping over the data.  This should prevent any
 issues caused by incorrectly interpreting the data as
 subpicture commands.

---
 mythtv/libs/libmythtv/DVD/dvdringbuffer.cpp |   14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/mythtv/libs/libmythtv/DVD/dvdringbuffer.cpp b/mythtv/libs/libmythtv/DVD/dvdringbuffer.cpp
index a7ef500..197ec8c 100644
--- a/mythtv/libs/libmythtv/DVD/dvdringbuffer.cpp
+++ b/mythtv/libs/libmythtv/DVD/dvdringbuffer.cpp
@@ -1331,8 +1331,8 @@ bool DVDRingBuffer::DecodeSubtitles(AVSubtitle *sub, int *gotSubtitles,
     bool force_subtitle_display = false;
     sub->rects = NULL;
     sub->num_rects = 0;
-    sub->start_display_time = 0;
-    sub->end_display_time = 0;
+    sub->start_display_time = startTime;
+    sub->end_display_time = 0xFFFFFFFF;
 
     cmd_pos = GETBE16(spu_pkt + 2);
     while ((cmd_pos + 4) < buf_size)
@@ -1350,8 +1350,6 @@ bool DVDRingBuffer::DecodeSubtitles(AVSubtitle *sub, int *gotSubtitles,
             {
                 case 0x00:
                     force_subtitle_display = true;
-                    sub->start_display_time = startTime;
-                    sub->end_display_time   = 0xFFFFFFFF;
                 break;
                 case 0x01:
                     sub->start_display_time = ((date << 10) / 90) + startTime;
@@ -1402,6 +1400,14 @@ bool DVDRingBuffer::DecodeSubtitles(AVSubtitle *sub, int *gotSubtitles,
                     pos +=4;
                 }
                 break;
+                case 0x07:
+                {
+                    if ((buf_size - pos) < 2)
+                        goto fail;
+
+                    pos += GETBE16(spu_pkt + pos);
+                }
+                break;
                 case 0xff:
                 default:
                 goto the_end;
-- 
1.7.9.5

