| 4539 | // IMFVideoMixerBitmap |
| 4540 | |
| 4541 | STDMETHODIMP 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 | |
| 4585 | STDMETHODIMP CDX11VideoProcessor::UpdateAlphaBitmapParameters(const MFVideoAlphaBitmapParams *pBmpParms) |
| 4586 | { |
nothing calls this directly
no test coverage detected