FFMPEG4.1源码分析之 结构体成员管理系统(APIs && Structures)

0 概述


FFMPEG中有一种非常棒的访问结构体成员,以及成员的子成员方法,且称为“结构体成员管理系统”吧,该系统涉及到几个FFMPEG中特别常见的结构体AVClass,AVOption,AVDictionary,AVDictionaryEntry等,以及一系列操作这些结构体的函数。也许,有的人会奇怪:C语言中访问结构体变量,直接使用结构体的"."运算符取值,直接使用等于号“=”赋值不就可以了嘛?为什么还要专门定义这么多结构体和函数,来设计这么复杂的系统来实现这么直接易得的功能呢?

传统意义上,如果结构体的成员变量类型为int,则需要使用整数来赋值;如果成员变量为double,则需要使用小数来赋值;如果成员变量类型为char *,才需要使用字符串来赋值。而“结构体成员管理系统”将这些赋值“归一化”了,统一使用字符串赋值。例如给int型成员变量qp设定值为20,只需传递两个字符串(一个是变量名称字符串“qp”,一个是变量值字符串“20”)就可以改变结构体成员变量的值;对于其他类型的成员变量,也可以以同样的方式来操作。

本文将详细讨论这个系统的实现细节:包括AVClass,AVOption,AVDictionary等结构体每个字段的详细解析;一些重要API的使用细节,以及调用/被调用的关系;并举几个实例来说明这些结构体和APIs如何构建这个“结构体成员管理系统”的。

本文是在参考学习雷神博客以及详细阅读FFMPEG4.1版本的源码后总结而出,参阅雷神博客以了解FFMPEG早期版本相关内容:

1  Strcutures


1.1 AVClass


1.2 AVOption


1.3 AVDictionary


2 APIs


 

写博客是个费脑费时的事,今天先写到这儿,未完待续

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值