测试AVFrame的空间分配和引用计数接口
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的空间分配和引用计数接口相关推荐
- Unity中的资源管理-引用计数
本文分享Unity中的资源管理-引用计数 在前面的文章中, 我们一起学习了对象池的基本原理和几种实现, 今天和大家继续聊聊另一个资源管理中比较重要的技术: 引用计数. GC的基础知识 GC(Garba ...
- 提高C++性能的编程技术笔记:引用计数+测试代码
引用计数(reference counting):基本思想是将销毁对象的职责从客户端代码转移到对象本身.对象跟踪记录自身当前被引用的数目,在引用计数达到零时自行销毁.换句话说,对象不再被使用时自行销毁 ...
- 【Netty4】netty ByteBuf (二) 引用计数对象(reference counted objects)
原文出处:http://netty.io/wiki/reference-counted-objects.html 相关文章: netty ByteBuf (一)如何创建ByteBuf对象 netty ...
- Reference counted Objects (引用计数对象) - 文章翻译
原文地址:http://netty.io/wiki/reference-counted-objects.html 从Netty4开始,某些对象的饿生命周期由其引用计数来管理,因此,一旦不再使用,Net ...
- Java引用计数与实现
引用计数(Reference Counting)可作为内存管理办法,也是老代jvm垃圾回收策略之一,原理简单但是仍有广泛的引用,如OkHttp,netty等. 回收原理 对象在创建实例的时候会在堆内存 ...
- iOS中引用计数内存管理机制分析
在 iOS 中引用计数是内存的管理方式,虽然在 iOS5 版本中,已经支持了自动引用计数管理模式,但理解它的运行方式有助于我们了解程序的运行原理,有助于 debug 程序. 操作系统的内存管理分成堆和 ...
- cocos2d-x 从onEnter、onExit、 引用计数 谈内存泄露问题
/// //author : zhxfl //date : 2013.8.29 //email : 291221622@qq.com //Adress : http://www.cnblogs. ...
- 【Android 内存优化】Java 内存模型 ( Java 虚拟机内存模型 | 线程私有区 | 共享数据区 | 内存回收算法 | 引用计数 | 可达性分析 )
文章目录 一. Java 虚拟机内存模型 二. 程序计数器 ( 线程私有区 ) 三. 虚拟机栈 ( 线程私有区 ) 四. 本地方法栈 ( 线程私有区 ) 五. 方法区 ( 共享数据区 ) 1. 方法区 ...
- php zval_copy_static_var(),zval _ 引用计数 _ 变量分离 _ 写时拷贝
zval.引用计数.变量分离.写时拷贝 我们一步步来理解 1.php语言特性 PHP是脚本语言,所谓脚本语言,就是说PHP并不是独立运行的,要运行PHP代码需要PHP解析器,用户编写的PHP代码最终都 ...
最新文章
- 开发打开设置洁面_用华为手机,这4个功能一定要打开,不然你的手机只会越用越卡!...
- [练习] 用PYTHON来优化网站中的图片
- oj上c语言编译错误,名字的漂亮度(华为OJ)C语言版本(提示格式错误,但是编译器没有报错,知道的网友提个意见)...
- reactjs中收集表单数据:非受控组件和受控组件
- 终于开通我自己的cnblogs了,自我恭喜下··
- oracle12c完全卸载工具_oracle完全卸载方法
- alpine linux安装ftp,如何在Alpine Linux上安装GLPK?
- CMU Database Systems - Sorting,Aggregation,Join
- 获取整数的最大值最小值
- 南航计算机科学与技术学院老师,南航计算机科学与技术学院导师介绍:孙涵
- 为什么Dell官方声卡驱动安装不上的原因分析与解决?
- C++学习第十课--构造函数详解、explicit与初始化列表笔记
- 学会这5种排版方式,设计能力分分钟就能提高
- python“渡劫”进阶期(继承、多态、私有化、异常捕获、类属性和类方法)
- 洛谷P2678 Java解法
- openfire 开发QQ群、微信群等固定群插件
- 软件工程毕业设计课题(57)微信小程序毕业设计JAVA投票评选小程序系统设计与实现
- 自动驾驶-目标检测-路标数据
- java双人对战五子棋(socket通信)
- 一缕夏风涌动,掠过翠绿色的日子