Передать обратный буфер ID3D11Texture2D в кодировщик libx264 - PullRequest
0 голосов
/ 17 января 2019

Я пишу программу на C ++ для кодирования кадров из игры DirectX в формат H.264 / MPEG-4 AVC. Я сейчас использую libx264 без каких-либо других зависимостей.

У меня есть ID3D11Texture2D* разрешенный задний буфер следующего игрового кадра. Мне нужно каким-то образом скопировать это на вход x264_picture (очевидно, в формате YUV420P в соответствии с ограниченной справкой, которую я нашел), но я не могу найти какой-либо способ сделать это онлайн.

Вот мой код на данный момент:

void Fx264VideoEncoder::Fx264VideoEncoderImpl::InitFrameInputBuffer(const FTexture2DRHIRef& BackBuffer, FFrame& Frame)
{
    x264_picture_alloc(Frame.InputPicture, X264_CSP_I420, x264Parameters.i_width, x264Parameters.i_height);

    // We need to take the back buffer and convert it to an input format that libx264 can understand
    {
        ID3D11Texture2D* ResolvedBackBufferDX11 = (ID3D11Texture2D*)(GetD3D11TextureFromRHITexture(Frame.ResolvedBackBuffer)->GetResource());
        EPixelFormat PixelFormat = Frame.ResolvedBackBuffer->GetFormat();

        // ...?
    }
}
...