В конце я сопоставляю его с помощью:
Код: Выделить всё
hr = mComPtrlImmediateContext->Map(mComPtrlDestImage, subresource,
D3D11_MAP_READ_WRITE, 0, &moResource);//moResource is D3D11_MAPPED_SUBRESOURCE type.
Проблема в том, что moResource — это D3D11, а DXVAHD использует IDirect3DSurface9.
Итак, чтобы загрузить D3D11_MAPPED_SUBRESOURCE в DXVAHD IDirect3DSurface9 Я использую это:
Код: Выделить всё
HRESULT DXVAHDImageResizer::LoadResourceToSurface(D3D11_MAPPED_SUBRESOURCE* pResource)
{
HRESULT hr = S_OK;
D3DLOCKED_RECT lr = { 0 };
bool bNeedToUnlock = false;;
try
{
hr = mpSurface->LockRect(&lr, NULL, D3DLOCK_NOSYSLOCK);
if (FAILED(hr)) { goto done; }
bNeedToUnlock = true;
UINT iDestRowPitch = lr.Pitch;
UINT iSourceRowPitch = pResource->RowPitch;
BYTE* sptr = reinterpret_cast(pResource->pData);
BYTE* dptr = (byte*)lr.pBits;
int iPitchToCopy = min(iDestRowPitch, iSourceRowPitch);
for (int h = 0; h < moInputVideoInfoHeader.bmiHeader.biHeight; ++h)
{
memcpy(dptr, sptr, iPitchToCopy);
dptr += iDestRowPitch;
sptr += iSourceRowPitch;
}
}
catch (...) { DEBUG_BREAK_MY }
done:
if (bNeedToUnlock) mpSurface->UnlockRect();
return hr;
}
- Есть ли способ загрузить D3D11_MAPPED_SUBRESOURCE в IDirect3DSurface9 без использования процессора?
- Или у вас есть другой способ масштабировать изображение, хранящееся в D3D11_MAPPED_SUBRESOURCE, с помощью графического процессора без использования шейдеры?
7.12.24 Обновление для вопроса @Simon Mourier
Вот что у меня есть:
Код: Выделить всё
CComPtrCustom mComPtrlGDIImage;
desc.Width = SourceWidth;
desc.Height = SourceHeight;
desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
desc.ArraySize = 1;
desc.BindFlags = D3D11_BIND_FLAG::D3D11_BIND_RENDER_TARGET;
desc.MiscFlags = D3D11_RESOURCE_MISC_GDI_COMPATIBLE;
desc.SampleDesc.Count = 1;
desc.SampleDesc.Quality = 0;
desc.MipLevels = 1;
desc.CPUAccessFlags = 0;
desc.Usage = D3D11_USAGE_DEFAULT;
hr = mlDevice->CreateTexture2D(&desc, NULL, &mComPtrlGDIImage);
hr = mComPtrlDeskDupl->AcquireNextFrame(0, &lFrameInfo, &lDesktopResource);
hr = lDesktopResource->QueryInterface(IID_PPV_ARGS(&lAcquiredDesktopImage));
mComPtrlImmediateContext->CopySubresourceRegion(mComPtrlGDIImage,
0, 0, 0, 0, lAcquiredDesktopImage, 0, &box);
Теперь я хочу масштабировать его, скажем, до 1080P. Как это сделать?
Подробнее здесь: https://stackoverflow.com/questions/792 ... -presource
Мобильная версия