2008-11-26 5 views
2

С помощью указателя на AVFrame из функции FFMPEG avcodec_decode_video(), как скопировать изображение на поверхность DirectX? (Предположим, у меня есть указатель на поверхность DX X8R8G8B соответствующего размера.)FFMPEG Frame to DirectX Surface

Спасибо.

John.

ответ

4

Вы можете использовать функцию img_convert() FFMPEG, чтобы одновременно копировать изображение на свою поверхность и преобразовывать его в формат 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

Спасибо, Адам. Это в значительной степени то, чем я закончил. :) –