FFmpeg学习(三)-- libavutil 代码组成

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 integers a and b.
    • 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

你可能感兴趣的:(音视频)