From 6af7c63f2883c87e87eb657e8b20b527258738b0 Mon Sep 17 00:00:00 2001 From: popcornmix Date: Mon, 16 Sep 2019 16:04:28 +0100 Subject: [PATCH] DVDOverlayCodecFFmpeg: Fix for distorted subtitles in 3D modes See: https://github.com/xbmc/xbmc/issues/16362 --- .../DVDCodecs/Overlay/DVDOverlayCodecFFmpeg.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/xbmc/cores/VideoPlayer/DVDCodecs/Overlay/DVDOverlayCodecFFmpeg.cpp b/xbmc/cores/VideoPlayer/DVDCodecs/Overlay/DVDOverlayCodecFFmpeg.cpp index aece3388f440f..17584fc59f84c 100644 --- a/xbmc/cores/VideoPlayer/DVDCodecs/Overlay/DVDOverlayCodecFFmpeg.cpp +++ b/xbmc/cores/VideoPlayer/DVDCodecs/Overlay/DVDOverlayCodecFFmpeg.cpp @@ -233,7 +233,8 @@ CDVDOverlay* CDVDOverlayCodecFFmpeg::GetOverlay() } RENDER_STEREO_MODE render_stereo_mode = CServiceBroker::GetWinSystem()->GetGfxContext().GetStereoMode(); - if (render_stereo_mode != RENDER_STEREO_MODE_OFF) + if (render_stereo_mode != RENDER_STEREO_MODE_OFF && + m_pCodecContext->codec_id != AV_CODEC_ID_HDMV_PGS_SUBTITLE) { if (rect.h > m_height / 2) { @@ -262,8 +263,18 @@ CDVDOverlay* CDVDOverlayCodecFFmpeg::GetOverlay() overlay->height = rect.h; overlay->bForced = rect.flags != 0; - overlay->source_width = m_width; - overlay->source_height = m_height; + if (m_pCodecContext->codec_id == AV_CODEC_ID_HDMV_PGS_SUBTITLE) + { + // For PGS subtitles we don't set source_width and source_height here. + // Later this will lead to 'video alignment' being chosen for that subtitle. + overlay->source_width = 0; + overlay->source_height = 0; + } + else + { + overlay->source_width = m_width; + overlay->source_height = m_height; + } uint8_t* s = rect.data[0]; uint8_t* t = overlay->data;