FFMPEG Кадр на поверхность DirectX
Дан указатель на AVFrame из FFMPEG avcodec_decode_video
() функция, как мне скопировать изображение на поверхность DirectX? (Предположим, у меня есть указатель на поверхность DX X8R8G8B8 соответствующего размера.)
Благодарю.
Джон.
1 ответ
Решение
Вы можете использовать функцию img_convert () FFMPEG для одновременного копирования изображения на поверхность и преобразования его в формат RGB. Вот несколько строк кода, вставленных из моего недавнего проекта, который сделал похожую вещь (хотя я использовал SDL вместо DirectX):
AVFrame *frame;
avcodec_decode_video(_ffcontext, frame, etc...);
lockYourSurface();
uint8_t *buf = getPointerToYourSurfacePixels();
// Create an AVPicture structure which contains a pointer to the RGB surface.
AVPicture pict;
memset(&pict, 0, sizeof(pict));
avpicture_fill(&pict, buf, PIX_FMT_RGB32,
_ffcontext->width, _ffcontext->height);
// Convert the image into RGB and copy to the surface.
img_convert(&pict, PIX_FMT_RGB32, (AVPicture *)frame,
_context->pix_fmt, _context->width, _context->height);
unlockYourSurface();