Apply FFmpeg palette fix to examination too; fix build with old FFmpeg.
authorCarl Hetherington <cth@carlh.net>
Thu, 20 Feb 2020 16:38:11 +0000 (17:38 +0100)
committerCarl Hetherington <cth@carlh.net>
Thu, 20 Feb 2020 16:38:11 +0000 (17:38 +0100)
src/lib/examine_ffmpeg_subtitles_job.cc
src/lib/ffmpeg_decoder.cc

index af548b7944529100d2d57e3ec925e85f6255f6e4..b9d5f54e5d09385f21406a52683dd4cfbe60abd7 100644 (file)
@@ -82,16 +82,17 @@ ExamineFFmpegSubtitlesJob::run ()
                                                /* sub_p looks up into a BGRA palette which is here
                                                   (i.e. first byte B, second G, third R, fourth A)
                                                */
-                                               uint32_t const * palette = (uint32_t *) rect->pict.data[1];
+                                               uint8_t const * palette = rect->pict.data[1];
 #else
                                                /* sub_p looks up into a BGRA palette which is here
                                                   (i.e. first byte B, second G, third R, fourth A)
                                                */
-                                               uint32_t const * palette = (uint32_t *) rect->data[1];
+                                               uint8_t const * palette = rect->data[1];
 #endif
                                                for (int j = 0; j < rect->nb_colors; ++j) {
-                                                       RGBA c ((palette[j] & 0xff0000) >> 16, (palette[j] & 0xff00) >> 8, palette[j] & 0xff, (palette[j] & 0xff000000) >> 24);
+                                                       RGBA c (palette[2], palette[1], palette[0], palette[3]);
                                                        _content->subtitle_stream()->set_colour (c, c);
+                                                       palette += 4;
                                                }
                                        }
                                }
index 77b608fa86b92a7c7734e9a0c1b835aa45c9d5bc..350362478e92dfb7522e9f8ffdd7d666ddd4d656 100644 (file)
@@ -626,23 +626,23 @@ FFmpegDecoder::decode_bitmap_subtitle (AVSubtitleRect const * rect, ContentTime
 #ifdef DCPOMATIC_HAVE_AVSUBTITLERECT_PICT
        /* Start of the first line in the subtitle */
        uint8_t* sub_p = rect->pict.data[0];
-       /* sub_p looks up into a BGRA palette which is here
+       /* sub_p looks up into a BGRA palette which is at rect->pict.data[1];
           (i.e. first byte B, second G, third R, fourth A)
        */
-       uint32_t const * palette = (uint32_t *) rect->pict.data[1];
+       uint8_t const * palette = rect->pict.data[1];
 #else
        /* Start of the first line in the subtitle */
        uint8_t* sub_p = rect->data[0];
        /* sub_p looks up into a BGRA palette which is at rect->data[1].
           (first byte B, second G, third R, fourth A)
        */
+       uint8_t const * palette = rect->data[1];
 #endif
        /* And the stream has a map of those palette colours to colours
           chosen by the user; created a `mapped' palette from those settings.
        */
        map<RGBA, RGBA> colour_map = ffmpeg_content()->subtitle_stream()->colours ();
        vector<RGBA> mapped_palette (rect->nb_colors);
-       uint8_t const * palette = rect->data[1];
        for (int i = 0; i < rect->nb_colors; ++i) {
                RGBA c (palette[2], palette[1], palette[0], palette[3]);
                map<RGBA, RGBA>::const_iterator j = colour_map.find (c);