Cadre FFMPEG sur une surface DirectX
Question
Étant donné le pointeur sur un AVFrame à partir de la fonction avcodec_decode_video
() de FFMPEG, comment copier l'image sur une surface DirectX? (Supposons que je dispose d'un pointeur sur une surface DX X8R8G8B8 de taille appropriée.)
Merci.
John.
La solution
Vous pouvez utiliser la fonction img_convert () de FFMPEG pour copier simultanément l'image sur votre surface et la convertir au format RVB. Voici quelques lignes de code collées à partir d'un projet récent du mien qui a fait la même chose (même si j'utilisais SDL au lieu 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();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow