当前位置: 首页 > news >正文

ffmpeg面向对象——类所属的方法探索

ffmpeg是面向对象的思想写的代码,自然符合oopc的实现套路。这个也是oopc的通用法则。

1.类所属方法oopc的实现形式

ffmpeg抽象出某一类,然后某一类的方法如何调用?你说这还不简单:
对象.对象方法()
或者
对象指针->对象方法()

这是很简单粗暴的,但是ffmpeg,还有其他oopc的开源代码,一般都不会这么粗暴,都是用c函数再封装一层接口——原因在于要做一些容错检查,初始化等等等等。
其封装的形式,oopc普遍是这样的形式:

某类的函数(该类对象指针即this指针,形参,…)

那么判断某一函数属于哪一类的操作方法就简单了,查看第一个形参是哪个类的(它模拟了this指针)那它就属于哪个类的操作方法。

2.实例

源码中随处可见。

比如《ffmpeg面向对象——拉流协议匹配机制探索》探索过的,里面有URLContext类的方法调用,截取如下:

//模拟了面向对象的方法调用,其内部实现都是 对象.对象方法,第一个形参是this指针,
//oopc的实现套路是:对象指针->对象方法(this指针,形参1,...)
//调用URLContext 的协议open方法——
//uc->prot->url_open2(this指针,形参)或者uc->prot->url_open(this指针,形参)
int ffurl_connect(URLContext *uc, AVDictionary **options);//实质内部是调用URLContext的方法:s->prot->url_accept(this指针,形参)方法
int ffurl_accept(URLContext *s, URLContext **c);//s->prot->url_read(this指针,形参1, 形参2)
int ffurl_read(URLContext *h, unsigned char *buf, int size);//s->prot->url_write(this指针,形参1, 形参2)
int ffurl_write(URLContext *h, const unsigned char *buf, int size);

等等等等,太多了。

http://www.lryc.cn/news/459906.html

相关文章:

  • TensorRT-LLM七日谈 Day3
  • 如何使用Pandas库处理大型数据集?
  • XHR 创建对象
  • # 在执行 rpm 卸载软件使用 nodeps 参数时,报错 error: package nodeps is not installed 分析
  • C++的类和动态内存分配(深拷贝与浅拷贝)并实现自己的string类
  • 通过观测云 DataKit Extension 接入 AWS Lambda 最佳实践
  • MySQL-三范式 视图
  • 多线程(三):线程等待获取线程引用线程休眠线程状态
  • Hi3244 应用指导
  • 【LeetCode热题100】哈希
  • Java的四种循环语句
  • Qt杂记目录
  • 项目开发--基于docker实现模型容器化服务
  • C语言 | Leetcode C语言题解之第477题汉明距离总和
  • Bug剖析
  • HI3516DV500 相机部分架构初探
  • 训练yolo系列出现问题mAP, R, P等为零
  • 数字媒体技术基础:色度子采样(4:4:4、4:2:2 、4:2:0)
  • tkinter库的应用小示例:文本编辑器
  • 信息抽取数据集处理——RAMS
  • SpringBoot+XXL-JOB:高效定时任务管理
  • openpyxl -- 简介
  • 滚雪球学MySQL[8.3讲]:数据库中的JSON与全文检索详解:从数据存储到全文索引的高效使用
  • position定位静态定位/绝对定位/相对定位
  • 2024年09月CCF-GESP编程能力等级认证C++编程三级真题解析
  • Web自动化Demo-PHP+Selenium
  • Python速成笔记——知识(GUI自动化处理屏幕和按键输出)
  • 计算机是如何输入存储输出汉字、图片、音频、视频的
  • springboot系列--web相关知识探索五
  • 开源商城系统crmeb phpstudy安装配置