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