概述
一、Audio sample formats
音频采样格式列举和相关便利功能。
一)、枚举
音频采样格式
1、由样本格式描述的数据始终是本机端序列。 样本值可以由本机C类型表示,因此即使是常见的原始音频数据格式,也缺少签名的24位采样格式。
2、浮点格式基于满量程范围[-1.0,1.0]。 超出该范围的任何值都超出了完整的音量。
3、在av_samples_fill_arrays()和FFmpeg其他位置(如libavcodec中的AVFrame)中使用的数据布局如下所示:
对于平面样本格式,每个音频通道位于单独的数据平面中,并且linesize是单个平面的缓冲区大小(以字节为单位)。 所有数据平面的大小必须相同。 对于压缩样本格式,仅使用第一个数据平面,并且每个通道的采样交错。 在这种情况下,linesize是1平面的缓冲区大小(以字节为单位)。
enum | AVSampleFormat { AV_SAMPLE_FMT_NONE = -1, AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_U8P, AV_SAMPLE_FMT_S16P, AV_SAMPLE_FMT_S32P, AV_SAMPLE_FMT_FLTP, AV_SAMPLE_FMT_DBLP, AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_S64P, AV_SAMPLE_FMT_NB } |
Enumerator | |
---|---|
AV_SAMPLE_FMT_NONE | |
AV_SAMPLE_FMT_U8 | unsigned 8 bits |
AV_SAMPLE_FMT_S16 | signed 16 bits |
AV_SAMPLE_FMT_S32 | signed 32 bits |
AV_SAMPLE_FMT_FLT | float |
AV_SAMPLE_FMT_DBL | double |
AV_SAMPLE_FMT_U8P | unsigned 8 bits, planar |
AV_SAMPLE_FMT_S16P | signed 16 bits, planar |
AV_SAMPLE_FMT_S32P | signed 32 bits, planar |
AV_SAMPLE_FMT_FLTP | float, planar |
AV_SAMPLE_FMT_DBLP | double, planar |
AV_SAMPLE_FMT_S64 | signed 64 bits |
AV_SAMPLE_FMT_S64P | signed 64 bits, planar |
AV_SAMPLE_FMT_NB | Number of sample formats. DO NOT USE if linking dynamically. |
二)、函数
const char * | av_get_sample_fmt_name (enum AVSampleFormat sample_fmt) |
enum AVSampleFormat | av_get_sample_fmt (const char *name) |
enum AVSampleFormat | av_get_alt_sample_fmt (enum AVSampleFormat sample_fmt, int planar) |
如果传递的sample_fmt已经处于请求的平面/打包格式,则返回的格式与输入相同。
enum AVSampleFormat | av_get_packed_sample_fmt (enum AVSampleFormat sample_fmt) |
如果传递的sample_fmt已经是打包格式,则返回的格式与输入相同。
返回:给定样品格式的包装替代形式或AV_SAMPLE_FMT_NONE错误。
enum AVSampleFormat | av_get_planar_sample_fmt (enum AVSampleFormat sample_fmt) |
如果传递的sample_fmt已经是平面格式,返回的格式与输入相同。
返回:给定样本格式的平面替代形式或AV_SAMPLE_FMT_NONE错误。
char * | av_get_sample_fmt_string (char *buf, int buf_size, enum AVSampleFormat sample_fmt) |
参数:buf:缓冲区在哪里写字符串
buf_size:buf的大小
sample_fmt:打印相应信息字符串的样本格式的编号,或打印相应标题的负值。
返回:指向已填充缓冲区的指针,如果sample_fmt未知或其他错误则为NULL
int | av_get_bytes_per_sample (enum AVSampleFormat sample_fmt) |
参数:sample_fmt:示例格式
返回:每个样本的字节数或零(如果未知的给定样本格式)
int | av_sample_fmt_is_planar (enum AVSampleFormat sample_fmt) |
参数:sample_fmt:样本格式进行检查
返回:1如果采样格式是平面的,如果是交错则为0
int | av_samples_get_buffer_size (int *linesize, int nb_channels, int nb_samples, enum AVSampleFormat sample_fmt, int align) |
参数:linesize:计算的linesize,可能为NULL
channels:渠道数量
nb_samples:他在单个通道中的样本数
sample_fmt:示例格式
align:缓冲区大小对齐(0 =默认,1 =无对齐)
返回:所需缓冲区大小或失败时的负错误代码
二、Samples manipulation
操作音频样本的函数
一)、函数
int | av_samples_fill_arrays (uint8_t **audio_data, int *linesize, const uint8_t *buf, int nb_channels, int nb_samples, enum AVSampleFormat sample_fmt, int align) |
audio_data数组用样本数据平面的指针填充:对于平面,设置缓冲区内每个通道的数据的起始点,以便打包,仅设置整个缓冲区的起始点。
linesize指向的值设置为每个通道的平面布局的数据缓冲区的对齐大小,或者设置为用于打包布局的所有通道的缓冲区的对齐大小。
buf中的缓冲区必须足够大以包含所有样本(使用av_samples_get_buffer_size()计算其最小大小),否则audio_data指针将指向无效数据。
查看:枚举AVSampleFormat AVSampleFormat的文档描述了数据布局。
参数:audio_data:数组将填充每个通道的指针
linesize:计算的linesize,可能为NULL
buf:指向包含样本的缓冲区的指针
nb_channels:渠道数量
nb_samples:单个通道中的采样数
sample_fmt:采样格式
align:缓冲区大小对齐(0 =默认,1 =无对齐)
返回:> = 0成功或失败的负错误代码
Todo:在下一个凸块成功的情况下返回缓冲区所需的最小大小(以字节为单位)
int | av_samples_alloc (uint8_t **audio_data, int *linesize, int nb_channels, int nb_samples, enum AVSampleFormat sample_fmt, int align) |
分配的采样缓冲区可以通过使用av_freep(&audio_data [0])来释放。分配的数据将被初始化为静音。
查看:枚举AVSampleFormat AVSampleFormat的文档描述了数据布局。
参数:audio_data:数组将填充每个通道的指针
linesize:音频缓冲区的对齐大小可能为NULL
nb_channels:音频通道数
sample_fmt:每个通道的采样数
align:缓冲区大小对齐(0 =默认,1 =无对齐)
返回:> = 0成功或失败的负错误代码
int | av_samples_alloc_array_and_samples (uint8_t ***audio_data, int *linesize, int nb_channels, int nb_samples, enum AVSampleFormat sample_fmt, int align) |
这与av_samples_alloc()相同,但也分配数据指针数组。
int | av_samples_copy (uint8_t **dst, uint8_t *const *src, int dst_offset, int src_offset, int nb_samples, int nb_channels, enum AVSampleFormat sample_fmt) |
参数:dst:指向数据计划的目标数组
src:源数组指向数据计划
dst_offset:将数据写入dst的样本中的偏移量
src_offset:从src读取数据的样本中的偏移量
nb_samples:要复制的样本数
nb_channels:音频通道数
sample_fmt:音频采样格式
int | av_samples_set_silence (uint8_t **audio_data, int offset, int nb_samples, int nb_channels, enum AVSampleFormat sample_fmt) |
参数:audio_data:数组指针数组
offset:在开始填充的样品中的偏移量
nb_samples:要填充的样品数量
nb_channels:音频通道数
sample_fmt:音频样本格式
最后
以上就是英俊母鸡为你收集整理的FFMPEG学习【libavutil】:音频相关(三)的全部内容,希望文章能够帮你解决FFMPEG学习【libavutil】:音频相关(三)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复