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

一、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_NONEAV_MATRIX_ENCODING_DOLBYAV_MATRIX_ENCODING_DPLIIAV_MATRIX_ENCODING_DPLIIX
  AV_MATRIX_ENCODING_DPLIIZAV_MATRIX_ENCODING_DOLBYEXAV_MATRIX_ENCODING_DOLBYHEADPHONEAV_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 *bufint 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_UNKNOWNAV_DOWNMIX_TYPE_LOROAV_DOWNMIX_TYPE_LTRTAV_DOWNMIX_TYPE_DPLII
  AV_DOWNMIX_TYPE_NB 
}


三)、函数

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值