Я пишу программу на 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();
// ...?
}
}