/* * Copyright (c) Hisilicon Technologies Co., Ltd. 2019-2020. All rights reserved. * Description: common IAPI header file for Huanglong audio * Author: Hisilicon * Create: 2019-05-30 */ #ifndef __UAPI_AUDIO_H__ #define __UAPI_AUDIO_H__ #include "uapi_stream.h" #include "uapi_acodec.h" #ifdef __cplusplus #if __cplusplus extern "C" { #endif #endif /* __cplusplus */ /* CNcomment: 定义音频采样率枚举 */ typedef enum { /* Unknown */ /* CNcomment: 未知采样频率 */ UAPI_AUDIO_SAMPLE_RATE_UNKNOWN = 0, /* 8 kHz sampling rate */ /* CNcomment: 8K采样频率 */ UAPI_AUDIO_SAMPLE_RATE_8K = 8000, /* 11.025 kHz sampling rate */ /* CNcomment: 11.025K采样频率 */ UAPI_AUDIO_SAMPLE_RATE_11K = 11025, /* 12 kHz sampling rate */ /* CNcomment: 12K采样频率 */ UAPI_AUDIO_SAMPLE_RATE_12K = 12000, /* 16 kHz sampling rate */ /* CNcomment: 16K采样频率 */ UAPI_AUDIO_SAMPLE_RATE_16K = 16000, /* 22.050 kHz sampling rate */ /* CNcomment: 22.050K采样频率 */ UAPI_AUDIO_SAMPLE_RATE_22K = 22050, /* 24 kHz sampling rate */ /* CNcomment: 24K采样频率 */ UAPI_AUDIO_SAMPLE_RATE_24K = 24000, /* 32 kHz sampling rate */ /* CNcomment: 32K采样频率 */ UAPI_AUDIO_SAMPLE_RATE_32K = 32000, /* 44.1 kHz sampling rate */ /* CNcomment: 44.1K采样频率 */ UAPI_AUDIO_SAMPLE_RATE_44K = 44100, /* 48 kHz sampling rate */ /* CNcomment: 48K采样频率 */ UAPI_AUDIO_SAMPLE_RATE_48K = 48000, /* 88.2 kHz sampling rate */ /* CNcomment: 88.2K采样频率 */ UAPI_AUDIO_SAMPLE_RATE_88K = 88200, /* 96 kHz sampling rate */ /* CNcomment: 96K采样频率 */ UAPI_AUDIO_SAMPLE_RATE_96K = 96000, /* 176 kHz sampling rate */ /* CNcomment: 176K采样频率 */ UAPI_AUDIO_SAMPLE_RATE_176K = 176400, /* 192 kHz sampling rate */ /* CNcomment: 192K采样频率 */ UAPI_AUDIO_SAMPLE_RATE_192K = 192000, /* 288 kHz sampling rate */ /* CNcomment: 288K采样频率 */ UAPI_AUDIO_SAMPLE_RATE_288K = 288000, UAPI_AUDIO_SAMPLE_RATE_MAX, } uapi_audio_sample_rate; /* Defines the bit depth during audio sampling. */ /* CNcomment: 定义音频采样位宽枚举 */ typedef enum { /* Unknown */ /* CNcomment: 未知采样位宽 */ UAPI_AUDIO_BIT_DEPTH_UNKNOWN = 0, /* 8-bit depth */ /* CNcomment: 8位采样位宽 */ UAPI_AUDIO_BIT_DEPTH_8 = 8, /* 16-bit depth */ /* CNcomment: 16位采样位宽 */ UAPI_AUDIO_BIT_DEPTH_16 = 16, /* 18-bit depth */ /* CNcomment: 18位采样位宽 */ UAPI_AUDIO_BIT_DEPTH_18 = 18, /* 20-bit depth */ /* CNcomment: 20位采样位宽 */ UAPI_AUDIO_BIT_DEPTH_20 = 20, /* 24-bit depth */ /* CNcomment: 24位采样位宽 */ UAPI_AUDIO_BIT_DEPTH_24 = 24, /* 32-bit depth */ /* CNcomment: 32位采样位宽 */ UAPI_AUDIO_BIT_DEPTH_32 = 32, UAPI_AUDIO_BIT_DEPTH_MAX, } uapi_audio_bit_depth; /* Defines the mode of audio channels. */ /* CNcomment: 定义音频声道模式枚举 */ typedef enum { /* Stereo */ /* CNcomment: 立体声 */ UAPI_TRACK_MODE_STEREO = 0, /* Data is output after being mixed in the audio-left channel and audio-right channel. */ /* CNcomment: 左右声道混合后输出 */ UAPI_TRACK_MODE_DOUBLE_MONO, /* The audio-left channel and audio-right channel output the data of the audio-left channel. */ /* CNcomment: 左右声道输出左声道数据 */ UAPI_TRACK_MODE_DOUBLE_LEFT, /* The audio-left channel and audio-right channel output the data of the audio-right channel. */ /* CNcomment: 左右声道输出右声道数据 */ UAPI_TRACK_MODE_DOUBLE_RIGHT, /* Data is output after being exchanged in the audio-left channel and audio-right channel. */ /* CNcomment: 左右声道数据交换输出 */ UAPI_TRACK_MODE_EXCHANGE, /* Only the data in the audio-right channel is output. */ /* CNcomment: 只输出右声道数据 */ UAPI_TRACK_MODE_ONLY_RIGHT, /* Only the data in the audio-left channel is output. */ /* CNcomment: 只输出左声道数据 */ UAPI_TRACK_MODE_ONLY_LEFT, /* Mute */ /* CNcomment: 静音 */ UAPI_TRACK_MODE_MUTED, UAPI_TRACK_MODE_MAX } uapi_track_mode; /* Defines the attributes of the audio decoder. */ /* CNcomment: 定义音频解码器属性结构 */ typedef struct { /* Audio decoder type */ /* CNcomment: 音频解码类型 */ uapi_acodec_id id; /* Audio decoder parameter */ /* CNcomment: 音频解码参数 */ uapi_acodec_dec_param param; } uapi_audio_decode_attr; /* Defines the attributes of audio encoder. */ /* CNcomment: 定义音频编码器属性结构 */ typedef struct { /* Audio encoder type */ /* CNcomment: 音频编码类型 */ td_u32 aenc_type; /* Audio encoder parameter */ /* CNcomment: 音频编码参数 */ uapi_acodec_enc_param param; } uapi_aenc_attr; /* Defines the information about audio streams. */ /* CNcomment: 定义音频码流信息结构 */ typedef struct { /* Audio Codec type */ /* CNcomment: 音频Codec类型 uapi_acodec_id */ uapi_acodec_id codec_type; /* Audio sampling rate */ /* CNcomment: 音频采样率 */ td_u32 sample_rate; /* Bit depth during audio sampling */ /* CNcomment: 音频采样位宽 */ uapi_audio_bit_depth bit_depth; /* Audio output channel */ /* CNcomment: 音频输出声道数 */ td_u32 channels; /* Audio bitrate */ /* CNcomment: 音频比特率 */ td_u32 bit_rate; /* Audio stream format */ /* CNcomment: 音频码流格式 */ uapi_acodec_format format; /* Audio channel mode */ /* CNcomment: 音频声道模式 */ uapi_acodec_channel_mode channel_mode; /* Lfe present flag */ /* CNcomment: 是否存在重低音 */ td_bool lfe_present; /* Atmos stream flag */ /* CNcomment: 音频码流是否是Atmos */ td_bool atmos; } uapi_audio_stream_info; /* Defines the I2S(Inter-IC Sound) mode. */ /* CNcomment: 定义音频I2S接口模式枚举 */ typedef enum { /* I2S standard mode */ /* CNcomment: I2S标准模式 */ UAPI_AUDIO_I2S_STD_MODE = 0, /* pcm mode */ /* CNcomment: PCM模式 */ UAPI_AUDIO_I2S_PCM_MODE, /* TDM mode */ /* CNcomment: TDM模式 */ UAPI_AUDIO_I2S_TDM_MODE, UAPI_AUDIO_I2S_MODE_MAX } uapi_audio_i2s_mode; /* Defines the I2S(Inter-IC Sound) master clock. */ /* CNcomment: 定义音频I2S接口工作时钟枚举 */ typedef enum { UAPI_AUDIO_I2S_MCLK_128_FS = 0, /* mclk 128*fs */ UAPI_AUDIO_I2S_MCLK_256_FS, /* mclk 256*fs */ UAPI_AUDIO_I2S_MCLK_384_FS, /* mclk 384*fs */ UAPI_AUDIO_I2S_MCLK_512_FS, /* mclk 512*fs */ UAPI_AUDIO_I2S_MCLK_768_FS, /* mclk 768*fs */ UAPI_AUDIO_I2S_MCLK_1024_FS, /* mclk 1024*fs */ UAPI_AUDIO_I2S_MCLK_MAX } uapi_audio_i2s_mclk_sel; /* Defines the I2S(Inter-IC Sound) bclk clock. */ typedef enum { UAPI_AUDIO_I2S_BCLK_1_DIV = 1, /* bclk,mclk/1 */ UAPI_AUDIO_I2S_BCLK_2_DIV = 2, /* bclk,mclk/2 */ UAPI_AUDIO_I2S_BCLK_3_DIV = 3, /* bclk,mclk/3 */ UAPI_AUDIO_I2S_BCLK_4_DIV = 4, /* bclk,mclk/4 */ UAPI_AUDIO_I2S_BCLK_6_DIV = 6, /* bclk,mclk/6 */ UAPI_AUDIO_I2S_BCLK_8_DIV = 8, /* bclk,mclk/8 */ UAPI_AUDIO_I2S_BCLK_12_DIV = 12, /* bclk,mclk/12 */ UAPI_AUDIO_I2S_BCLK_24_DIV = 24, /* bclk,mclk/24 */ UAPI_AUDIO_I2S_BCLK_32_DIV = 32, /* bclk,mclk/32 */ UAPI_AUDIO_I2S_BCLK_48_DIV = 48, /* bclk,mclk/48 */ UAPI_AUDIO_I2S_BCLK_64_DIV = 64, /* bclk,mclk/64 */ UAPI_AUDIO_I2S_BCLK_MAX } uapi_audio_i2s_bclk_sel; /* audio channels. */ /* CNcomment: 音频声道枚举 */ typedef enum { UAPI_AUDIO_CHANNEL_INVALID = -1, UAPI_AUDIO_CHANNEL_1 = 1, UAPI_AUDIO_CHANNEL_2 = 2, UAPI_AUDIO_CHANNEL_4 = 4, UAPI_AUDIO_CHANNEL_8 = 8, UAPI_AUDIO_CHANNEL_16 = 16, UAPI_AUDIO_CHANNEL_MAX, } uapi_audio_channel; /* Defines the I2S(Inter-IC Sound) data valid after frame sync clock at PCM mode . */ /* CNcomment: 定义音频I2S接口,数据有效延迟周期,仅PCM模式有效 */ typedef enum { UAPI_AUDIO_I2S_PCM_0_DELAY = 0, /* 0 bclk cycles delay */ UAPI_AUDIO_I2S_PCM_1_DELAY = 1, /* 1 bclk cycles delay */ UAPI_AUDIO_I2S_PCM_8_DELAY = 8, /* 8 bclk cycles delay */ UAPI_AUDIO_I2S_PCM_16_DELAY = 16, /* 16 bclk cycles delay */ UAPI_AUDIO_I2S_PCM_17_DELAY = 17, /* 17 bclk cycles delay */ UAPI_AUDIO_I2S_PCM_24_DELAY = 24, /* 24 bclk cycles delay */ UAPI_AUDIO_I2S_PCM_32_DELAY = 32, /* 32 bclk cycles delay */ UAPI_AUDIO_I2S_PCM_DELAY_MAX } uapi_audio_i2s_pcm_delay; /* Defines the I2S(Inter-IC Sound) attribute . */ /* CNcomment: 定义音频I2S接口配置属性 */ typedef struct { td_bool master; /* TD_TRUE:master; TD_FALSE: slave */ uapi_audio_i2s_mode i2s_mode; uapi_audio_i2s_mclk_sel mclk_sel; uapi_audio_i2s_bclk_sel bclk_sel; uapi_audio_channel channels; uapi_audio_bit_depth bit_depth; /* * only works for PCM mode. * TD_TRUE:sample data at positive edge of bclk, * TD_FALSE: sample data at negative edge of bclk */ td_bool pcm_sample_rise_edge; uapi_audio_i2s_pcm_delay pcm_delay_cycle; /* only work for PCM mode. */ } uapi_audio_i2s_attr; /* Speaker configuration */ /* CNcomment:扬声器配置 */ typedef struct { /* Audio effect type. */ /* CNcomment:音效类型 */ td_u32 aef_type; /* Speaker config. */ /* CNcomment:音效扬声器配置 */ td_u32 speaker_config; /* Copy L/R data to Ltm/Rtm when stream is NOT ATMOS. */ /* CNcomment: 非ATMOS码流拷贝L/R数据到Ltm/Rtm声道 */ td_bool copy_lr_to_top; } uapi_audio_speaker_config; /* Defines the HeadPhone gain level from codec. */ /* CNcomment: 定义芯片耳机输出增益 */ typedef enum { UAPI_AUDIO_CODEC_HP_GAIN_LEVEL_0 = 0, /* -15.07dB */ UAPI_AUDIO_CODEC_HP_GAIN_LEVEL_1, /* -12.04dB */ UAPI_AUDIO_CODEC_HP_GAIN_LEVEL_2, /* -10.74dB */ UAPI_AUDIO_CODEC_HP_GAIN_LEVEL_3, /* -8.42dB, Default value for HP */ UAPI_AUDIO_CODEC_HP_GAIN_LEVEL_4, /* -5.38dB */ UAPI_AUDIO_CODEC_HP_GAIN_LEVEL_5, /* -3.52dB */ UAPI_AUDIO_CODEC_HP_GAIN_LEVEL_6, /* -1.74dB, Default value for AVOUT */ UAPI_AUDIO_CODEC_HP_GAIN_LEVEL_MAX } uapi_audio_codec_hp_gain_level; /* Defines the HeadPhone gain level from codec. */ /* CNcomment: 定义芯片耳机输出增益 */ typedef struct { /* HeadPhone gain level. */ /* CNcomment:耳机输出增益 */ uapi_audio_codec_hp_gain_level hp_gain; } uapi_audio_headphone_attr; /* Defines the information about audio frames. */ /* CNcomment: 定义音频帧信息结构 */ typedef struct { /* @bit_depth: (PCM) data depth, and format of storing the output data * if the data depth is 16 bits, 16-bit word memory is used. * if the data depth is greater than 16 bits, 32-bit word memory is used, * and data is stored as left-aligned data. that is, the valid data is at upper bits. */ /* CNcomment: @bit_depth: (PCM) 数据位宽设置. 输出存放格式 * 等于16bit: 占用16bit word内存 * 大于16bit: 占用32bit word内存, 数据左对齐方式存放(有效数据在高位) */ td_s32 bit_depth; /* whether the data is interleaved */ /* CNcomment: 数据是否交织 */ td_bool interleaved; /* sampling rate */ /* CNcomment: 采样率 */ td_u32 sample_rate; /* number of channels */ /* CNcomment: 声道数 */ td_u32 channels; /* presentation time stamp (PTS, unit: us) */ /* CNcomment: 时间戳(单位:微秒) */ td_s64 pts; /* pointer to the buffer for storing the pulse code modulation (PCM) data */ /* CNcomment: PCM数据缓冲指针 */ td_s32 *pcm_buffer; /* pointer to the buffer for storing the stream data */ /* CNcomment: 码流数据缓冲指针 */ td_s32 *bits_buffer; /* number of sampling points of the PCM data */ /* CNcomment: PCM数据采样点数量 */ td_u32 pcm_samples; /* IEC61937 data size */ /* CNcomment: IEC61937数据长度 */ td_u32 bits_bytes; /* Frame ID */ /* CNcomment: 帧序号 */ td_u32 frame_index; /* IEC61937 Data Type */ /* CNcomment: IEC61937数据类型标识,低8bit为IEC数据类型 */ td_u32 iec_data_type; /* pointer to the buffer for storing the metadata and obj */ /* CNcomment: 元数据和对象缓冲指针 */ td_s32 *md_and_obj_buffer; /* metadata and object size */ /* CNcomment: 元数据和对象长度 */ td_u32 md_and_obj_bytes; } uapi_audio_frame; /* EIA-CEA-861-G Table 31 */ typedef enum { /* Audio coding type, refer to stream header, default type */ /* CNcomment:音频编码类型,参考数据流,缺省格式 */ UAPI_AUDIO_FORMAT_STREAM, /* Audio coding PCM type */ /* CNcomment:音频编码PCM格式 */ UAPI_AUDIO_FORMAT_PCM, /* Audio coding dolby digital(ac3) type */ /* CNcomment:音频编码dolby digital(ac3)格式 */ UAPI_AUDIO_FORMAT_AC3, /* Audio coding MPEG1 type */ /* CNcomment:音频编码MPEG1格式 */ UAPI_AUDIO_FORMAT_MPEG1, /* Audio coding MP3 type */ /* CNcomment:音频编码MP3格式 */ UAPI_AUDIO_FORMAT_MP3, /* Audio coding MPEG2 type */ /* CNcomment:音频编码MPEG2格式 */ UAPI_AUDIO_FORMAT_MPEG2, /* Audio coding AAC type */ /* CNcomment:音频编码AAC格式 */ UAPI_AUDIO_FORMAT_AAC_LC, /* Audio coding DTS type */ /* CNcomment:音频编码DTS格式 */ UAPI_AUDIO_FORMAT_DTS, /* Audio coding ATRAC type */ /* CNcomment:音频编码ATRAC格式 */ UAPI_AUDIO_FORMAT_ATRAC, /* Audio coding One Bit Audio type */ /* CNcomment:音频编码One Bit Audio格式 */ UAPI_AUDIO_FORMAT_DSD, /* Audio coding dolby digital plus type */ /* CNcomment:音频编码dolby digital plus(e-ac3)格式 */ UAPI_AUDIO_FORMAT_EAC3, /* Audio coding DTS HD type */ /* CNcomment:音频编码DTS HD格式 */ UAPI_AUDIO_FORMAT_DTS_HD, /* Audio coding MAT(DVD Forum MLP) type */ /* CNcomment:音频编码MAT(DVD Forum MLP)格式 */ UAPI_AUDIO_FORMAT_MAT, /* Audio coding DST type */ /* CNcomment:音频编码DST格式 */ UAPI_AUDIO_FORMAT_DST, /* Audio coding WMA PRO type */ /* CNcomment:音频编码WMA PRO格式 */ UAPI_AUDIO_FORMAT_WMA_PRO, /* Audio coding refer to CXT */ UAPI_AUDIO_FORMAT_CXT, } uapi_audio_format; /* EIA-CEA-861-G Table 33 */ typedef enum { /* Refer to Audio Coding Type (CT) field in Data Byte 1 */ UAPI_AUDIO_FORMAT_EXT_CT = 0x0, /* * The next three CXT values are defined in CEA-861-E only. * They do not exist in older versions, and in CEA-861-F and CEA-861-F * they are defined as 'Not in use'. */ UAPI_AUDIO_FORMAT_EXT_HE_AAC, UAPI_AUDIO_FORMAT_EXT_HE_AAC_V2, UAPI_AUDIO_FORMAT_EXT_MPEG_SURROUND, /* The following CXT values are only defined in CEA-861-F. */ UAPI_AUDIO_FORMAT_EXT_MPEG4_HE_AAC = 0x4, UAPI_AUDIO_FORMAT_EXT_MPEG4_HE_AAC_V2, UAPI_AUDIO_FORMAT_EXT_MPEG4_AAC_LC, UAPI_AUDIO_FORMAT_EXT_DRA, /* MPEG-4 HE AAC + MPEG Surround */ UAPI_AUDIO_FORMAT_EXT_MPEG4_HE_AAC_SURROUND, /* MPEG-4 AAC LC + MPEG Surround */ UAPI_AUDIO_FORMAT_EXT_MPEG4_AAC_LC_SURROUND = 0xa, /* The following CXT values are only defined in CEA-861-G. */ /* Audio Extension Type Code 11 (MPEG-H 3D Audio) */ UAPI_AUDIO_FORMAT_EXT_MPEGH_3D, /* Audio Extension Type Code 12 (AC-4) */ UAPI_AUDIO_FORMAT_EXT_AC4, /* Audio Extension Type Code 13 (L-PCM 3D Audio) */ UAPI_AUDIO_FORMAT_EXT_LPCM_3D, } uapi_audio_format_ext; /* Audio data type */ /* CNcomment: 音频数据类型 */ typedef enum { UAPI_AUDIO_DATA_TYPE_LPCM, /* LPCM 2/8 channels, Audio Sample Packet layout0 or layout1 */ UAPI_AUDIO_DATA_TYPE_LBR, /* IEC-61937 DD/DDP/DTS, Audio Sample Packet layout0 */ UAPI_AUDIO_DATA_TYPE_HBR, /* IEC-61937 DTSHD/TrueHD, High-Bitrate (HBR) Audio Stream Packet */ UAPI_AUDIO_DATA_TYPE_MAX, } uapi_audio_data_type; #ifdef __cplusplus #if __cplusplus } #endif #endif /* __cplusplus */ #endif /* __UAPI_AUDIO_H */