2008-11-26 74 views
2

給定一個從FFMPEG的avcodec_decode_video()函數指向AVFrame的指針如何將圖像複製到DirectX表面? (假設我有一個指向適當大小的DX X8R8G8B8表面的指針。)FFMPEG幀到DirectX表面

謝謝。

John。

回答

4

您可以使用FFMPEG的img_convert()函數同時將圖像複製到您的曲面並將其轉換爲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(); 
+0

謝謝,亞當。這幾乎是我最終的結果。 :) – 2009-01-13 13:40:34