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.

Était-ce utile?

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
scroll top