vlc | branch: master | Francois Cartegnie <[email protected]> | Wed Aug 2 16:07:40 2017 +0200| [50b86e5bfea521ce75592bc68e66c7865eebc286] | committer: Francois Cartegnie
vout: drop or patch invalid dvd menu palette > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=50b86e5bfea521ce75592bc68e66c7865eebc286 --- src/video_output/vout_subpictures.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/video_output/vout_subpictures.c b/src/video_output/vout_subpictures.c index 5a72a3a06b..64a660ff34 100644 --- a/src/video_output/vout_subpictures.c +++ b/src/video_output/vout_subpictures.c @@ -745,6 +745,7 @@ static void SpuRenderRegion(spu_t *spu, video_palette_t *old_palette = region->fmt.p_palette; video_palette_t new_palette; bool b_opaque = false; + bool b_old_opaque = false; /* We suppose DVD palette here */ new_palette.i_entries = 4; @@ -757,14 +758,29 @@ static void SpuRenderRegion(spu_t *spu, if (old_palette->i_entries == new_palette.i_entries) { for (int i = 0; i < old_palette->i_entries; i++) + { for (int j = 0; j < 4; j++) changed_palette |= old_palette->palette[i][j] != new_palette.palette[i][j]; + b_old_opaque |= (old_palette->palette[i][3] > 0x00); + } } else { changed_palette = true; + b_old_opaque = true; } - /* Reject fully transparent broken palette for cropping */ - changed_palette &= b_opaque; + /* Reject or patch fully transparent broken palette used for dvd menus */ + if( !b_opaque ) + { + if( !b_old_opaque ) + { + /* replace with new one and fixed alpha */ + old_palette->palette[1][3] = 0x80; + old_palette->palette[2][3] = 0x80; + old_palette->palette[3][3] = 0x80; + } + /* keep old visible palette */ + else changed_palette = false; + } if( changed_palette ) *old_palette = new_palette; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
