将ID3D11Texture2D后台缓冲区传递给libx264编码器

时间:2019-01-17 14:26:58

标签: c++ directx x264 mpeg-4

我正在编写一个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();

        // ...?
    }
}

0 个答案:

没有答案