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

来源:互联网 发布:时间轴js特效代码 编辑:程序博客网 时间:2024/05/17 23:15

一、Audio channel layouts

一)、宏

#define AV_CH_LAYOUT_MONO   (AV_CH_FRONT_CENTER)

#define AV_CH_LAYOUT_STEREO   (AV_CH_FRONT_LEFT|AV_CH_FRONT_RIGHT)

#define AV_CH_LAYOUT_STEREO   (AV_CH_FRONT_LEFT|AV_CH_FRONT_RIGHT)
#define AV_CH_LAYOUT_2POINT1   (AV_CH_LAYOUT_STEREO|AV_CH_LOW_FREQUENCY) #define AV_CH_LAYOUT_2_1   (AV_CH_LAYOUT_STEREO|AV_CH_BACK_CENTER) #define AV_CH_LAYOUT_SURROUND   (AV_CH_LAYOUT_STEREO|AV_CH_FRONT_CENTER) #define AV_CH_LAYOUT_3POINT1   (AV_CH_LAYOUT_SURROUND|AV_CH_LOW_FREQUENCY) #define AV_CH_LAYOUT_4POINT0   (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_CENTER) #define AV_CH_LAYOUT_4POINT1   (AV_CH_LAYOUT_4POINT0|AV_CH_LOW_FREQUENCY) #define AV_CH_LAYOUT_2_2   (AV_CH_LAYOUT_STEREO|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT) #define AV_CH_LAYOUT_QUAD   (AV_CH_LAYOUT_STEREO|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) #define AV_CH_LAYOUT_5POINT0   (AV_CH_LAYOUT_SURROUND|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT) #define AV_CH_LAYOUT_5POINT1   (AV_CH_LAYOUT_5POINT0|AV_CH_LOW_FREQUENCY) #define AV_CH_LAYOUT_5POINT0_BACK   (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) #define AV_CH_LAYOUT_5POINT1_BACK   (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_LOW_FREQUENCY) #define AV_CH_LAYOUT_6POINT0   (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_CENTER) #define AV_CH_LAYOUT_6POINT0_FRONT   (AV_CH_LAYOUT_2_2|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) #define AV_CH_LAYOUT_HEXAGONAL   (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_BACK_CENTER) #define AV_CH_LAYOUT_6POINT1   (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_CENTER) #define AV_CH_LAYOUT_6POINT1_BACK   (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_BACK_CENTER) #define AV_CH_LAYOUT_6POINT1_FRONT   (AV_CH_LAYOUT_6POINT0_FRONT|AV_CH_LOW_FREQUENCY) #define AV_CH_LAYOUT_7POINT0   (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) #define AV_CH_LAYOUT_7POINT0_FRONT   (AV_CH_LAYOUT_5POINT0|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) #define AV_CH_LAYOUT_7POINT1   (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT) #define AV_CH_LAYOUT_7POINT1_WIDE   (AV_CH_LAYOUT_5POINT1|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) #define AV_CH_LAYOUT_7POINT1_WIDE_BACK   (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER) #define AV_CH_LAYOUT_OCTAGONAL   (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_CENTER|AV_CH_BACK_RIGHT) #define AV_CH_LAYOUT_HEXADECAGONAL   (AV_CH_LAYOUT_OCTAGONAL|AV_CH_WIDE_LEFT|AV_CH_WIDE_RIGHT|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT|AV_CH_TOP_BACK_CENTER|AV_CH_TOP_FRONT_CENTER|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT) #define AV_CH_LAYOUT_STEREO_DOWNMIX   (AV_CH_STEREO_LEFT|AV_CH_STEREO_RIGHT)


二)、枚举

#define AV_CH_LAYOUT_STEREO   (AV_CH_FRONT_LEFT|AV_CH_FRONT_RIGHT)
enum  AVMatrixEncoding { 
  AV_MATRIX_ENCODING_NONE, AV_MATRIX_ENCODING_DOLBY, AV_MATRIX_ENCODING_DPLII, AV_MATRIX_ENCODING_DPLIIX, 
  AV_MATRIX_ENCODING_DPLIIZ, AV_MATRIX_ENCODING_DOLBYEX, AV_MATRIX_ENCODING_DOLBYHEADPHONE, AV_MATRIX_ENCODING_NB 
}


三)、函数

uint64_t av_get_channel_layout (const char *name)返回与名称匹配的通道布局ID,如果未找到匹配,则返回0。

名称可以是以下一个或几个符号,用“+”或“|”分隔:

1、通常的通道布局(单声道,立体声,4.0,四,5.0,5.0(侧),5.1,5.1(侧),7.1,7.1(宽),下混合)的名称;

2、单个通道的名称(FL,FR,FC,LFE,BL,BR,FLC,FRC,BC,SL,SR,TC,TFL,TFC,TFR,TBL,TBC,TBR,DL,DR)

3、多个通道,以十进制,后跟'c',产生该通道数的默认通道布局(查看av_get_default_channel_layout)

4、一个通道布局掩码,十六进制以“0x”开头(见AV_CH_ *宏)。

示例:“stereo + FC”=“2c + FC”=“2c + 1c”=“0x7”


int av_get_extended_channel_layout (const char *name, uint64_t *channel_layout, int *nb_channels)根据指定的名称返回通道布局和通道数。

这个函数类似于(查看av_get_channel_layout),但也可以解析未知的通道布局规格。

参数:index:通道布局规格字符串

   layout:解析的频道布局(如果未知,则为0)

   name:通道数量

返回:成功时为0,如果解析失败,则为AVERROR(EINVAL)。


void av_get_channel_layout_string (char *buf, int buf_size, int nb_channels, uint64_t channel_layout)返回一个通道布局的描述。

如果nb_channels为<= 0,则从channel_layout中猜出。

参数:buf:在这里放置包含通道布局的字符串

   buf_size:缓冲区大小(以字节为单位)


void av_bprint_channel_layout (struct AVBPrint *bp, int nb_channels, uint64_t channel_layout)将通道布局的描述附加到打印缓冲区。


int av_get_channel_layout_nb_channels (uint64_t channel_layout)返回通道布局中的通道数。


int64_t av_get_default_channel_layout (int nb_channels)返回给定数量通道的默认通道布局。


int av_get_channel_layout_channel_index (uint64_t channel_layout, uint64_t channel)获取channel_layout中的通道索引。

参数:channel:一个通道布局,描述channel_layout中必须存在的一个通道。

返回:channel_layout中的频道索引成功,错误的AVERROR为负。


uint64_t av_channel_layout_extract_channel (uint64_t channel_layout, int index)在channel_layout中获取给定索引的通道。


const char * av_get_channel_name (uint64_t channel)获取给定通道的名称。

返回:通道名称成功,NULL错误。


const char * av_get_channel_description (uint64_t channel)获取给定通道的描述。

参数:channel:具有单个通道的通道布局

返回:通道描述成功,NULL错误


int av_get_standard_channel_layout (unsigned index, uint64_t *layout, const char **name)获取标准通道布局的值和名称。

参数:index:索引在内部列表中,从0开始

   layout:通道布局面具

   name:布局名称

返回:如果布局存在,则为0,如果索引超出限制,则为0



二、Audio downmix metadata

一)、数据结构

此结构描述与下混程序相关的可选元数据。

所有字段由解码器设置为音频比特流(如果存在)中指示的值,否则为“理智”默认值。

struct  AVDownmixInfo{
enum AVDownmixType preferred_downmix_type;//母版工程师优选的下混类型。
double center_mix_level;//表示正常下混时中心通道的标称电平的绝对比例因子。
double center_mix_level_ltrt;//表示在Lt / Rt兼容下混合期间中心通道的标称电平的绝对比例因子。
double surround_mix_level;//表示正常缩混期间环绕声道的标称电平的绝对比例因子。
double surround_mix_level_ltrt;//表示在Lt / Rt兼容下混合期间环绕声道的标称电平的绝对比例因子。
double lfe_mix_level;//表示在下混期间将LFE数据混入L / R通道的电平的绝对比例因子。
}


二)、宏

enum  AVDownmixType { 
  AV_DOWNMIX_TYPE_UNKNOWN, AV_DOWNMIX_TYPE_LORO, AV_DOWNMIX_TYPE_LTRT, AV_DOWNMIX_TYPE_DPLII, 
  AV_DOWNMIX_TYPE_NB 
}


三)、函数

AVDownmixInfo * av_downmix_info_update_side_data (AVFrame *frame)获取帧的AV_FRAME_DATA_DOWNMIX_INFO边数据进行编辑。

如果侧面数据不存在,则创建它并将其添加到框架中。

参数:frame:要获取或创建副数据的帧。

返回:要由调用者编辑的AVDownmixInfo结构,如果结构不能被分配,则为NULL。

原创粉丝点击