2008-11-26 11 views
2

Étant donné un pointeur sur un AVFrame de la fonction avcodec_decode_video() de FFMPEG, comment copier l'image sur une surface DirectX? (Supposons que j'ai un pointeur vers une surface DX X8R8G8B8 de taille appropriée.)Cadre FFMPEG à la surface DirectX

Merci.

John.

Répondre

4

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 de mes projets récents qui ont fait une chose similaire (bien que j'utilise 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(); 
+0

Merci, Adam. C'est à peu près ce que j'ai fini avec. :) –