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

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.kler.cn/news/341764.html

相关文章:

  • CGAL包围盒计算
  • ICDE 2024最新论文分享|BEEP:容量约束下能够对抗异常干扰的航运动态定价系统
  • (笔记)第三期书生·浦语大模型实战营(十一卷王场)–书生基础岛第6关---OpenCompass 评测 InternLM-1.8B 实践
  • 向日葵远程控制工具解析,2024四大远程软件盘点!
  • 如何使用ssm实现基于bootstrap的课程辅助教学网站的设计与实现+vue
  • Notepad++ 初学者指南
  • USB 鼠标的实现
  • Windows系统安装Docker
  • nacos源码修改持久化到postgreSQL数据库
  • minio集群部署
  • 计算机毕业设计 基于Python的老年人健康预警系统的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档
  • LinuxO(1)调度算法
  • 基于补全学习的时空数据自适应模型演化系统ComS2T
  • 简单认识 redis -数据类型命令
  • 鸿蒙开发(NEXT/API 12)【硬件(获取智慧出行连接状态)】车载系统
  • 数据库表操作
  • Unity3d动画插件DoTween使用指南
  • JeeSite 权限分配
  • 【ROS】机器人系统仿真-URDF集成Rviz基本流程
  • python全栈开发是什么?