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

Method SetAlphaBitmap

Source/DX11VideoProcessor.cpp:4541–4583  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

4539// IMFVideoMixerBitmap
4540
4541STDMETHODIMP CDX11VideoProcessor::SetAlphaBitmap(const MFVideoAlphaBitmap *pBmpParms)
4542{
4543 CheckPointer(pBmpParms, E_POINTER);
4544 CAutoLock cRendererLock(&m_pFilter->m_RendererLock);
4545
4546 HRESULT hr = S_FALSE;
4547
4548 if (pBmpParms->GetBitmapFromDC && pBmpParms->bitmap.hdc) {
4549 HBITMAP hBitmap = (HBITMAP)GetCurrentObject(pBmpParms->bitmap.hdc, OBJ_BITMAP);
4550 if (!hBitmap) {
4551 return E_INVALIDARG;
4552 }
4553 DIBSECTION info = {0};
4554 if (!::GetObjectW(hBitmap, sizeof(DIBSECTION), &info)) {
4555 return E_INVALIDARG;
4556 }
4557 BITMAP& bm = info.dsBm;
4558 if (!bm.bmWidth || !bm.bmHeight || bm.bmBitsPixel != 32 || !bm.bmBits) {
4559 return E_INVALIDARG;
4560 }
4561
4562 hr = m_TexAlphaBitmap.CheckCreate(m_pDevice, DXGI_FORMAT_B8G8R8A8_UNORM, bm.bmWidth, bm.bmHeight, Tex2D_DefaultShader);
4563 DLogIf(FAILED(hr), L"CDX11VideoProcessor::SetAlphaBitmap() : CheckCreate() failed with error {}", HR2Str(hr));
4564 if (S_OK == hr) {
4565 m_pDeviceContext->UpdateSubresource(m_TexAlphaBitmap.pTexture, 0, nullptr, bm.bmBits, bm.bmWidthBytes, 0);
4566 }
4567 } else {
4568 return E_INVALIDARG;
4569 }
4570
4571 m_bAlphaBitmapEnable = SUCCEEDED(hr) && m_TexAlphaBitmap.pShaderResource;
4572
4573 if (m_bAlphaBitmapEnable) {
4574 m_AlphaBitmapRectSrc = { 0, 0, (LONG)m_TexAlphaBitmap.desc.Width, (LONG)m_TexAlphaBitmap.desc.Height };
4575 m_AlphaBitmapNRectDest = { 0, 0, 1, 1 };
4576
4577 m_pAlphaBitmapVertex.Release();
4578
4579 hr = UpdateAlphaBitmapParameters(&pBmpParms->params);
4580 }
4581
4582 return hr;
4583}
4584
4585STDMETHODIMP CDX11VideoProcessor::UpdateAlphaBitmapParameters(const MFVideoAlphaBitmapParams *pBmpParms)
4586{

Callers

nothing calls this directly

Calls 3

HR2StrFunction · 0.85
CheckCreateMethod · 0.45
ReleaseMethod · 0.45

Tested by

no test coverage detected