#ifndef _DRV_AUDIO_INTERNAL_H_ #define _DRV_AUDIO_INTERNAL_H_ #include "drv_audio_interface.h" #include "drv_audio_cmdq.h" typedef enum _AUDIOROM_INFO_e { ARINFO_SFREQ = 0, ARINFO_CHANNELNUM, ARINFO_SAMPLENUMBER, ARINFO_LASTPTS, ARINFO_LASTDATAPTR, ARINFO_LAST_AD_DATAPTR, ARINFO_INPUT_DATATYPE, ARINFO_AUDIO_FEATURE, ARINFO_TXDESP_NUM, ARINFO_TXDESP_LRADDR, ARINFO_AMP_AUDIO_TYPE, ARINFO_SAMPLENUMBER_DEC2, ARINFO_DES_NO, ARINFO_TITOI_STATUS, ARINFO_ERR } AUDIOROM_INFO_e; #pragma pack(push,1) typedef struct _AUDIORX_INPUT_DESCRIPTION { // 1st UINT32 UINT32 buff_valid : 1; UINT32 UINT321_b1_b15 : 15; UINT32 buff_size : 15; // 16 UINT8 align UINT32 UINT321_b31 : 1; // 2nd UINT32 UINT32 UINT322_b0 : 1; UINT32 pts_exist : 1; UINT32 dowrd2_b2_b15 : 14; UINT32 pts_val_b0_15 : 16; // 3th UINT32 UINT32 pts_val_b16_b32 : 17; UINT32 UINT323_b17_b31 : 15; // 4th UINT32 UINT32 UINT324; // 5th UINT32 UINT32 start_addr_1; // 6th UINT32 UINT32 start_addr_2; // 7th UINT32 UINT32 start_addr_3; // 8th UINT32 UINT32 start_addr_4; }AUDIORX_INPUT_DESCRIPTION, *pAUDIORX_INPUT_DESCRIPTION; typedef struct _AUDIOTX_OUTPUT_DESCRIPTION { // 1st UINT32 UINT32 BuffValid : 1; UINT32 Pause : 1; UINT32 Discont : 1; UINT32 AutoStuff : 1; UINT32 Reserved : 1; UINT32 AutoStuffLen : 11; // 16 UINT8 align UINT32 BuffSize : 15; // 16 UINT8 align UINT32 Reserved1 : 1; // 2nd UINT32 UINT32 DataValid : 1; UINT32 PTSExist : 1; UINT32 StopDiscontFreeRun : 1; UINT32 Reserved2 : 5; UINT32 L_invalid : 1; UINT32 R_invalid : 1; UINT32 Lfe_invalid : 1; UINT32 C_invalid : 1; UINT32 Ls_invalid : 1; UINT32 Rs_invalid : 1; UINT32 SL_invalid : 1; UINT32 SR_invalid : 1; UINT32 PTSValue1 : 16; // PTS[0:15] // 3th UINT32 UINT32 PTSValue2 : 17; // PTS[16:32] UINT32 NLsize : 11; UINT32 Reserved3 : 4; // 4th UINT32 UINT32 NLAddr; // 5th UINT32 UINT32 LRAddr; // 6th UINT32 UINT32 CLFEAddr; // 7th UINT32 UINT32 LSRSAddr; // 8th UINT32 UINT32 SLSRAddr; }AUDIOTX_OUTPUT_DESCRIPTION, *pAUDIOTX_OUTPUT_DESCRIPTION; typedef struct _AUDIO_MPEGHEADERDATA { union { struct { UINT32 emphasis:2; UINT32 original_copy:1; UINT32 copyright:1; UINT32 mode_extension:2; UINT32 mode:2; UINT32 private_bit:1; UINT32 padding_bit:1; UINT32 sampling_frequency:2; UINT32 bitrate_index:4; UINT32 protection_bit:1; UINT32 layer:2; UINT32 id:1; UINT32 syncword:12; }; struct { UINT32 reserved02:20; UINT32 lsf:1; UINT32 reserved01:11; }; UINT32 dw; }; }AUDIO_MPEGHEADERDATA, *AUDIO_MPEGHEADERDATAPTR; //07/15/2010 added by cdlin to support MPEG2 AAC for CyberView ISDB-T project. typedef struct _AUDIO_MPEG2AACHEADERDATA { union { struct { UINT32 error_check_bit7_0:8; UINT32 number_of_raw_data_blocks_in_frame:2; UINT32 adts_buffer_fullness:11; UINT32 frame_length_bit10_0:11; }; UINT32 dw2; }; union { struct { UINT32 frame_length_bit12_11:2; UINT32 copyright_identification_start:1; UINT32 copyright_identification_bit:1; UINT32 home:1; UINT32 original_copy:1; UINT32 channel_configuration:3; UINT32 private_bit:1; UINT32 sampling_frequency_index:4; UINT32 profile:2; UINT32 protection_absent:1; UINT32 layer:2; UINT32 id:1; UINT32 syncword:12; }; UINT32 dw1; }; }AUDIO_MPEG2AACHEADERDATA, *AUDIO_MPEG2AACHEADERDATAPTR; #ifdef CONFIG_DTMB_SYSTEM typedef struct _AUDIO_DRAHEADERDATA { union { struct { UINT32 reserved01:27; UINT32 num_lef_ch:1; UINT32 num_normal_ch:3; UINT32 samplerate_index_bit0:1; }; UINT32 dw2; }; union { struct { UINT32 samplerate_index_bit3_1:3; UINT32 num_block_per_trans:2; UINT32 num_WORD:10; //one word 32bits unit UINT32 frame_header_type:1; UINT32 syncword:16; //0x7fff }; UINT32 dw1; }; }AUDIO_DRAHEADERDATA, *AUDIO_DRAHEADERDATAPTR; #endif typedef struct _AUDIO_IEC61937_HEADER { union { UINT32 header; UINT32 dw1; }; union { struct{ UINT32 length:16; UINT32 data_type:5; UINT32 reserved:2; UINT32 error_flag:1; UINT32 dependent_info:5; UINT32 bitstream_num:3; }; UINT32 dw2; }; }AUDIO_IEC61937_HEADER,*AUDIO_IEC61937_HEADER_PTR; typedef struct _SPDIF_CHANNEL_STATUS { UINT32 spdif_channel_status_b0_b7 : 8; //audioreg58 UINT32 spdif_channel_status_b8_b15 : 8; // audioreg59 UINT32 spdif_channel_status_b16_b23 : 8; // audioreg5a UINT32 spdif_channel_status_b24_b31 : 8; // audioreg5b UINT32 spdif_channel_status_b32_b39 : 8; // audioreg53 } SPDIF_CHANNEL_STATUS,*pSPDIF_CHANNEL_STATUS; /* BELOW INFORMATION IS FOR AUDIO CONTROL MAP ADUIOROM INFO. */ /* True Volume */ typedef struct _TRUEVOL_INFO { struct { UINT32 tv : 1; UINT32 tvleftenable : 1; UINT32 tvrightenable : 1; UINT32 tvnoise : 1; UINT32 srs_reserved_b4_b7 : 4; UINT32 tvmode : 1; UINT32 tvspksize: 3; UINT32 srs_reserved_b12: 20; }; UINT32 inputgain; //input gain, 0~0x7fffffff UINT32 outputgain; //output gain, 0~0x7fffffff UINT32 bypassgain; //bypass gain, 0~0x7fffffff UINT32 referencelevel; //reference gain, 0~0x7fffffff UINT32 maxgain; UINT32 noisethreshold; }TRUEVOL_INFO, *pTRUEVOL_INFO; /* AUDIOROM ONLY*/ typedef struct _SRS_TSHD_INFO { UINT8 mEnable; /* True = Process, False = Bypass */ UINT8 mSurroundEnable; UINT8 mDialogClarityEnable; UINT8 mTruBassEnable; UINT8 mDefinitionFrontEnable; UINT8 mTruBassSpksize; UINT8 mInputMode; UINT8 mOutputMode; INT32 mInputGain; INT32 mOutputGain; INT32 mBypassGain; INT32 mSurroundLevel; INT32 mDialogClarityLevel; INT32 mTruBassLevel; INT32 mDefinitionFrontLevel; }SRS_TSHD_INFO, *pSRS_TSHD_INFO; typedef struct _AGC_INFO { UINT8 Enable; /* True = Process, False = Bypass */ UINT8 limiter_level; //unit -1dB, 0: 0: 0.dB(default), 1: -1dB, 2: -2dB.... Max: 30 : -30dB UINT8 pullup_gain; //unit: 0.1dB, 0: 0.dB(default), 1: 0.1 dB... max:180(18 dB) UINT8 attack_rate; //attack/release rate , 0: 1/4 , 1: 1/8, 2: 1/16, 3: 1/32, 4: 1/64 , 5: 1/128 6: 1/256 , 7: 1/512 , 8: 1/1024 9: 1/2048, 10: 1/4096 UINT8 pullup_active_level; // when signal < AGC_pullup_active_level and then pull up gain will be work // 0 ~ -30 UINT8 active_time; //unit 10ms, 0: 10ms, 1: 20ms... 15: 160ms, UINT8 AGC_Reserve_b[10]; //reserved }AGC_INFO, *pAGC_INFO; typedef struct _AUDIOEFFECT_INFO { struct { UINT8 enable: 1; UINT8 surround_en:1; UINT8 voice_en: 1; UINT8 bass_en: 1; UINT8 Reserved0: 4; }; UINT8 Sur_mode; //surround mode UINT8 Sur_Lv; // surround level UINT8 Voice_Lv; //voice level UINT8 Bass_Lv; // bass level UINT8 Bass_Freq; // bass freq UINT8 inputgain; UINT8 directgain; //only use for S+ Surround UINT8 reverbgain; //only use for S+ Surround UINT8 ambiancegain; //only use for S+ Surround UINT8 AE_Reserve_b[6]; //reserved }AUDIOEFFECT_INFO, *pAUDIOEFFECT_INFO; typedef struct _DBXAUDIO_INFO { UINT8 mtotvol; UINT8 mtotsur; UINT8 mtotson; UINT8 m_dbx_reserved; UINT32 enable_flag; UINT32 preset_addr; UINT32 param_addr; UINT32 coeff_addr; UINT32 reserved1; UINT32 reserved2; }DBXAUDIO_INFO, *pDBXAUDIO_INFO; typedef struct _TITOI_INFO { INT32 param[64]; }TITOI_INFO, *pTITOI_INFO; typedef struct _MS_AE_SET_INFO { struct { unsigned char MS_AE_enable: 1; unsigned char MS_AE_surround_en:1; unsigned char MS_AE_voice_en: 1; unsigned char MS_AE_bass_en: 1; unsigned char MS_definition_en: 1; unsigned char MS_AE_sf_exp: 1; //EXPANSION SOUND FIELD unsigned char Reserved0: 2; }; unsigned char MS_AE_surround_gain; // , default 8 //0.0~1.0,outputsound= (1-gain)*(input_sound) + gain*(surround_sound) unsigned char MS_AE_Sur_Lv; // surround level delay ,delay sample //0~4800,echo effect , 480 sample/step. unsigned char MS_AE_Sur_Delay; unsigned char MS_AE_Bass_Freq; // bass freq 0:100 1:200 2:400 unsigned char MS_AE_bassfix_gain; // , default 8 unsigned char MS_AE_Voice_Lv; //voice level ,dialog clarity //0~+10dB (2500Hz EQ) unsigned char MS_AE_Definition_gain; // high pass definition 0~+10dB (5000Hz EQ) unsigned char MS_AE_reserved[8]; }MS_AE_SET_INFO, *pMS_AE_SET_INFO; typedef struct _CUT_OFF_INFO { unsigned char CUT_OFF_ENABLE; unsigned char CUT_OFF_FREQ_INDEX; unsigned char reserved[2]; }CUT_OFF_INFO,*pCUT_OFF_INFO; /* AUDIO CONTROL STRUCTURE This structure is used for AudioRom and Driver communication. Start Address is "AUDIO_CONTROL_BUFF_ADDR", Reserved size is 2048 bytes CONTROL BUFFER LAYOUT 1. Audio PostProcessor Info //768 BYTES, Relative Items will show current postprocessor status. 2. Audio ROM info //256 BYTES Relative Items will show current AudioRom Info , Ex. sfreq, PTSOFFSET..... 3. Reserved // 1024 BYTES */ typedef struct _AUDIO_CONTROL { //Audio PostProcessor Info Start //768 BYTES, // offset: 0x0 union { UINT32 post_processing_enable; struct { UINT32 AE_enable : 1; UINT32 AGC_enable : 1; UINT32 EQEnable : 1; UINT32 PEQEnable: 1; UINT32 ShelvingEnable : 1; UINT32 SRS_TVOL_Enable : 1; UINT32 SRS_TSHD_Enable : 1; UINT32 FreqPeakDet_En: 1; UINT32 dbxaudio_en: 1; UINT32 HPLPEnable : 1; UINT32 MBDRCEnable : 1; UINT32 TITOISucess : 1; UINT32 pp_reserved_b10_b30 : 19; UINT32 pp_test_eanble : 1; }; }; //0x04 UINT32 ARINFO_b04; #if 1//def CONFIG_SUPPORT_PEQ_12BAND // EQ, offset: 0x08 for 12band EQ or PEQ make sure ROM support 12band case PEQ_ELEMENT peq_set[PEQ_BAND_MAX]; //size = 20x12 = 240, bytes UINT32 ARINFO_EQ_12BANDReserved; //Reserved #else // EQ, offset: 0x08 for 9band EQ & 3band PEQ SIS_PEQ_ELEMENT eq_set[EQ_BAND_MAX]; //size = 20x9 = 180, bytes //0xBC~0xBF Reserved UINT32 ARINFO_bBC; // PEQ, offset: 0xC0 SIS_PEQ_ELEMENT peq_set[PEQ_BAND_MAX]; //size = 20x3 = 60 bytes #endif //0xFC~0x10F Reserved UINT32 ARINFO_bFC; UINT32 ARINFO_b100; UINT32 ARINFO_b104; UINT32 ARINFO_b108; UINT32 ARINFO_b10C; //0x110 INT8 bassGain; INT8 trebleGain; //0x112~0x113 Reserved UINT8 ARINFO_b112; UINT8 ARINFO_b113; //0x114 SRS_TSHD_INFO tshd_info; //size = 36 bytes //0x138~0x13C Reserved UINT32 ARINFO_b138; UINT32 ARINFO_b13C; //0x140 TRUEVOL_INFO TrueVol_info; //size =28 bytes //0x15c Reserved CUT_OFF_INFO CUT_INFO; //0x160 #ifdef CONFIG_AUDIO_MAXIMUS_SURROUND MS_AE_SET_INFO MS_AE_INFO; #else AUDIOEFFECT_INFO AE_INFO; //size = 16 bytes #endif //0x170 AGC_INFO agcinfo; //size = 16 bytes // offset: 0x180 FF/FW/normal playback, UINT8 playback_status; UINT8 ARINFO_PP_RESERVED1[3]; //0x184~0x18F DBXAUDIO_INFO dbx_info; //0x190~0x28F TITOI_INFO titoi_info; //0x290~0x2FF Reserved UINT8 ARINFO_PP_RESERVED[96]; //Audio PostProcessor Info End //768 BYTES, //AudioRom Info Start //0x300 UINT32 audiorom_version; //audiorom version //0x304 UINT32 audio_feature; //define AUDIOROM SUPPORT AUDIO FEATURE, EX . MP3/AAC/AC3/EAC3/SRSTSHD....ETC //0x308 union { UINT32 project_info; struct { //b[7:0] UINT32 i2sbypass : 8; //b[15:8] UINT32 canalplus : 8; //b[23:16] UINT32 fix_q_eq : 1; UINT32 alsa_pcm_type: 2; UINT32 reserved_b19_b23 : 5; //b[31:24] UINT32 reserved_b24_b31 : 8; }; }; //0x30c UINT32 ARINFO_RESERVED1; //0x310 UINT32 audio_data_type; //record current audio input data type (codec type) UINT32 sample_freq; UINT32 sample_number; union{ UINT32 channel_number; UINT32 mpeg_channel_status; //MPEG CHANNEL NUMBER are ALWAYS 2, but channel status is different , STEREO, JOINT STEREO , DUAL CHANNEL ETC. }; //0x320 UINT32 DESNO; UINT32 ulLastPTS; UINT32 PTS_offset; UINT32 last_dataptr; //record latest processed audio cmd data ptr //0x330 UINT32 last_AD_dataptr; //record latest AD audio cmd data ptr UINT32 audio_cur_cycle; UINT32 audio_max_cycle; UINT32 sample_number_dec2; //decode2 sample number; //0x340 UINT32 peak_audio_in_l; UINT32 peak_audio_in_r; UINT32 peak_audio_out_l; UINT32 peak_audio_out_r; //0x350 UINT32 rms_i2s_l[2]; //AUDIOROM RMS VALUE SD0/SD1 UINT32 rms_i2s_r[2]; //AUDIOROM RMS VALUE SD0/SD1 //0x360 struct { UINT32 audio_mem_size : 13; //max 8192KB UINT32 sample_byte: 3; //0&4 = 4 BYTES(32 bits) , 1= 8 bits , 2= 16 bits UINT32 tx_desp_num: 6; UINT32 cmd_size: 5; UINT32 ext_lib_size: 5; }; //0x364 struct { UINT32 pcm_wp : 8; UINT32 pcm_rp : 8; UINT32 raw_wp: 8; UINT32 raw_rp: 8; }; //0x360~0x400 Reserved //UINT8 ARINFO_RESERVED1[212]; //Reserved _RESERVED1[212]; //Reserved } AUDIO_CONTROL, *pAUDIO_CONTROL; #pragma pack(pop) void DRV_AUDIO_DC_SetMute(pTVFE_Audio_Mute_t pMute_Config); UINT8 DRV_AUDIO_Get_CurrTokenCount(void); // Return HW token count (audio HW queue buffer number) BOOL SendAudioCmdq(AUDIO_CMDQ *pCmdq); // true: success, false: fail void AudioHW_Engine_Reset(void); BOOL ResetAudioENG(AUDIO_CMDQ *pReset);//for hw request sw use R_AUDIO_SUBRST instead of R_AUDIO_RST on sis330 chip later. void ScartOut_HDMI_NOSIGNAL(void);//support HDMI no signal , Scart out can to output ATV sound. UINT8 DRV_AUDIO_IS_MP_Source(void); //check current audio source is used mp driver or not. UINT8 DRV_AUDIO_IS_Linein_Source(void); //check current audio source is analog input source void DRV_AUDIO_Set_SIFSCART(BOOL bEnable); //Set SIF Bypass feature for Line out pAUDIO_CONTROL DRV_AUDIO_Get_AudioCtlInfo(void); UINT32 DRV_AUDIO_Get_ARInfo(AUDIOROM_INFO_e arinfo); void DRV_AUDIO_Set_ARInfo(AUDIOROM_INFO_e arinfo, UINT32 value); UINT32 DRV_AUDIO_FC_GetMuteStatus(void); void DRV_AUDIO_FC_GetAudioSettings(AUDIO_SETTINGS_t* pSettings); #endif