AVClass 和AVOption
ffmpeg库中源码结构体中大量使用了这两个结构体,本人菜鸟一枚,正学习入门,特写一遍文章分析一下其来龙去脉
其主要作用是通过传入字符串修改或获取结构体内部成员变量的值。试想如果没有一套可复用的机制,每个结构体都需要写一套函数去set和get其成员变量的值,这会导致代码臃肿。
源代码实例:
每一个想复用该机制的结构体需保证其第一个成员变量为AVClass *,为什么呢?
最后总结一下是怎么设置test_struct成员变量的值,通过test_struct的地址可以访问到其成员变量AVClass *class,而class保存了全局的结构体数组test_class的地址,该结构体中的option字段又保存了test_options数组的地址。test_option数组相当于一张表,可以通过查询每一行中的name找到其对应变量的地址,然后根据变量类型对其赋值。其中每一行的第二个字段为该变量对应于结构体首地址的偏移,常量为0.
能够获取到地址,自然就能通过创建相应类型的指针指向它,然后通过该指针间接赋值。
ffmpeg中的AVClass 和 AVOption入门学习
最新推荐文章于 2023-09-25 11:31:51 发布