NV12 Поверхность неожиданно обрезается и смешивается, когда она копируется в буфер, используя StretchRect - PullRequest
0 голосов
/ 31 октября 2019

Я разрабатываю плеер, используя DirectX. Я использую Dxva2 для декодирования кадра на NV12 IDirect3DSurface9.

На некоторых компьютерах, когда я копирую поверхность в буфер, используя StretchRect, рамка выглядит как обрезанная (левая часть рамки). Отображаемая часть разрезается на 5 частей и расплавляется.

Я копирую декодированную рамку NV12 в файл, и рамка имеет отлично . Я скопировал фрейм X8R8G8B8 из буфера в файл после StretchRect, и фрейм выглядит как bad .

Есть ли у вас какие-либо идеи?

Инициализация буфера:

D3DPRESENT_PARAMETERS d3dpp;
d3dpp = { 0 };
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
d3dpp.BackBufferCount = 1;
d3dpp.BackBufferWidth = 1280;
d3dpp.BackBufferHeight = 720;
d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
d3dpp.SwapEffect = D3DSWAPEFFECT_COPY;
d3dpp.hDeviceWindow = (HWND)hwnd;
d3dpp.Windowed = TRUE;
d3dpp.EnableAutoDepthStencil = FALSE;
d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;

Создание устройства:

CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_MULTITHREADED | D3DCREATE_FPU_PRESERVE, &d3dpp, &pD3DDev);

Получение буфера:

pD3DDev->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &pBackBuffer);

Передача кадра в буфер:

pD3DDev->StretchRect(surf, NULL, pBackBuffer, rectTarget, D3DTEXF_LINEAR);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...