av_frame_make_writable不是深拷贝,仅确保帧数据可写,可能触发缓冲区拷贝但不分配新结构体;深拷贝则创建完全独立的副本,包含新结构体与数据。前者适用于原地修改(如滤镜、编码前处理),后者用于需同时保留原始帧与修改帧的场景。性能上,深拷贝开销更大,应优先使用make_writable。核心选择标准:是否需要同时持有修改前后两帧?需要则深拷贝,否则用make_writable。
一、核心结论
av_frame_make_writable不是深拷贝,两者解决的是完全不同维度的问题。
维度 |
| 深拷贝 AVFrame |
|---|---|---|
目的 | 确保当前 frame 的数据可写 | 创建一个与原始 frame完全独立的副本 |
AVFrame 结构体 | 不分配新结构体,操作入参本身 | 分配全新的 |