FFmpeg学习(三)-- libavutil 代码组成
libavutil库是一个实用的库,以提升多媒体编程的便捷性。它包含安全的可移植字符串函数、随机数生成器、数据结构、额外的数学函数、密码学和多媒体相关功能(如像素枚举和样本格式)。它不是libavcodec和libavformat所需的代码库。 libavutil目录下的aarch64、arm、avr32、bfin、loongarch、mips、ppc、sh4、tomi、x86目录内容为基于CPU的特定功能实现,一般均包含有汇编代码。
libavutil中包含的功能如下:(基于v5.0版本)
- adler32.h/.c: Adler-32算法的实现
- Adler-32是Mark Adler发明的校验和算法,和32位CRC校验算法一样,都是保护数据防止意外更改的算法。
- Adler-32通过求解两个16位的数值A、B实现,并将结果连结成一个32位整数.A就是字符串中每个字节的和,而B是A在相加时每一步的阶段值之和。在Adler-32开始运行时,A初始化为1,B初始化为0,最后的校验和要模上65521(继216之后的最小素数)。
- aes.h/.c/_ctr.c/_ctr.h/_internal.h: AES算法的实现
- AES的全称是Advanced Encryption Standard,意思是高级加密标准。
- AES要求分组大小为128位,密钥可以为128位、192位、256位。密钥长度每增加64位,算法的循环次数就增加2轮,128位循环10轮、192位循环12轮、256位循环14轮。
- aes_ctr中为AES算法的CTR模式的实现。
- audio_fifo.h/.c: audio 先入先出队列的实现
- audio_fifo基于av_fifo实现,封装了audio buffer相关的计算。即根据sample_fmt、channels、nb_samples计算每个buffer的大小。
- avassert.h: 定义了av_assert宏
- av_assert宏用于当条件为false时,输出log,直接退出程序。
- av_assert1、av_assert2用于代码速度优化。
- avstring.h/.c/avsscanf.c:定义了字符数组的操作函数
- av_strstart/av_stristart: 查找str是否以pfx开头。
- av_stristr: 忽略大小写,从haystack查找字符串needle
- av_strnstr:在从haystack开始的hay_length个字节中查找字符串needle
- av_strlcpy:字符串复制
- av_strlcat:字符串拼接
- av_strlcatf: 类似vsnprintf,用参数化方式拼接字符串
- av_strnlen: 计算字符串长度
- av_asprintf:创建格式化字符串,并返回。
- av_strtok/av_get_token: 用指定的字符串delim分割字符串,然后av_get_token依次获取分割项
- av_isdigit: 判断字符是否为数字
- av_isgraph: 判断字符是否可见
- av_isspace: 判断字符是否为空格
- av_toupper/av_tolower: 转换字符的大小写
- av_isxdigit: 判断字符是否为数字或字母
- av_strcasecmp/av_strncasecmp: 字符串对比
- av_strireplace: 字符串替换
- av_basename: 从全路径字符串中分离文件名
- av_dirname: 从全路径字符串中分离目录名
- av_match_name: 从逗号分割的字符串中查找是否匹配项,如果存在ALL,则也会匹配
- av_append_path_component: 在目录名后面追加文件名
- av_escape: 替换字符串中的特殊字符
- av_utf8_decode: 解码一个utf8字符串
- av_match_list: 查找两个字符串列表中是否有匹配项
- av_sscanf:avsscanf.c 中实现了av_sscanf函数,类似C函数sscanf,用于实现从字符串中获得数据。
- avutils.h/utils.c: 辅助函数:
- av_get_media_type_string:将enum AVMediaType的值转换为字符串
- av_get_picture_type_char:将enum AVPictureType 转换为字符串
- av_x_if_null: 如果p为null则返回x
- av_int_list_length_for_size: 计算list中的元素个数
- av_fopen_utf8: 打开一个文件名为UTF8编码的文件
- av_get_time_base_q: 返回一个以AV_TIME_BASE为分母的分数
- av_fourcc2str/av_fourcc_make_string: Fourcc转字符串
- base64.h/.c: base64算法的实现:
- av_base64_decode: 将base64字符串转为原始字符串
- av_base64_encode: 将原始字符串转为base64格式的字符串
- blowfish.h/.c: blowfish 加密算法
- bprint.h/*.c: 类似stringbuilder,实现字符串的动态扩展。
- bswap.h: 16、32、64位整数的前后交换
- buffer.h/.c/_internal.h: AVBuffer及buffer 池的实现,
- AVBuffer and AVBufferRef 是两个核心的对象,AVBuffer不能被外部访问,外部API通过AVBufferRef操作AVBuffer.
- av_buffer_create/av_buffer_realloc 可以创建一个AVBuffer,av_buffer_ref增加AVBuffer的引用计数,av_buffer_unref减少引用计数。引进计数减到0时,av_buffer_unref会自动释放AVBuffer。
- av_buffer_pool_init/av_buffer_pool_init2 创建指定数量的AVBuffer 池
- camellia.h/.c: camellia 加密算法
- Camellia算法每块的的长度(block size)为128位元,密钥长度则可以使用128、192或256位元。具有与AES同等级的安全强度及运算量。
- cast5.h/.c: CAST5 加密算法
- channel_layout.h/.c: audio channel layout 的字符串名称和数值相互转换接口
- color_untils.h/.c: 两个颜色转换接口
- avpriv_get_gamma_from_trc:从AVColorTransferCharacteristic获取对应的gamma 值
- avpriv_get_trc_function_from_trc: 获取AVColorTransferCharacteristic对应的转换函数
- colorspace.h: YUV/RGB/JPEG/BT709/CCIR等颜色空间的相互转换宏
- common.h: 常用数学函数及UTF8、UTF16的转换函数
- cpu.h/.c/_internel.h: CPU相关的功能函数
- crc.h/crc.c: crc算法
- des.h/.c: des 加密算法
- detecttion_bbox.h/.c: 获取帧数据的外围边框
- dict.h/.c: FFmpeg的字典类AVDictionary的相关操作
- display.h/.c: 根据指定的角度值,创建对应的旋转矩阵,用于旋转图片
- dovi_meta.h/.c: dolby vision 的meta 数据
- downmix_info.h/.c: downmix audio downmix medatata
- encryption_info.h/.c: 加密信息
- 描述packet中加密信息。它包含在将数据包传递给解码器之前,如何解密数据包的特定frame信息。
- error.h/.c: FFmpeg中的错误值,及错误值对应的字符串
- eval.h/.c: 简单的算术表达式求值器
- av_expr_parse_and_eval 可以计算"1+2^3+5*5+sin(2/3)"的值
- ffmath.h: 数学函数
- ff_exp10/ff_exp10f: 更快的计算10^x的值
- ff_fast_powf: 更快的计算x^y的值
- fifo.h/.c: 先进先出队列的实现
- file.h/.c: 将文件映射到内存,实现快速读取
- film_grain_params.h/.c: 电影胶片参数
- fixed_dsp.h/.c: 创建fixed DSP 上下文
- float_dsp.h/.c: 创建float DSP 上下文
- frame.h/.c: AVFrame 上下文数据
- av_frame_alloc/av_frame_free: 创建/释放帧
- av_frame_ref/av_frame_unref: 增加/减少引用计数
- hash.h/.c: hash算法的实现
- 支持MD5、SHA1、SHA256、RIPEMD320、CRC等
- hdr_dynamic_metadata.h/.c: hdr 动态meta数据
- hmac.h/.c: hmac算法
- 支持MD5、SHA1、SHA512等
- hwcontext.h/*.c等 硬件加速设备上下文及相关函数
- imgutils.h/.c/_internal.c: 图片相关操作函数
- av_image_fill_max_pixsteps: Compute the max pixel step for each plane of an image with a format described by pixdesc.
- av_image_get_linesize: Compute the size of an image line with format pix_fmt and width width for the plane plane.
- av_image_fill_linesizes: Fill plane linesizes for an image with pixel format pix_fmt and width width.
- av_image_fill_plane_sizes: Fill plane sizes for an image with pixel format pix_fmt and height height.
- av_image_fill_pointers: Fill plane data pointers for an image with pixel format pix_fmt and height height.
- av_image_alloc: Allocate an image with size w and h and pixel format pix_fmt, and fill pointers and linesizes accordingly.
- av_image_copy_plane/av_image_copy_plane_uc_from/av_image_copy: image copy
- av_image_fill_arrays: Setup the data pointers and linesizes based on the specified image parameters and the provided array.
- av_image_get_buffer_size: Return the size in bytes of the amount of data required to store an image with the given parameters。
- av_image_copy_to_buffer: Copy image data from an image into a buffer.
- av_image_check_size/av_image_check_size2: Check if the given dimension of an image is valid, meaning that all bytes of the image can be addressed with a signed int.
- av_image_check_sar: Check if the given sample aspect ratio of an image is valid.
- av_image_fill_black: Overwrite the image data with black.
- integer.h/.c: 128位的整数运算
- intfloat.h: uint64_t与double、uint32_t与float的相互转换
- intmath.h: 快速计算整数的有效位数
- intreadwrite.h: 整数的移位、复制等运算
- lfg.h/.c: Context structure for the Lagged Fibonacci PRNG.
- libm.h: float 数据的操作函数
- lls.h: 线性最小二乘模型 Linear least squares model.
- log.h/.c: FFmpeg中的日志相关功能
- AVClass类用于实现对象的可视化,每个log格式化函数的头一个参数为AVClass指针
- av_log/av_log_once/av_vlog: 创建log字符串,然后用callback方法发送出去。av_log_default_callback为缺省的log处理方法,将日志信息发送到stderr中。
- av_log_format_line/av_log_format_line2: 创建格式化日志字符串
- av_log_set_level: 设置log的显示级别,低于设定值得级别可显示。取值为-8、0、8、16、24、32、40、48、56。
- lzo.h/.c: Decodes LZO 1x compressed data
- macos_kperf.h/.c: macos 系统中kperf参数
- macros.h: 常用宏:MAX、MIN、SWAP等
- mastering_display_metadata.h/.c: 创建AVMasteringDisplayMetadata、AVContentLightMetadata
- mathematics.h: 用于处理时间戳和时间基的数学工具。
- av_gcd: 计算两个整数的最大公约数。
- av_rescale/av_rescale_rnd:
a * b / c取整 - av_rescale_q/av_rescale_q_rnd:
a * bq / cq取整 - av_compare_ts: 比较两个时间戳
- av_compare_mod: compare the least significant
log2(mod)bits of integersaandb. - av_rescale_delta: 按照新的timebase,重新计时时间戳。
- av_add_stable: 时间戳增加一个值
- md5.h/.c: MD5 hash 算法
- mem.h/.c/_internal.h: 内置内存操作函数
- av_malloc/av_mallocz: 分配内存空间
- av_malloc_array/av_calloc: 按数组方式分配内存空间
- av_realloc/av_reallocp: 创建、重创建、释放内存
- av_realloc_f/av_realloc_array/av_reallocp_array: 创建、重创建、释放数组形式的内存
- av_fast_realloc: 如果原有buffer不够大时,重新分配内存
- av_fast_malloc/av_fast_mallocz: 如果现有缓冲区足够大,则先释放然后重新分配一个,反之只释放不分配
- av_free/av_freep: 释放分配的内存
- av_strdup/av_strndup: 复制一个新的字符串
- av_memdup: 复制一段内存空间
- av_memcpy_backptr: Overlapping memcpy() implementation
- murmur3.h/.c: AVMurMur3 hash 算法
- MurmurHash是一种经过广泛测试且速度很快的非加密哈希函数。它有Austin Appleby于2008年创建,产生32位或128位哈希。
- MurMurHash3 128 位版本的速度是 MD5 的十倍。MurMurHash3 生成 32 位哈希的用时比生成 128 位哈希的用时要长。原因在于生成 128 位哈希的实现受益于现代处理器的特性。
- opt.h/.c: AVOption及相关操作函数
- AVOptions提供了一个通用的系统来声明任意结构的选项(“对象”),一个选项可以有一个帮助文本,一个类型和一个可能范围值,AVOptions可以被枚举、读取或写入。
- parseutils.h/.c: 多种解析工具
- av_parse_ratio: 将一个字符串转换为分数
- av_parse_video_size: 将一个字符串转换为视频的宽度、高度
- av_parse_video_rate: 将一个字符串转换为视频的帧率
- av_parse_color: 将一个字符串转换为RGBA格式的颜色值
- av_get_known_color_name: 获取一个RGBA的颜色值的名称
- av_parse_time: 将一个格式为“[{YYYY-MM-DD|YYYYMMDD}[T|t| ]]{{HH:MM:SS[.m…]]]}|{HHMMSS[.m…]]]}}[Z]”时间字符串转换为以微妙为单位的时间
- av_find_info_tag: 从一个URL字符串中获取tag对应的值
- av_small_strptime: 将字符串转换为 struct tm 格式的时间。
- av_timegm: 将struct tm转换为 time_t
- pca.h/.c: principal component analysis(PCA)
- 在ffmpeg v5.0的代码中未见使用
- pixdesc.h/desc.c/fmt.h/elutils.h/elutils.c: 像素相关的功能
- pixfmt.h 中定义了像素格式、颜色空间、格式转换的枚举值及相关宏。
- pixelutils.h/.c: 定义了一个计算“两个数组的差的绝对值的和”的函数
- pixdesc.h/.c: 定义了像素描述、颜色转换相关的函数。
- av_read_image_line2: 从图片中读取一行像素值
- av_write_image_line: 将一行像素值写到图片数据中
- random_seed.h/.c: 获取一个随机数的种子
- av_get_random_seed: 从硬件设备或其他途径产生一个真随机数,作为种子
- rational.h/.c: 分数及相关运算函数
- rc4.h/.c: rc4 加密算法
- reverse.h/.c: 定义了一个字节的反转后的对应矩阵
- ripemd.h/.c: RIPEMD hash 算法
- samplefmt.h/.c: 音频采样格式及相关函数
- sha.h/.c: SHA-1 & SHA-256 hash 算法
- sha512.h/.c: SHA512 hash 算法
- slicethread.h/.c: FFmpeg封装的多线程实现。
- avpriv_slicethread_create: 输入work 函数、main函数,创建AVSliceThread上下文
- avpriv_slicethread_execute: 多线程同时执行work函数
- avpriv_slicethread_free: 释放AVSliceThread上下文
- softfloat.h/_tables.h/_ieee754.h: 浮点数运算的软件实现
- spherical.h/.c: 视频的球形映射
- stereo3D.h/.c: 立体三维类型及相关函数
- tea.h/.c: TEA 加密算法
- thread.h: 封装了各个平台的线程函数及互斥函数
- threadmessage.h/.c: 基于AVFifoBuffer实现的用于线程间通信的消息队列
- time.h/.c/_internal.h: 时间相关的函数
- av_gettime: 获得以微秒计数的当前时间
- av_gettime_relative:获取基于一些非特定点的当前时间(微秒计数),如果没有定义CLOCK_TIME,则在av_gettime基础上增加42小时
- av_gettime_relative_is_monotonic: av_gettime_relative的返回值是否单调递增。如果从av_gettime获取,则为0
- av_usleep: 以微秒计数的休眠函数
- timecode.h/.c: AVTimecode的定义及时间编码相关的函数
- timer.h: 计时器相关的函数,仅用于测试
- timestamp.h: 将pts转为字符串的函数
- av_ts_make_string: 整数计数的pts转字符串
- av_ts_make_time_string: 浮点数计数的pts转字符串
- tree.h/.c: FFmpeg实现的二叉树形结构体AVTreeNode及相关函数。
- av_tree_node_alloc: 创建树节点
- av_tree_find: 通过键值值查找节点
- av_tree_insert: 插入节点
- av_tree_destroy: 销毁树节点及子节点
- av_tree_enumerate: 遍历二叉树
- twofish.h/.c: twofish 加密算法
- tx.h/.c/_template.c/_priv.h/_int32.c/_float.c/_double.c: 基于AVTXContext的FFT和MDCT转换
- FFT: 快速傅氏变换算法(Fast Fourier Transform Algorithm)
- MDCT: 修正离散余弦变换(Modified Discrete Cosine Transform)
- video_enc_param.h/.c: 根据指定参数,创建视频帧编码参数
- vulkan.h/.c/_shaders.c/_loader.h/_glslang.c/_functions.h: 定义了vulkan相关功能函数
- wchar_filename.h: 在window平台,实现utf8字符转宽字符
- xga_font_data.h: CGA/EGA/VGA ROM font data
- xtea.h/.c: xtea 算法的实现
- TEA(Tiny Encryption Algorithm)是一种小型的对称加密解密算法,支持128位密码,与BlowFish一样TEA每次只能加密/解密8字节数据。TEA也发展出几个版本,分别是XTEA、Block TEA和XXTEA
版权声明:本文为gushansanren原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。