Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mpc-hc/mpc-hc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKacper Michajłow <kasper93@gmail.com>2017-08-15 22:50:51 +0300
committerKacper Michajłow <kasper93@gmail.com>2017-08-15 23:30:06 +0300
commit4710d66dff7a2bba5a8091aa2b4abe0323b6f52a (patch)
treebc4b161675faa12f8de694172620b3ca2bcb0273
parentd928d98ec4c0125987f62a6fd2f44d722634c4f1 (diff)
Fixes after alpha mask recent changes.
- Do not call get() on empty pointer - Use one memset as multiple ones are faster, but are missing needed bound checking that would make code unnecessery complex - Init Effect struct with zeros.
-rw-r--r--src/Subtitles/RTS.cpp15
-rw-r--r--src/Subtitles/RTS.h6
2 files changed, 12 insertions, 9 deletions
diff --git a/src/Subtitles/RTS.cpp b/src/Subtitles/RTS.cpp
index 07eec6599..790e8ef53 100644
--- a/src/Subtitles/RTS.cpp
+++ b/src/Subtitles/RTS.cpp
@@ -858,30 +858,26 @@ CAlphaMaskSharedPtr CClipper::GetAlphaMask(const std::shared_ptr<CClipper>& clip
}
BYTE* pAlphaMask = m_pAlphaMask->get();
+ memset(pAlphaMask, (m_inverse ? 0x40 : 0), alphaMaskSize);
const BYTE* src = m_pOverlayData->mpOverlayBufferBody + m_pOverlayData->mOverlayPitch * yo + xo;
BYTE* dst = pAlphaMask + m_size.cx * y + x;
- memset(pAlphaMask, (m_inverse ? 0x40 : 0), m_size.cx * y + x);
if (m_inverse) {
for (ptrdiff_t i = 0; i < h; ++i) {
for (ptrdiff_t wt = 0; wt < w; ++wt) {
dst[wt] = 0x40 - src[wt];
}
- memset(dst + w, 0x40, m_size.cx - w);
-
src += m_pOverlayData->mOverlayPitch;
dst += m_size.cx;
}
} else {
for (ptrdiff_t i = 0; i < h; ++i) {
memcpy(dst, src, w * sizeof(BYTE));
- memset(dst + w, 0, m_size.cx - w);
src += m_pOverlayData->mOverlayPitch;
dst += m_size.cx;
}
}
- memset(dst, (m_inverse ? 0x40 : 0), alphaMaskSize - (dst - pAlphaMask));
if (m_effectType == EF_SCROLL) {
int height = m_effect.param[4];
@@ -3015,7 +3011,14 @@ STDMETHODIMP CRenderedTextSubtitle::Render(SubPicDesc& spd, REFERENCE_TIME rt, d
CPoint org2;
- BYTE* pAlphaMask = s->m_pClipper ? s->m_pClipper->GetAlphaMask(s->m_pClipper)->get() : nullptr;
+ BYTE* pAlphaMask = nullptr;
+
+ if (s->m_pClipper) {
+ const auto& ptr = s->m_pClipper->GetAlphaMask(s->m_pClipper);
+ if (ptr) {
+ pAlphaMask = ptr->get();
+ }
+ }
for (int k = 0; k < EF_NUMBEROFEFFECTS; k++) {
if (!s->m_effects[k]) {
diff --git a/src/Subtitles/RTS.h b/src/Subtitles/RTS.h
index ad275c60d..87b03f264 100644
--- a/src/Subtitles/RTS.h
+++ b/src/Subtitles/RTS.h
@@ -204,9 +204,9 @@ public:
class Effect
{
public:
- enum eftype type;
- int param[9];
- int t[4];
+ enum eftype type = {};
+ int param[9] = {};
+ int t[4] = {};
bool operator==(const Effect& rhs) const {
return type == rhs.type