From 79f476bdfb59c9097795e90c51a2efef4b84967e Mon Sep 17 00:00:00 2001 From: computerfan Date: Sat, 21 May 2022 04:34:02 +0100 Subject: [PATCH] Fix use of iclip and movevc with larger values causing content invisible --- src/subtitles/RTS.cpp | 1 + src/subtitles/Rasterizer.cpp | 5 +++-- src/subtitles/Rasterizer.h | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/subtitles/RTS.cpp b/src/subtitles/RTS.cpp index 2756cd3..be5dfca 100644 --- a/src/subtitles/RTS.cpp +++ b/src/subtitles/RTS.cpp @@ -3756,6 +3756,7 @@ STDMETHODIMP CRenderedTextSubtitle::Render(SubPicDesc& spd, REFERENCE_TIME rt, d } else mod_vc.pos = vcpos2; mod_vc.enable = true; + mod_vc.isInverse = s->m_pClipper ? s->m_pClipper->m_inverse : false; } #endif break; diff --git a/src/subtitles/Rasterizer.cpp b/src/subtitles/Rasterizer.cpp index 5039982..6a24ee5 100644 --- a/src/subtitles/Rasterizer.cpp +++ b/src/subtitles/Rasterizer.cpp @@ -2162,6 +2162,7 @@ void MOD_MOVEVC::clear() curpos = CPoint(0, 0); hfull = 0; alphamask = NULL; + isInverse = false; } byte MOD_MOVEVC::GetAlphaValue(int wx, int wy) @@ -2178,9 +2179,9 @@ byte MOD_MOVEVC::GetAlphaValue(int wx, int wy) //check if the point is in canvas, in case of crash if (xInCanvas < 0 || xInCanvas >= spd.cx) - alpham = 0; + alpham = isInverse ? 0x40 : 0; // assume content outside canvas is visible when using iclip. mask is 6 bit else if (yInCanvas < 0 || yInCanvas >= spd.cy) - alpham = 0; + alpham = isInverse ? 0x40 : 0; else { if ((wx - pos.x) < -curpos.x + 1) alpham = 0; diff --git a/src/subtitles/Rasterizer.h b/src/subtitles/Rasterizer.h index edfa804..a816af7 100644 --- a/src/subtitles/Rasterizer.h +++ b/src/subtitles/Rasterizer.h @@ -41,6 +41,7 @@ class MOD_MOVEVC CPoint curpos; // output origin point int hfull; // full height byte* alphamask; + bool isInverse; MOD_MOVEVC();