Fix subtitle_id to work with _TEXT and _ASS subtitles (fixes #969).
authorCarl Hetherington <cth@carlh.net>
Tue, 4 Oct 2016 10:54:45 +0000 (11:54 +0100)
committerCarl Hetherington <cth@carlh.net>
Tue, 4 Oct 2016 10:54:45 +0000 (11:54 +0100)
ChangeLog
src/lib/ffmpeg.cc
src/lib/ffmpeg_subtitle_stream.cc

index 1ff4190578f12fdb66c3031984365bde60f1568b..5e3694e66f6ab60ed8dd99b0ea20259da733d420 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2016-10-04  c.hetherington  <cth@carlh.net>
+
+       * Fix error when examining files with embedded subtitles in some cases (#969).
+
 2016-10-04  Carl Hetherington  <cth@carlh.net>
 
        * Version 2.9.30 released.
index 4b95666b800cbf6525314b5525c4f6645bf61201..af6c8e1674e66c12b01dcafbbc2f428ddc96d561 100644 (file)
@@ -282,21 +282,27 @@ FFmpeg::subtitle_id (AVSubtitle const & sub)
        digester.add (sub.pts);
        for (unsigned int i = 0; i < sub.num_rects; ++i) {
                AVSubtitleRect* rect = sub.rects[i];
-               digester.add (rect->x);
-               digester.add (rect->y);
-               digester.add (rect->w);
-               digester.add (rect->h);
+               if (rect->type == SUBTITLE_BITMAP) {
+                       digester.add (rect->x);
+                       digester.add (rect->y);
+                       digester.add (rect->w);
+                       digester.add (rect->h);
 #ifdef DCPOMATIC_HAVE_AVSUBTITLERECT_PICT
-               int const line = rect->pict.linesize[0];
-               for (int j = 0; j < rect->h; ++j) {
-                       digester.add (rect->pict.data[0] + j * line, line);
-               }
+                       int const line = rect->pict.linesize[0];
+                       for (int j = 0; j < rect->h; ++j) {
+                               digester.add (rect->pict.data[0] + j * line, line);
+                       }
 #else
-               int const line = rect->linesize[0];
-               for (int j = 0; j < rect->h; ++j) {
-                       digester.add (rect->data[0] + j * line, line);
-               }
+                       int const line = rect->linesize[0];
+                       for (int j = 0; j < rect->h; ++j) {
+                               digester.add (rect->data[0] + j * line, line);
+                       }
 #endif
+               } else if (rect->type == SUBTITLE_TEXT) {
+                       digester.add (string (rect->text));
+               } else if (rect->type == SUBTITLE_ASS) {
+                       digester.add (string (rect->ass));
+               }
        }
        return digester.get ();
 }
index 627b0fef1c8b61b6890397c97282f4d42f7700af..cf3a8c0f2a1d2660ff8eec9a56a5acc8632b574c 100644 (file)
@@ -128,6 +128,7 @@ FFmpegSubtitleStream::add_image_subtitle (string id, ContentTimePeriod period)
 void
 FFmpegSubtitleStream::add_text_subtitle (string id, ContentTimePeriod period)
 {
+       cout << id << " " << to_string(period.from) << " " << to_string(period.to) << "\n";
        DCPOMATIC_ASSERT (_text_subtitles.find (id) == _text_subtitles.end ());
        _text_subtitles[id] = period;
 }