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

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

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

ffmpeg抽象出某一类,然后某一类的方法如何调用?你说这还不简单:

对象.对象方法()

或者

对象指针->对象方法()

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

其封装的形式,oopc普遍是这样的形式:

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

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

2.实例

源码中随处可见。

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

c 复制代码
//模拟了面向对象的方法调用,其内部实现都是 对象.对象方法,第一个形参是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);

等等等等,太多了。

相关推荐
程序员老陆21 小时前
FFmpeg libswresample 模块的关键函数swr_convert 到底在干嘛?
ffmpeg·音视频·格式转换·音频重采样
海兰21 小时前
ffmpeg-wasm 完整安装指南(Ubuntu 24.04)
ubuntu·ffmpeg·wasm
≮傷£≯√2 天前
QT配置FFmpeg
开发语言·qt·ffmpeg
Everbrilliant892 天前
Android FFmpeg 实战:从基础到播放器的完整技术解析
android·ffmpeg·ffmepg实战·音视频同步实现·ffmpegpractices·ffmpegpractice·opengl 视频渲染
苏灿烤鱼3 天前
从微信公众号内容到视频号视频:自动化视频生成的技术实现
人工智能·python·ffmpeg
桐桐桐3 天前
视频画面裁剪与尺寸压缩实战:ffmpeg crop/scale 用法与在线替代
ffmpeg·音视频·视频
程序员老陆3 天前
音频为什么不编码成“声卡格式”(例如S16)?因为声卡只负责响,编码器只负责省
ffmpeg·音视频
程序员老陆3 天前
FFmpeg -tune参数全景解析:zerolatency、film、animation 到底在调什么?
ffmpeg·音视频·编码
cpp_learner4 天前
FFmpeg 硬件解码全流程解析
ffmpeg
星花月4 天前
视频压缩为什么会变糊?从码率、分辨率到 H.264/H.265 的参数选择指南
ffmpeg·音视频·h.265·视频编解码·视频