目录架构:
libavcodec用于存放各个encode/decode模块,CODEC其实是Coder/Decoder的缩写,也就是编码解码器;用于各种类型声音/图像编解码
libavformat用于存放muxer/demuxer模块,对音频视频格式的解析;用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能;
其中库 libavcodec,libavformat用于对媒体文件进行处理,如格式的转换;
Libavfilter用于存放滤镜和滤镜相关的操作
libavutil集项工具,包含一些公共的工具函数;用于存放内存操作等辅助性模块,是一个通用的小型函数库,该库中实现了CRC校验码的产生,128位整数数学,最大公约数,整数开方,整数取对数,内存分配,大端小端格式的转换等功能
libavdevice:对输出输入设备的支持;
libpostproc:用于后期效果处理;
libswscale:用于视频场景比例缩放、色彩映射转换;
http://wenku.baidu.com/link?url=k6RO-Jj5maCIsihTrWrmAKf-BnY7oR5AzrCOOpSD44bTYpBipwbTyI3ExhSsDOARWm4MKgmzsxwVbT5GO24-fZ21MvG5DZsFghe3MHxPcfu —————几个关键结构体的简单介绍
http://www.cnblogs.com/tocy/p/ffmpeg-framework-analysis.html ——————插件的结构体定义的成员简单说明
http://blog.csdn.net/leixiaohua1020/article/details/12720427 ————ffmpeg面向对象简单探讨
http://blog.csdn.net/leixiaohua1020/article/details/11693997 —–FFMPEG中最关键的结构体之间的关系
整体上,ffmpeg的基本框架是使用类似面向对象的思想。整体的程序流程处理方式:
a. 注册 ——-实际上就是一个链表操作
b. 查找匹配——通过链表,找到指定的解码器、滤镜等
c. 底层插件赋值给上层—-实际上就是函数指针的利用,可以理解成父结构体保存一个指向子结构体的指针
编码器,解码器链表: —————–libavcodec/utils.