最近使用ffmpeg总会碰到视频帧拷贝的问题,其中av_frame_move_ref 就可以实现视频帧的拷贝功能。
函数原型:
void av_frame_move_ref(AVFrame *dst, AVFrame *src);
使用方法:
AVFrame *dst = av_frame_alloc();
AVFrame *src = av_frame_alloc();
//假设这里对src读取到视频帧,av_read_frame(ifmt_ctx, &pkt);
av_frame_unref(dst);//清空原dst里面的数据和信息//将src的数据指针和信息拷给dst,里面其实就改变一下指针的指向
av_frame_move_ref(dst , src);//如果后续不使用src ,就要释放,av_frame_move_ref只是重置src ,但是并没有释放src 。
av_frame_free(&src);
.......
//使用完dst 也记得释放
av_frame_free(&dst);
av_frame_move_ref是信息拷贝和数据指向改变,并没有释放源视频帧,所以最后记得释放源视频帧。而且,使用时目标视频帧空间也要申请和初始化。