C++ FFMPEG帧到DirectX表面

C++ FFMPEG帧到DirectX表面,c++,directx,ffmpeg,C++,Directx,Ffmpeg,给定一个指向FFMPEG的avcodec\u decode\u video()函数中的AVFrame的指针,如何将图像复制到DirectX曲面?(假设我有一个指向适当大小的DX X8R8G8B8曲面的指针。) 谢谢 John。您可以使用FFMPEG的img_convert()函数将图像同时复制到曲面并将其转换为RGB格式。下面是我最近的一个项目中粘贴的几行代码,它做了类似的事情(尽管我使用的是SDL而不是DirectX): 谢谢,亚当。这正是我最终得到的结果。:) AVFrame *fr

给定一个指向FFMPEG的
avcodec\u decode\u video
()函数中的AVFrame的指针,如何将图像复制到DirectX曲面?(假设我有一个指向适当大小的DX X8R8G8B8曲面的指针。)

谢谢


John。

您可以使用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();