IT评测·应用市场-qidao123.com技术社区

标题: ffmpeg av_buffer_unref的逻辑实现; av_freep 和 av_freep函数的区别 [打印本页]

作者: 美丽的神话    时间: 3 天前
标题: ffmpeg av_buffer_unref的逻辑实现; av_freep 和 av_freep函数的区别
av_buffer_unref 是 FFmpeg 中用于管理引用计数和内存开释的核心函数,其内部实现机制如下:


一、核心流程


二、关键设计细节


三、代码逻辑简化示例

  1. [/code] [code]void av_buffer_unref(AVBufferRef **ref) {
  2.     if (!*ref)
  3.         return;
  4.     AVBuffer *buf = (*ref)->buffer;
  5.     // 原子操作减少引用计数
  6.     int refcount = atomic_fetch_sub_explicit(&buf->refcount, 1, memory_order_acq_rel);
  7.     if (refcount == 1) { // 引用归零
  8.         if (buf->free)   // 调用释放回调
  9.             buf->free(buf->opaque, buf->data);
  10.         if (buf->pool)   // 内存池回收逻辑
  11.             buffer_pool_release_buffer(buf->pool, buf);
  12.         av_free(buf);    // 释放AVBuffer结构体
  13.     }
  14.     av_freep(ref);       // 释放AVBufferRef并置空指针
  15. }
复制代码

四、关联机制


通过上述机制,av_buffer_unref 实现了高效且安全的内存管理,成为 FFmpeg 多模块资源共享和生命周期控制的底子。



av_freep  和 av_freep函数的区别


                
  1. uint8_t *data = av_malloc(100);
  2. av_free(data); // 释放内存,但 data 仍指向已释放的地址
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4