阅读:7597回复:2

Amlogic音频输出模式

楼主#
更多 发布于:2019-07-10 11:42
【时间仓促,来不及具体验证,如有错误,欢迎回帖更正,谢谢大家】

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.java

public 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.java

public 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输出。

最新喜欢:

陆沉子陆沉子 yamyam zhaoyf13zhaoyf...
If you have nothing to lose, then you can do anything.
沙发#
发布于:2019-07-10 12:09
[url]http://190.lsal.cn/195/1329.gif?0728100424873[/url]
yam
yam
论坛版主
论坛版主
  • 社区居民
  • 优秀斑竹
  • VIP会员
  • 荣誉会员
板凳#
发布于:2019-07-10 12:11
游客

返回顶部