diff options
author | Kacper Michajłow <kasper93@gmail.com> | 2017-08-15 22:50:51 +0300 |
---|---|---|
committer | Kacper Michajłow <kasper93@gmail.com> | 2017-08-15 23:30:06 +0300 |
commit | 4710d66dff7a2bba5a8091aa2b4abe0323b6f52a (patch) | |
tree | bc4b161675faa12f8de694172620b3ca2bcb0273 | |
parent | d928d98ec4c0125987f62a6fd2f44d722634c4f1 (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.cpp | 15 | ||||
-rw-r--r-- | src/Subtitles/RTS.h | 6 |
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
|