FFMPEG Frame para DirectX Superfície
Pergunta
Dado um ponteiro para um AVFrame de avcodec_decode_video
do FFMPEG function () como faço para copiar a imagem para uma superfície DirectX? (Assume I tem um ponteiro para uma superfície DX X8R8G8B8 de tamanho apropriado.)
Graças.
John.
Solução
Você pode usar img_convert do FFMPEG () para copiar a imagem simultaneamente à sua superfície e convertê-lo para o formato RGB. Eis algumas linhas de código colado de um recente projeto de mina que fez uma coisa semelhante (embora eu estava usando SDL vez de 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();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow