質問

FFMPEGの avcodec_decode_video ()関数からAVFrameへのポインターを指定すると、画像をDirectXサーフェスにコピーするにはどうすればよいですか? (適切なサイズのDX X8R8G8B8サーフェスへのポインターがあると仮定します。)

ありがとう。

ジョン。

役に立ちましたか?

解決

FFMPEGのimg_convert()関数を使用して、画像を表面にコピーすると同時に、RGB形式に変換できます。同様のことをした最近の私のプロジェクトから貼り付けられたコードの数行は次のとおりです(ただし、DirectXの代わりにSDLを使用していました):

    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();
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top