Фрейм FFMPEG на поверхность DirectX

Учитывая указатель на AVFrame из функции avcodec_decode_video() FFMPEG, как мне скопировать изображение на поверхность DirectX? (Предположим, у меня есть указатель на поверхность DX X8R8G8B8 подходящего размера.)

Спасибо.

Джон.


person John Richardson    schedule 26.11.2008    source источник


Ответы (1)


Вы можете использовать функцию 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();
person Adam Pierce    schedule 02.01.2009
comment
Спасибо, Адам. Примерно так я и закончил. :) - person John Richardson; 13.01.2009