FFMPEG学习【libavutil】:音频相关(一)

来源:互联网 发布:小程序服务器域名要求 编辑:程序博客网 时间:2024/05/18 03:40

一、音频FIFO缓冲区

一)、函数

void av_audio_fifo_free (AVAudioFifo *af)

释放AVAudioFifo。


AVAudioFifo * av_audio_fifo_alloc (enum AVSampleFormat sample_fmt, int channels, int nb_samples)分配AVAudioFifo。

参数:sample_fmt:采样格式

   channels:频道数量

   nb_samples:初始分配大小,在样本中

返回:新分配的AVAudioFifo,或错误的NULL


av_warn_unused_result int av_audio_fifo_realloc (AVAudioFifo *af, int nb_samples)重新分配AVAudioFifo。

参数:af:AVAudioFifo重新分配

   nb_samples:新分配大小,在样本中

返回:如果OK,则为0,否则为ERROR代码


int av_audio_fifo_write (AVAudioFifo *af, void **data, int nb_samples)将数据写入AVAudioFifo。

如果可用空间小于nb_samples,则AVAudioFifo将自动重新分配。

参数:af:写入的AVAudioFifo

   data:音频数据平面指针

   nb_samples:要写的样本数

返回:实际写入的样本数,或失败的负错误代码。 如果成功,实际写入的样本数将始终为nb_samples。


int av_audio_fifo_peek (AVAudioFifo *af, void **data, int nb_samples)从AVAudioFifo中查看数据。

参数:af:从中读取的AVAudioFifo

   data:音频数据平面指针

   nb_samples:要窥探的样本数量

返回:样品数量实际窥视,否则AVERROR代码失败。 实际窥视的样本数量将不会大于nb_samples,如果av_audio_fifo_size小于nb_samples,则它将仅小于nb_samples。


int av_audio_fifo_peek_at (AVAudioFifo *af, void **data, int nb_samples, int offset)从AVAudioFifo中查看数据。

参数:af:从中读取的AVAudioFifo

   data:从中读取的AVAudioFifo

   nb_samples:要窥探的样本数量

   offset:偏离当前读取位置

返回:样品数量实际窥视,否则AVERROR代码失败。 实际窥视的样本数量将不会大于nb_samples,如果av_audio_fifo_size小于nb_samples,则它将仅小于nb_samples。


int av_audio_fifo_read (AVAudioFifo *af, void **data, int nb_samples)从AVAudioFifo读取数据。

参数:af:从中读取的AVAudioFifo

   data:从中读取的AVAudioFifo

   nb_samples:要读取的样本数

返回:实际读取的样本数,或失败时为负的AVERROR代码。 实际读取的样本数量不会大于nb_samples,如果av_audio_fifo_size小于nb_samples,则它将仅小于nb_samples。


int av_audio_fifo_drain (AVAudioFifo *af, int nb_samples)从AVAudioFifo中排出数据。

删除数据而不读取它。

参数:af:排除的AVAudioFifo

   nb_samples:排出的样本数目

返回:如果OK,则为0,否则为ERROR代码


void av_audio_fifo_reset (AVAudioFifo *af)重置AVAudioFifo缓冲区。

这将清空缓冲区中的所有数据。

参数:af:重置的AVAudioFifo


int av_audio_fifo_size (AVAudioFifo *af)获取可用于阅读的AVAudioFifo中的当前样本数。

参数:af:进行查询的AVAudioFifo

返回:可用于读取的样本数


int av_audio_fifo_space (AVAudioFifo *af)获取AVAudioFifo当前可用于编写的样本数。

参数:af:进行查询的VAudioFifo

返回:可用于写入的样本数量



二、音频通道掩码

通道布局是一个64位整数,每个通道都有一个位设置。

设置的位数必须等于通道数。 值0表示通道布局未知。

注意:这种数据结构不够强大,无法处理具有相同通道多次的通道组合,例如双单声道。


#define AV_CH_FRONT_LEFT   0x00000001 #define AV_CH_FRONT_RIGHT   0x00000002 #define AV_CH_FRONT_CENTER   0x00000004 #define AV_CH_LOW_FREQUENCY   0x00000008 #define AV_CH_BACK_LEFT   0x00000010 #define AV_CH_BACK_RIGHT   0x00000020 #define AV_CH_FRONT_LEFT_OF_CENTER   0x00000040 #define AV_CH_FRONT_RIGHT_OF_CENTER   0x00000080 #define AV_CH_BACK_CENTER   0x00000100 #define AV_CH_SIDE_LEFT   0x00000200 #define AV_CH_SIDE_RIGHT   0x00000400 #define AV_CH_TOP_CENTER   0x00000800 #define AV_CH_TOP_FRONT_LEFT   0x00001000 #define AV_CH_TOP_FRONT_CENTER   0x00002000 #define AV_CH_TOP_FRONT_RIGHT   0x00004000 #define AV_CH_TOP_BACK_LEFT   0x00008000 #define AV_CH_TOP_BACK_CENTER   0x00010000 #define AV_CH_TOP_BACK_RIGHT   0x00020000 #define AV_CH_STEREO_LEFT   0x20000000立体声下混

#define AV_CH_STEREO_RIGHT   0x40000000见AV_CH_STEREO_LEFT。

#define AV_CH_WIDE_LEFT   0x0000000080000000ULL #define AV_CH_WIDE_RIGHT   0x0000000100000000ULL #define AV_CH_SURROUND_DIRECT_LEFT   0x0000000200000000ULL #define AV_CH_SURROUND_DIRECT_RIGHT   0x0000000400000000ULL #define AV_CH_LOW_FREQUENCY_2   0x0000000800000000ULL #define AV_CH_LAYOUT_NATIVE   0x8000000000000000ULL用于AVCodecContext.request_channel_layout的通道掩码值,用于指示用户请求解码器输出的通道顺序为本地编解码器通道顺序。

原创粉丝点击