客户在拿到TV的公版之后,通常会进行客制化。在HW 修改电路之后,SW 通常也需要重新修改匹配硬件,这样才能保证功能的正常使用。修改电路后,VGA通道的连接电脑后,电脑的声音无法传递过来。下面以VGA 通过的line-lin 为例
硬件连接
从原理图上看,VGA通道的PC audio in 是属于芯片端的pin 脚是Y3,AA4,对应的port 是line-in 第 0 路。
Audio 的映射
mstar 平台的audio 的映射关系包含audio in,audio out,以及内部audio mux。对应的是board.h 文件中的三个结构体:
// audio-in , 右侧对应的是通道,左侧是对应的声音进入人的port
static AudioMux_t BOARD_AudioMux_t[BOARD_AUDIO_INPUT_SOURCE_TYPE_SIZE] =
{
{AUDIO_DSP1_DVB_INPUT}, //AUDIO_SOURCE_DTV
{AUDIO_DSP1_DVB_INPUT}, //AUDIO_SOURCE_DTV2
{AUDIO_DSP4_SIF_INPUT}, //AUDIO_SOURCE_ATV
**{AUDIO_AUIN4_INPUT}, //AUDIO_SOURCE_PC**
{AUDIO_AUIN0_INPUT}, //AUDIO_SOURCE_YPbPr
{AUDIO_NULL_INPUT}, //AUDIO_SOURCE_YPbPr2
{AUDIO_AUIN0_INPUT}, //AUDIO_SOURCE_AV
{AUDIO_NULL_INPUT}, //AUDIO_SOURCE_AV2
{AUDIO_NULL_INPUT}, //AUDIO_SOURCE_AV3
{AUDIO_NULL_INPUT}, //AUDIO_SOURCE_SV
{AUDIO_NULL_INPUT}, //AUDIO_SOURCE_SV2
{AUDIO_AUIN4_INPUT}, //AUDIO_SOURCE_SCART
{AUDIO_NULL_INPUT}, //AUDIO_SOURCE_SCART2
{AUDIO_HDMI_INPUT}, //AUDIO_SOURCE_HDMI
{AUDIO_HDMI_INPUT}, //AUDIO_SOURCE_HDMI2
{AUDIO_HDMI_INPUT}, //AUDIO_SOURCE_HDMI3
{AUDIO_AUIN0_INPUT}, //AUDIO_SOURCE_DVI
{AUDIO_AUIN0_INPUT}, //AUDIO_SOURCE_DVI2
{AUDIO_AUIN0_INPUT}, //AUDIO_SOURCE_DVI3
{AUDIO_NULL_INPUT}, //AUDIO_SOURCE_KTV
};
// audio mux,右侧对应的通道也即input source,左侧对应的是耳机/喇叭的出来的port
static AudioMux_t BOARD_AudioPath_t[BOARD_AUDIO_PATH_TYPE_SIZE] =
{
{AUDIO_T3_PATH_I2S}, //AUDIO_PATH_MAIN_SPEAKER
{AUDIO_T3_PATH_AUOUT1}, //AUDIO_PATH_HP
{AUDIO_T3_PATH_AUOUT0}, //AUDIO_PATH_LINEOUT
{AUDIO_PATH_NULL}, //AUDIO_PATH_SIFOUT
{AUDIO_PATH_NULL}, //AUDIO_PATH_SCART1 = SIF out
{AUDIO_T3_PATH_AUOUT0}, //AUDIO_PATH_SCART2 = Lineout
{AUDIO_T3_PATH_SPDIF}, //AUDIO_PATH_SPDIF
{AUDIO_PATH_NULL}, //AUDIO_PATH_HDMI
{AUDIO_T3_PATH_MIXER_MAIN}, // AUDIO_PATH_MIXER_MAIN
{AUDIO_T3_PATH_MIXER_SECONDARY}, // AUDIO_PATH_MIXER_SECONDARY
{AUDIO_PATH_NULL}, // AUDIO_PATH_7
{AUDIO_T3_PATH_MIXER_DMA_IN}, // AUDIO_PATH_MIXER_DMA_IN
};
// audio-out, 是输出path 的选择
static AudioOutputType_t BOARD_AudioOutputType_t[BOARD_AUDIO_OUTPUT_TYPE_SIZE] =
{
{AUDIO_I2S_OUTPUT}, //AUDIO_PATH_MAIN_SPEAKER
{AUDIO_AUOUT1_OUTPUT}, //AUDIO_PATH_HP
{AUDIO_AUOUT0_OUTPUT}, //AUDIO_PATH_LINEOUT
{AUDIO_NULL_OUTPUT}, //AUDIO_PATH_SIFOUT
{AUDIO_NULL_OUTPUT}, //AUDIO_PATH_SCART1 = SIF out
{AUDIO_AUOUT0_OUTPUT}, //AUDIO_PATH_SCART2 = Lineout
};
从上面的信息我们可以看到,line-in 里面AUDIO_AUIN0_INPUT port 对应了YPBPR,AV,DVI,DVI2,DVI3 几个通道。未看到VGA通道。
映射信息使用
配置好了audio in, out ,mux 信息之后,需要在系统中生效。就必须初始化,设置到寄存器中。我们可以查到三个结构体,分别保存在systeminfo模块的m_pAudioMuxInfo,m_pAudioPathInfo,m_pAudioOutputTypeInfo三个成员中。通过下面接口获取
@vendor\mstar\supernova\projects\systeminfo\src\SystemInfo.cpp
const AudioMux_t* SystemInfo::GetAudioInputMuxInfo()
{
if(m_pAudioMuxInfo != NULL)
{
return m_pAudioMuxInfo;
}
ASSERT(0);
}
const AudioPath_t* SystemInfo::GetAudioPathInfo()
{
if(m_pAudioPathInfo != NULL)
{
return m_pAudioPathInfo;
}
ASSERT(0);
}
const AudioOutputType_t* SystemInfo::GetAudioOutputTypeInfo()
{
if(m_pAudioOutputTypeInfo != NULL)
{
return m_pAudioOutputTypeInfo;
}
ASSERT(0);
}
接着在_InputSourceTypeToAudioInputType(vendor\mstar\supernova\projects\customization\MStarSDK\audio\mapi_audio_customer.cpp)接口中获取,根据通道进行设置
static AUDIO_INPUT_TYPE _InputSourceTypeToAudioInputType(MAPI_INPUT_SOURCE_TYPE eSourceType)
{
const AudioMux_t* const p_AudioInputMux = mapi_syscfg_fetch::GetInstance()->GetAudioInputMuxInfo();
AUDIO_INPUT_TYPE eAudioInputType = AUDIO_NULL_INPUT;
MAPI_U32 u32Port = 0xFF;
switch(eSourceType)
{
case MAPI_INPUT_SOURCE_DTV:
{
u32Port = p_AudioInputMux[MAPI_AUDIO_SOURCE_DTV].u32Port;
break;
}
........
case MAPI_INPUT_SOURCE_YPBPR:
{
u32Port = p_AudioInputMux[MAPI_AUDIO_SOURCE_YPBPR].u32Port;
break;
}
case MAPI_INPUT_SOURCE_YPBPR2:
{
u32Port = p_AudioInputMux[MAPI_AUDIO_SOURCE_YPBPR2].u32Port;
break;
}
case MAPI_INPUT_SOURCE_VGA:
case MAPI_INPUT_SOURCE_VGA2:
case MAPI_INPUT_SOURCE_VGA3:
{
u32Port = p_AudioInputMux[MAPI_AUDIO_SOURCE_PC].u32Port;
break;
}
case MAPI_INPUT_SOURCE_HDMI:
case MAPI_INPUT_SOURCE_HDMI2:
case MAPI_INPUT_SOURCE_HDMI3:
case MAPI_INPUT_SOURCE_HDMI4:
{
u32Port = p_AudioInputMux[MAPI_AUDIO_SOURCE_HDMI].u32Port;
break;
}
case MAPI_INPUT_SOURCE_DVI:
{
u32Port = p_AudioInputMux[MAPI_AUDIO_SOURCE_DVI].u32Port;
break;
}
......
}
eAudioInputType = _u32PortToAudioInputType(u32Port);
return eAudioInputType;
}
可以看到VGA,VGA2,VGA3 使用的audio in 结构体中的source (MAPI_AUDIO_SOURCE_PC) 对应的的port 口
diff --git a/serials/MST160D_10ABQM_18443_DTMB_AH/Board.h b/serials/MST160D_10ABQM_18443_DTMB_AH/Board.h
index 24b27d5..da095f1 100755
--- a/serials/MST160D_10ABQM_18443_DTMB_AH/Board.h
+++ b/serials/MST160D_10ABQM_18443_DTMB_AH/Board.h
@@ -820,7 +820,7 @@ static AudioMux_t BOARD_AudioMux_t[BOARD_AUDIO_INPUT_SOURCE_TYPE_SIZE] =
{AUDIO_DSP1_DVB_INPUT}, //AUDIO_SOURCE_DTV
{AUDIO_DSP1_DVB_INPUT}, //AUDIO_SOURCE_DTV2
{AUDIO_DSP4_SIF_INPUT}, //AUDIO_SOURCE_ATV
- {AUDIO_AUIN4_INPUT}, //AUDIO_SOURCE_PC
+ {AUDIO_AUIN0_INPUT}, //AUDIO_SOURCE_PC
{AUDIO_AUIN0_INPUT}, //AUDIO_SOURCE_YPbPr
{AUDIO_NULL_INPUT}, //AUDIO_SOURCE_YPbPr2
{AUDIO_AUIN0_INPUT}, //AUDIO_SOURCE_AV
那么将AUDIO_AUIN4_INPUT 换成AUDIO_AUIN0_INPUT 即可。
如果speaker 和 headphone 同一路硬件输出,优先以speaker 为主,同时
AUDIO_OUTPUT_HP 的audio path 可以配置为NULL;
更多mstar 平台音频属性,音效设置详参文件
drvAUDIO_if.h,mapi_audio_datatype.h,apiAUDIO.h,mapi_audio.h
mapi_audio_customer.cpp,mapi_audio.cpp,MSrv_SSSound.cpp。