【时间仓促,来不及具体验证,如有错误,欢迎回帖更正,谢谢大家】Amlogic音频输出模式有以下几种,分别是:
PCM:盒子解码后,输出PCM格式
SPDIF透传(passthrough):盒子不对音频解码,通过SPDIF端口原始输出
HDMI透传(passthrough):盒子不对音频解码,通过HDMI原始输出
怎样查看当然盒子的音频输出模式:
cat /sys/class/audiodsp/digital_raw
0:PCM 1:SPDIF 透传 2:HDMI透传==========================================================================
Amlogic9.0的设置中,默认设置位AUTO,AUTO是什么意思呢?我也不是特别清楚,按照推测应该是:让HDMI驱动来判断,如果电视机支持AC-3,DTS,那么AUTO模式下优先使用HDMI透传模式,让电视机来解码,盒子本身不解码音频。如果检测到电视机不支持AC-3,DTS,那么采用PCM方式输出。
这里就存在一个现象需要特别注意,可能造成困扰:
如果自动模式下,使用支持AC-3的电视在播放AC-3的码流时,调节盒子的声音,将无法改变音量大小,需要调节电视机的音量才行。==========================================================================
如果我们需要修改这个默认值,将AUTO修改为PCM,应该怎么操作呢?通过分析代码:
应用界面部分相关的代码在:
vendor\amlogic\common\apps\DroidTvSettings\src\com\droidlogic\tv\settings\SoundFragment.java//设置界面的默认值获取
digitalsoundPref.setValue(mSoundParameterSettingManager.getDigitalAudioFormat());
... ...
mSoundParameterSettingManager.setDigitalAudioFormat(selection);
updateFormatPreferencesStates();
vendor\amlogic\common\apps\DroidTvSettings\src\com\droidlogic\tv\settings\tvoption\SoundParameterSettingManager.javapublic String getDigitalAudioFormat() {
final int value = Settings.Global.getInt(mContext.getContentResolver(),
OutputModeManager.DIGITAL_AUDIO_FORMAT, OutputModeManager.DIGITAL_AUTO);
if (CanDebug()) Log.d(TAG, "getDigitalAudioFormat value = " + value);
switch (value) {
case OutputModeManager.DIGITAL_PCM:
return DIGITAL_SOUND_PCM;
case OutputModeManager.DIGITAL_SPDIF:
return DIGITAL_SOUND_SPDIF;
case OutputModeManager.DIGITAL_MANUAL:
return DIGITAL_SOUND_MANUAL;
case OutputModeManager.DIGITAL_AUTO:
default:
return DIGITAL_SOUND_AUTO;
}
}
public void setDigitalAudioFormat (String mode) {
if (CanDebug()) Log.d(TAG, "setDigitalAudioFormat = " + mode);
switch (mode) {
case DIGITAL_SOUND_PCM:
mOutputModeManager.setDigitalAudioFormatOut(OutputModeManager.DIGITAL_PCM);
break;
case DIGITAL_SOUND_SPDIF:
mOutputModeManager.setDigitalAudioFormatOut(OutputModeManager.DIGITAL_SPDIF);
break;
case DIGITAL_SOUND_MANUAL:
mOutputModeManager.setDigitalAudioFormatOut(OutputModeManager.DIGITAL_MANUAL,
getAudioManualFormats());
break;
case DIGITAL_SOUND_AUTO:
default:
mOutputModeManager.setDigitalAudioFormatOut(OutputModeManager.DIGITAL_AUTO);
break;
}
}
服务部分的代码主要在:
vendor\amlogic\common\frameworks\core\java\com\droidlogic\app\OutputModeManager.javapublic static final String DIGITAL_AUDIO_FORMAT = "digital_audio_format";
public static final int DIGITAL_PCM = 0;
public static final int DIGITAL_SPDIF = 1;
public static final int DIGITAL_AUTO = 2;
public static final int DIGITAL_MANUAL = 3;
public void setDigitalAudioFormatOut(int mode) {
setDigitalAudioFormatOut(mode, "");
}
public void setDigitalAudioFormatOut(int mode, String submode) {
Log.d(TAG, "setDigitalAudioFormatOut: mode="+mode+", submode="+submode);
saveDigitalAudioFormatMode(mode, submode);
switch (mode) {
case DIGITAL_SPDIF:
mAudioManager.setParameters(PARA_SPDIF);
break;
case DIGITAL_AUTO:
mAudioManager.setParameters(PARA_AUTO);
break;
case DIGITAL_MANUAL:
mAudioManager.setParameters(PARA_AUTO);
break;
case DIGITAL_PCM:
default:
mAudioManager.setParameters(PARA_PCM);
break;
}
}
通过上面的代码分析,我们知道界面上的默认值就是从名为“
digital_audio_format”的settings global设置中获取的。所以我们默认设置这个值为:0.即默认为PCM输出。