我的目标是解码视频文件的多个帧,将解码后的帧累积到 FIFO 缓冲区中,然后再读取它们。我将数据包解码为我的 AVFRame mFrame:
avcodec_decode_video2(mCodecContext,mFrame,&frameFinished,&mPacket);
通常我可以将 YUV 帧从 mFrame->data[n][0] 复制到我的 FIFO 缓冲区,但我只是想尽可能地减少 memcpy 。因此,我不想复制 mFrame->data[n][0] 我只想将 mFrame(它比它指向的帧小得多)存储在缓冲区中,并且在读取时我可以获取它并到达数据。
我试图这样做,但没有奏效。AVFrames 是从缓冲区中获取的,但是当您在屏幕上显示它们时,视频就像冻结一样。您可能认为我使用相同的 mFrame 并在每次解码数据包时覆盖它,但我不是。我每次在解码循环中都创建一个新的 AVFrame*。
这个问题与 avcodec 的工作方式有关吗?有任何想法吗?
谢谢迈克