FFMPEG学习【libavutil】:音频相关(三)
来源:互联网 发布:微信支付域名申请步骤 编辑:程序博客网 时间:2024/05/21 11:10
一、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
}
unsigned 8 bits
AV_SAMPLE_FMT_S16signed 16 bits
AV_SAMPLE_FMT_S32signed 32 bits
AV_SAMPLE_FMT_FLTfloat
AV_SAMPLE_FMT_DBLdouble
AV_SAMPLE_FMT_U8Punsigned 8 bits, planar
AV_SAMPLE_FMT_S16Psigned 16 bits, planar
AV_SAMPLE_FMT_S32Psigned 32 bits, planar
AV_SAMPLE_FMT_FLTPfloat, planar
AV_SAMPLE_FMT_DBLPdouble, planar
AV_SAMPLE_FMT_S64signed 64 bits
AV_SAMPLE_FMT_S64Psigned 64 bits, planar
AV_SAMPLE_FMT_NBNumber of sample formats. DO NOT USE if linking dynamically.
二)、函数
const char * av_get_sample_fmt_name (enum AVSampleFormat sample_fmt)返回sample_fmt的名称,如果sample_fmt无法识别,则返回NULL。如果传递的sample_fmt已经处于请求的平面/打包格式,则返回的格式与输入相同。
如果传递的sample_fmt已经是打包格式,则返回的格式与输入相同。
返回:给定样品格式的包装替代形式或AV_SAMPLE_FMT_NONE错误。
如果传递的sample_fmt已经是平面格式,返回的格式与输入相同。
返回:给定样本格式的平面替代形式或AV_SAMPLE_FMT_NONE错误。
参数:buf:缓冲区在哪里写字符串
buf_size:buf的大小
sample_fmt:打印相应信息字符串的样本格式的编号,或打印相应标题的负值。
返回:指向已填充缓冲区的指针,如果sample_fmt未知或其他错误则为NULL
参数:sample_fmt:示例格式
返回:每个样本的字节数或零(如果未知的给定样本格式)
参数:sample_fmt:样本格式进行检查
返回:1如果采样格式是平面的,如果是交错则为0
参数: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)填写平面数据指针,并使用样本格式sample_fmt对样本进行换行。
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)为nb_samples样本分配样本缓冲区,并相应填充数据指针和linesize。
分配的采样缓冲区可以通过使用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)分配数据指针数组,nb_samples样本的样本缓冲区,并填充数据指针并相应地进行排序。
这与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)将样本从src复制到dst。
参数: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】:音频相关(一)
- FFMPEG学习【libavutil】:音频相关(二)
- FFMPEG学习【libavutil】:数据结构(三)
- FFMPEG学习【libavutil】:视频相关
- FFMPEG学习【libavutil】:Crypto and Hashing(三)
- FFMPEG学习【libavutil】:Memory Management(一)
- FFMPEG学习【libavutil】:Memory Management(二)
- FFMPEG学习【libavutil】:数据结构(一)
- FFMPEG学习【libavutil】:数据结构(二)
- FFMPEG学习【libavutil】:数据结构(四)
- FFMPEG学习【libavutil】:Mathematics
- FFMPEG学习【libavutil】:Mathematics:AVRational
- FFMPEG学习【libavutil】:String Manipulation
- FFMPEG学习【libavutil】:Crypto and Hashing(一)
- FFMPEG学习【libavutil】:Crypto and Hashing(二)
- FFMPEG学习【libavutil】:Crypto and Hashing(四)
- FFMPEG学习【libavutil】:Crypto and Hashing(五)
- HDU2188--选拔志愿者(巴什博弈)
- this关键字
- 实现自己的myshell
- HDU-3681 Prison Break (bfs + 二分枚举)
- QXmlStreamReader解析XML文件
- FFMPEG学习【libavutil】:音频相关(三)
- spring学习之---spring整合struts2
- STL之list
- 推荐算法——基于上下文的推荐
- PHP识别二维码的方法(php-zbarcode安装与使用)
- c语言实现c++的继承和多态
- CodeForces
- Untiy 灯光属性介绍
- fiddler2抓包工具使用图文教程