MCPcopy Create free account
hub / github.com/Aleksoid1978/VideoRenderer / SetAlphaBitmap

Method SetAlphaBitmap

Source/DX9VideoProcessor.cpp:3217–3273  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3215// IMFVideoMixerBitmap
3216
3217STDMETHODIMP CDX9VideoProcessor::SetAlphaBitmap(const MFVideoAlphaBitmap *pBmpParms)
3218{
3219 CheckPointer(pBmpParms, E_POINTER);
3220 CAutoLock cRendererLock(&m_pFilter->m_RendererLock);
3221
3222 CheckPointer(m_pD3DDevEx, E_ABORT);
3223 HRESULT hr = S_FALSE;
3224
3225 if (pBmpParms->GetBitmapFromDC && pBmpParms->bitmap.hdc) {
3226 HBITMAP hBitmap = (HBITMAP)GetCurrentObject(pBmpParms->bitmap.hdc, OBJ_BITMAP);
3227 if (!hBitmap) {
3228 return E_INVALIDARG;
3229 }
3230 DIBSECTION info = {0};
3231 if (!::GetObjectW(hBitmap, sizeof(DIBSECTION), &info)) {
3232 return E_INVALIDARG;
3233 }
3234 BITMAP& bm = info.dsBm;
3235 if (!bm.bmWidth || !bm.bmHeight || bm.bmBitsPixel != 32 || !bm.bmBits) {
3236 return E_INVALIDARG;
3237 }
3238
3239 hr = m_TexAlphaBitmap.CheckCreate(m_pD3DDevEx, D3DFMT_A8R8G8B8, bm.bmWidth, bm.bmHeight, D3DUSAGE_DYNAMIC);
3240 if (S_OK == hr) {
3241 D3DLOCKED_RECT lr;
3242 hr = m_TexAlphaBitmap.pSurface->LockRect(&lr, nullptr, D3DLOCK_DISCARD);
3243 if (S_OK == hr) {
3244 if (bm.bmWidthBytes == lr.Pitch) {
3245 memcpy(lr.pBits, bm.bmBits, bm.bmWidthBytes * bm.bmHeight);
3246 } else {
3247 LONG linesize = std::min<LONG>(bm.bmWidthBytes, lr.Pitch);
3248 BYTE* src = (BYTE*)bm.bmBits;
3249 BYTE* dst = (BYTE*)lr.pBits;
3250 for (LONG y = 0; y < bm.bmHeight; ++y) {
3251 memcpy(dst, src, linesize);
3252 src += bm.bmWidthBytes;
3253 dst += lr.Pitch;
3254 }
3255 }
3256 hr = m_TexAlphaBitmap.pSurface->UnlockRect();
3257 }
3258 }
3259 } else {
3260 return E_INVALIDARG;
3261 }
3262
3263 m_bAlphaBitmapEnable = SUCCEEDED(hr) && m_TexAlphaBitmap.pTexture;
3264
3265 if (m_bAlphaBitmapEnable) {
3266 m_AlphaBitmapRectSrc = { 0, 0, (LONG)m_TexAlphaBitmap.Width, (LONG)m_TexAlphaBitmap.Height };
3267 m_AlphaBitmapNRectDest = { 0, 0, 1, 1 };
3268
3269 hr = UpdateAlphaBitmapParameters(&pBmpParms->params);
3270 }
3271
3272 return hr;
3273}
3274

Callers

nothing calls this directly

Calls 1

CheckCreateMethod · 0.45

Tested by

no test coverage detected