Pregunta

Dado un puntero a un AVFrame desde la función avcodec_decode_video () de FFMPEG, ¿cómo copio la imagen a una superficie DirectX? (Suponga que tengo un puntero a una superficie DX X8R8G8B8 del tamaño adecuado).

Gracias.

John.

¿Fue útil?

Solución

Puede usar la función img_convert () de FFMPEG para copiar simultáneamente la imagen a su superficie y convertirla al formato RGB. Aquí hay algunas líneas de código pegadas de un proyecto mío reciente que hizo algo similar (aunque estaba usando SDL en lugar 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();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top