AVFrame 结构体分析

AVFrame 相关函数

AVFrame 引用计数

测试代码

Test_AVFrame.cpp

#include <iostream>using namespace std;extern "C"  // 指定函数是 C 语言函数,函数目标名不包含重载标识,C++ 中调用 C 函数需要使用 extern "C"
{// 引用 ffmpeg 头文件#include "libavcodec/avcodec.h"
}// 预处理指令导入库
#pragma comment(lib, "avcodec.lib")
#pragma comment(lib, "avutil.lib")int main()
{cout << "fitst ffmpeg" << endl;cout << avcodec_configuration() << endl;// 生成一个 AVFrame 对象AVFrame* frame1 = av_frame_alloc();int ret = 0;frame1->width = 400;frame1->height = 300;frame1->format = AV_PIX_FMT_ABGR;// 分配 buf 内存空间,16字节对齐方式,默认为32字节对齐ret = av_frame_get_buffer(frame1, 16);if (ret != 0){char buf[1024] = { 0 };av_strerror(ret, buf, sizeof(buf));cout << buf << endl;}if (frame1->data[0] != nullptr){cout << "frame->linesize[0] = " << frame1->linesize[0] << endl;}cout << "frame1->buf[0] ref count = " << av_buffer_get_ref_count(frame1->buf[0]) << endl;AVFrame* frame2 = av_frame_alloc();// 让 frame2 引用 frame1 的 buf,引用计数加一av_frame_ref(frame2, frame1);cout << "frame1->buf[0] ref count = " << av_buffer_get_ref_count(frame1->buf[0]) << endl;cout << "frame2->buf[0] ref count = " << av_buffer_get_ref_count(frame2->buf[0]) << endl;cout << "av_frame_unref(frame2)" << endl;// 将 frame2 中 buf 的引用计数减一,buf 引用计数减为0时,则销毁 buf 所占用的内存空间,并将它的 buf 置为空av_frame_unref(frame2);cout << "frame1->buf[0] ref count = " << av_buffer_get_ref_count(frame1->buf[0]) << endl;// 销毁一个 AVFrame 对象,并将它内部的 buf 引用计数减一,buf 引用计数减为0时,则销毁 buf 所占用的内存空间av_frame_free(&frame1);av_frame_free(&frame2);return 0;
}

测试结果

测试AVFrame的空间分配和引用计数接口相关推荐

  1. Unity中的资源管理-引用计数

    本文分享Unity中的资源管理-引用计数 在前面的文章中, 我们一起学习了对象池的基本原理和几种实现, 今天和大家继续聊聊另一个资源管理中比较重要的技术: 引用计数. GC的基础知识 GC(Garba ...

  2. 提高C++性能的编程技术笔记:引用计数+测试代码

    引用计数(reference counting):基本思想是将销毁对象的职责从客户端代码转移到对象本身.对象跟踪记录自身当前被引用的数目,在引用计数达到零时自行销毁.换句话说,对象不再被使用时自行销毁 ...

  3. 【Netty4】netty ByteBuf (二) 引用计数对象(reference counted objects)

    原文出处:http://netty.io/wiki/reference-counted-objects.html 相关文章: netty ByteBuf (一)如何创建ByteBuf对象 netty ...

  4. Reference counted Objects (引用计数对象) - 文章翻译

    原文地址:http://netty.io/wiki/reference-counted-objects.html 从Netty4开始,某些对象的饿生命周期由其引用计数来管理,因此,一旦不再使用,Net ...

  5. Java引用计数与实现

    引用计数(Reference Counting)可作为内存管理办法,也是老代jvm垃圾回收策略之一,原理简单但是仍有广泛的引用,如OkHttp,netty等. 回收原理 对象在创建实例的时候会在堆内存 ...

  6. iOS中引用计数内存管理机制分析

    在 iOS 中引用计数是内存的管理方式,虽然在 iOS5 版本中,已经支持了自动引用计数管理模式,但理解它的运行方式有助于我们了解程序的运行原理,有助于 debug 程序. 操作系统的内存管理分成堆和 ...

  7. cocos2d-x 从onEnter、onExit、 引用计数 谈内存泄露问题

    /// //author : zhxfl //date   : 2013.8.29 //email  : 291221622@qq.com //Adress : http://www.cnblogs. ...

  8. 【Android 内存优化】Java 内存模型 ( Java 虚拟机内存模型 | 线程私有区 | 共享数据区 | 内存回收算法 | 引用计数 | 可达性分析 )

    文章目录 一. Java 虚拟机内存模型 二. 程序计数器 ( 线程私有区 ) 三. 虚拟机栈 ( 线程私有区 ) 四. 本地方法栈 ( 线程私有区 ) 五. 方法区 ( 共享数据区 ) 1. 方法区 ...

  9. php zval_copy_static_var(),zval _ 引用计数 _ 变量分离 _ 写时拷贝

    zval.引用计数.变量分离.写时拷贝 我们一步步来理解 1.php语言特性 PHP是脚本语言,所谓脚本语言,就是说PHP并不是独立运行的,要运行PHP代码需要PHP解析器,用户编写的PHP代码最终都 ...

最新文章

  1. 开发打开设置洁面_用华为手机,这4个功能一定要打开,不然你的手机只会越用越卡!...
  2. [练习] 用PYTHON来优化网站中的图片
  3. oj上c语言编译错误,名字的漂亮度(华为OJ)C语言版本(提示格式错误,但是编译器没有报错,知道的网友提个意见)...
  4. reactjs中收集表单数据:非受控组件和受控组件
  5. 终于开通我自己的cnblogs了,自我恭喜下··
  6. oracle12c完全卸载工具_oracle完全卸载方法
  7. alpine linux安装ftp,如何在Alpine Linux上安装GLPK?
  8. CMU Database Systems - Sorting,Aggregation,Join
  9. 获取整数的最大值最小值
  10. 南航计算机科学与技术学院老师,南航计算机科学与技术学院导师介绍:孙涵
  11. 为什么Dell官方声卡驱动安装不上的原因分析与解决?
  12. C++学习第十课--构造函数详解、explicit与初始化列表笔记
  13. 学会这5种排版方式,设计能力分分钟就能提高
  14. python“渡劫”进阶期(继承、多态、私有化、异常捕获、类属性和类方法)
  15. 洛谷P2678 Java解法
  16. openfire 开发QQ群、微信群等固定群插件
  17. 软件工程毕业设计课题(57)微信小程序毕业设计JAVA投票评选小程序系统设计与实现
  18. 自动驾驶-目标检测-路标数据
  19. java双人对战五子棋(socket通信)
  20. 一缕夏风涌动,掠过翠绿色的日子

热门文章

  1. JMeter报告属性
  2. 矢量 报表 html,矢量文件是啥意思
  3. 截屏贴图神器Snipaste安装教程
  4. excel公式单元格注释_如何在Excel中隐藏注释,公式,溢出文本和网格线
  5. macOS终端颜色的设定:设定自己的LSCOLOR配色
  6. 程序控制打印word文档超出页边距的问题
  7. maven依赖冲突导致tomcat启动失败
  8. pose graph 说的很清晰的一篇文章
  9. 点击导航滚动到指定位置 (滑动到指定位置对应导航自动选中)Vue3+js
  10. 国际快递包裹跟踪软件——“Deliveries”