av_frame_unref()
一次,解码所有帧,然后拨打av_frame_alloc
一次。或者我应该为{em>每个框架致电av_frame_unref
/ av_frame_alloc()
av_frame_unref()
?一个。
av_frame_alloc()
(解码...)
B中。或者这个变种:
av_frame_unref()
(解码...)
submit
答案 0 :(得分:2)
AVFrame
一次,您只能在整个解码/编码过程中使用一个av_frame_alloc()
结构。av_frame_unref()
。av_frame_free()
释放帧结构及其所有缓冲区。请参阅ffmpeg的官方示例,了解如何使用它们: demuxing_decoding
答案 1 :(得分:1)
引用计算共享动态分配源的通用进程(即多个线程之间)。为了防止线程释放源并放置其他offside
位置,使用此机制。主要使用与对象关联的简单原子计数器实现。
那些访问源调用addref
的线程,这通常会使计数器增加1,当使用它完成的线程调用unref
时,这会减少计数器(如果ffmpeg这些是{如果我没有弄错的话,{1}}和av_frame_ref
。
这使得确保源在使用它的线程完成之前一直有效。
最后,如果计数器达到零,这意味着没有任何用户离开,最终安全地释放了源。
希望这可以解决一些含糊不清的问题。