Work around width/height being 0 in subtitle_codec_context(), seen
authorCarl Hetherington <cth@carlh.net>
Mon, 3 Dec 2018 20:53:34 +0000 (20:53 +0000)
committerCarl Hetherington <cth@carlh.net>
Mon, 3 Dec 2018 20:53:34 +0000 (20:53 +0000)
in the wild in a MP4, apparently from a DVD rip.

src/lib/ffmpeg_decoder.cc

index 3d9e965a9d169ad3e66a014cb3cb4e0d7a750c1b..ce20997c84bcebefdc20dd2f90329155545cc505 100644 (file)
@@ -659,8 +659,19 @@ FFmpegDecoder::decode_bitmap_subtitle (AVSubtitleRect const * rect, ContentTime
                out_p += image->stride()[0] / sizeof (uint32_t);
        }
 
-       int const target_width = subtitle_codec_context()->width;
-       int const target_height = subtitle_codec_context()->height;
+       int target_width = subtitle_codec_context()->width;
+       if (target_width == 0 && video_codec_context()) {
+               /* subtitle_codec_context()->width == 0 has been seen in the wild but I don't
+                  know if it's supposed to mean something from FFmpeg's point of view.
+               */
+               target_width = video_codec_context()->width;
+       }
+       int target_height = subtitle_codec_context()->height;
+       if (target_height == 0 && video_codec_context()) {
+               target_height = video_codec_context()->height;
+       }
+       DCPOMATIC_ASSERT (target_width);
+       DCPOMATIC_ASSERT (target_height);
        dcpomatic::Rect<double> const scaled_rect (
                static_cast<double> (rect->x) / target_width,
                static_cast<double> (rect->y) / target_height,