从现有的 
 Packet 
 拷贝一个新 
 Packet 
 的时候,有两种情况:  
 
 
 •  
 ①两个 
 Packet 
 的 
 buf 
 引用的是 
 同一数据缓存空间 
 ,这时 候要注意数据缓存空间的释放问题;  
 
 
 •  
 ②两个 
 Packet 
 的 
 buf 
 引用不同的数据缓存空间 
 ,每个 Packet都有数据缓存空间的 
 copy 
 ;  
 
 
 
 
  FFmpeg 是通过数据共享的形式 拷贝数据的,也就是通过浅拷贝完成数据的copy, 
 
  那么浅拷贝是有问题的,FFmpeg是如何解决这一问题的呢? 
 
  通过引用计数的方式来fix这个问题 
 
 
 
 
 
  更加精确的说明: 
 
 
 
 
 
  对于多个 
  AVPacket 
  共享同一个缓存空间, 
  FFmpeg 
  使用的 
  引 用计数的机制(reference-count 
  ) 
  :  
 
 
  
  ◼  
  初始化引用 
  计数为 
  0 
  ,只有真正分配 
  AVBuffer 
  的时候, 引用计数初始化为1 
  ;  
 
 
  
  ◼  
  当有新的 
  Packet 
  引用共享的缓存空间时, 
  就将引用计数 +1;  
 
 
  
  ◼  
  当释放了引用共享空间的 
  Packet 
  ,就将引用计数 
  -1 
  ;引 用计数为0 
  时,就释放掉引用的缓存空间 
  AVBuffer 
  。  
 
 
  
  ◼  
  AVFrame 
  也是采用同样的机制。  
 
 
  
  
  
 
  
 
 
 
![[ARM-2D 专题] arm-2d配套开发工具准备](https://img-blog.csdnimg.cn/direct/c27bf92df98444edb632e8f48e0bfd98.png)


















