armbox: rework AC3 and DTS passtrough

//vanhofen: this commit includes all following fixes and a small
new change in setting_helpers.cpp


Origin commit data
------------------
Commit: a4789ae379
Author: Frankenstone <dampf_acc@online.de>
Date: 2018-09-09 (Sun, 09 Sep 2018)
This commit is contained in:
Frankenstone
2018-09-09 15:37:51 +02:00
committed by vanhofen
parent d0f7010036
commit 3b225d8961
8 changed files with 57 additions and 1 deletions

View File

@@ -154,6 +154,13 @@ int CAudioSetup::showAudioSetup()
CMenuOptionChooser * as_oj_ddsubchn = new CMenuOptionChooser(LOCALE_AUDIOMENU_DOLBYDIGITAL, &g_settings.audio_DolbyDigital, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, audioSetupNotifier);
as_oj_ddsubchn->setHint("", LOCALE_MENU_HINT_AUDIO_DD);
#if HAVE_ARM_HARDWARE
CMenuOptionChooser * as_oj_ac3 = new CMenuOptionChooser(LOCALE_AUDIOMENU_AC3, &g_settings.ac3_pass, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, audioSetupNotifier);
as_oj_ac3->setHint("", LOCALE_MENU_HINT_AUDIO_AC3);
CMenuOptionChooser * as_oj_dts = new CMenuOptionChooser(LOCALE_AUDIOMENU_DTS, &g_settings.dts_pass, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, audioSetupNotifier);
as_oj_dts->setHint("", LOCALE_MENU_HINT_AUDIO_DTS);
#else
//dd via hdmi
CMenuOptionChooser *as_oj_dd_hdmi = NULL;
if (g_info.hw_caps->has_HDMI) {
@@ -164,6 +171,7 @@ int CAudioSetup::showAudioSetup()
//dd via spdif
CMenuOptionChooser * as_oj_dd_spdif = new CMenuOptionChooser(LOCALE_AUDIOMENU_SPDIF_DD, &g_settings.spdif_dd, OPTIONS_OFF0_ON1_OPTIONS, OPTIONS_OFF0_ON1_OPTION_COUNT, true, audioSetupNotifier);
as_oj_dd_spdif->setHint("", LOCALE_MENU_HINT_AUDIO_SPDIF_DD);
#endif // HAVE_ARM_HARDWARE
CMenuOptionChooser * as_oj_avsync = NULL;
CMenuOptionNumberChooser * as_oj_vsteps = NULL;
@@ -227,9 +235,14 @@ int CAudioSetup::showAudioSetup()
audioSettings->addItem(as_oj_analogmode);
audioSettings->addItem(GenericMenuSeparatorLine);
//---------------------------------------------------------
#if HAVE_ARM_HARDWARE
audioSettings->addItem(as_oj_ac3);
audioSettings->addItem(as_oj_dts);
#else
if (g_info.hw_caps->has_HDMI)
audioSettings->addItem(as_oj_dd_hdmi);
audioSettings->addItem(as_oj_dd_spdif);
#endif // HAVE_ARM_HARDWARE
audioSettings->addItem(as_oj_ddsubchn);
//---------------------------------------------------------
audioSettings->addItem(GenericMenuSeparatorLine);

View File

@@ -439,8 +439,13 @@ int CNeutrinoApp::loadSetup(const char * fname)
g_settings.srs_algo = configfile.getInt32( "srs_algo", 1);
g_settings.srs_ref_volume = configfile.getInt32( "srs_ref_volume", 75); //NI
g_settings.srs_nmgr_enable = configfile.getInt32( "srs_nmgr_enable", 0);
#if HAVE_ARM_HARDWARE
g_settings.ac3_pass = configfile.getInt32( "ac3_pass", 0);
g_settings.dts_pass = configfile.getInt32( "dts_pass", 0);
#else
g_settings.hdmi_dd = configfile.getInt32( "hdmi_dd", 0);
g_settings.spdif_dd = configfile.getInt32( "spdif_dd", 1);
#endif // HAVE_ARM_HARDWARE
g_settings.analog_out = configfile.getInt32( "analog_out", 1);
g_settings.avsync = configfile.getInt32( "avsync", 1);
g_settings.clockrec = configfile.getInt32( "clockrec", 1);
@@ -1333,9 +1338,14 @@ void CNeutrinoApp::saveSetup(const char * fname)
configfile.setInt32( "srs_algo", g_settings.srs_algo);
configfile.setInt32( "srs_ref_volume", g_settings.srs_ref_volume);
configfile.setInt32( "srs_nmgr_enable", g_settings.srs_nmgr_enable);
#if HAVE_ARM_HARDWARE
configfile.setInt32( "ac3_pass", g_settings.ac3_pass);
configfile.setInt32( "dts_pass", g_settings.dts_pass);
#else
configfile.setInt32( "hdmi_dd", g_settings.hdmi_dd);
configfile.setInt32( "analog_out", g_settings.analog_out);
configfile.setInt32( "spdif_dd", g_settings.spdif_dd);
#endif
configfile.setInt32( "analog_out", g_settings.analog_out);
configfile.setInt32( "avsync", g_settings.avsync);
configfile.setInt32( "clockrec", g_settings.clockrec);
configfile.setInt32( "video_dbdr", g_settings.video_dbdr);
@@ -2565,8 +2575,13 @@ TIMER_START();
// init audio settings
audioDecoder->SetSRS(g_settings.srs_enable, g_settings.srs_nmgr_enable, g_settings.srs_algo, g_settings.srs_ref_volume);
//audioDecoder->setVolume(g_settings.current_volume, g_settings.current_volume);
#if HAVE_ARM_HARDWARE
audioDecoder->SetHdmiDD(g_settings.ac3_pass ? true : false);
audioDecoder->SetSpdifDD(g_settings.dts_pass ? true : false);
#else
audioDecoder->SetHdmiDD((HDMI_ENCODED_MODE)g_settings.hdmi_dd);
audioDecoder->SetSpdifDD(g_settings.spdif_dd ? true : false);
#endif
audioDecoder->EnableAnalogOut(g_settings.analog_out ? true : false);
audioSetupNotifier = new CAudioSetupNotifier;
// trigger a change

View File

@@ -153,6 +153,7 @@ typedef enum
LOCALE_AUDIO_SRS_NMGR,
LOCALE_AUDIO_SRS_VOLUME,
LOCALE_AUDIOMENU_PCMOFFSET,
LOCALE_AUDIOMENU_AC3,
LOCALE_AUDIOMENU_ANALOG_MODE,
LOCALE_AUDIOMENU_ANALOG_OUT,
LOCALE_AUDIOMENU_AUTO_LANG,
@@ -162,6 +163,7 @@ typedef enum
LOCALE_AUDIOMENU_AVSYNC_AM,
LOCALE_AUDIOMENU_CLOCKREC,
LOCALE_AUDIOMENU_DOLBYDIGITAL,
LOCALE_AUDIOMENU_DTS,
LOCALE_AUDIOMENU_HDMI_DD,
LOCALE_AUDIOMENU_HDMI_DD_AUTO,
LOCALE_AUDIOMENU_HDMI_DD_FORCE,
@@ -1166,12 +1168,14 @@ typedef enum
LOCALE_MENU_HINT_APLAY,
LOCALE_MENU_HINT_APLAY_SETUP,
LOCALE_MENU_HINT_AUDIO,
LOCALE_MENU_HINT_AUDIO_AC3,
LOCALE_MENU_HINT_AUDIO_ADJUST_VOL_AC3,
LOCALE_MENU_HINT_AUDIO_ADJUST_VOL_CLEAR,
LOCALE_MENU_HINT_AUDIO_ADJUST_VOL_PCM,
LOCALE_MENU_HINT_AUDIO_ANALOG_MODE,
LOCALE_MENU_HINT_AUDIO_AVSYNC,
LOCALE_MENU_HINT_AUDIO_DD,
LOCALE_MENU_HINT_AUDIO_DTS,
LOCALE_MENU_HINT_AUDIO_HDMI_DD,
LOCALE_MENU_HINT_AUDIO_SPDIF_DD,
LOCALE_MENU_HINT_AUDIO_SRS,

View File

@@ -153,6 +153,7 @@ const char * locale_real_names[] =
"audio.srs_nmgr",
"audio.srs_volume",
"audiomenu.PCMOffset",
"audiomenu.ac3",
"audiomenu.analog_mode",
"audiomenu.analog_out",
"audiomenu.auto_lang",
@@ -162,6 +163,7 @@ const char * locale_real_names[] =
"audiomenu.avsync_am",
"audiomenu.clockrec",
"audiomenu.dolbydigital",
"audiomenu.dts",
"audiomenu.hdmi_dd",
"audiomenu.hdmi_dd_auto",
"audiomenu.hdmi_dd_force",
@@ -1166,12 +1168,14 @@ const char * locale_real_names[] =
"menu.hint_aplay",
"menu.hint_aplay_setup",
"menu.hint_audio",
"menu.hint_audio_ac3",
"menu.hint_audio_adjust_vol_ac3",
"menu.hint_audio_adjust_vol_clear",
"menu.hint_audio_adjust_vol_pcm",
"menu.hint_audio_analog_mode",
"menu.hint_audio_avsync",
"menu.hint_audio_dd",
"menu.hint_audio_dts",
"menu.hint_audio_hdmi_dd",
"menu.hint_audio_spdif_dd",
"menu.hint_audio_srs",

View File

@@ -426,10 +426,17 @@ bool CAudioSetupNotifier::changeNotify(const neutrino_locale_t OptionName, void
g_Zapit->setAudioMode(g_settings.audio_AnalogMode);
} else if (ARE_LOCALES_EQUAL(OptionName, LOCALE_AUDIOMENU_ANALOG_OUT)) {
audioDecoder->EnableAnalogOut(g_settings.analog_out ? true : false);
#if HAVE_ARM_HARDWARE
} else if (ARE_LOCALES_EQUAL(OptionName, LOCALE_AUDIOMENU_AC3)) {
audioDecoder->SetHdmiDD(g_settings.ac3_pass ? true : false);
} else if (ARE_LOCALES_EQUAL(OptionName, LOCALE_AUDIOMENU_DTS)) {
audioDecoder->SetSpdifDD(g_settings.dts_pass ? true : false);
#else
} else if (ARE_LOCALES_EQUAL(OptionName, LOCALE_AUDIOMENU_HDMI_DD)) {
audioDecoder->SetHdmiDD((HDMI_ENCODED_MODE) g_settings.hdmi_dd);
} else if (ARE_LOCALES_EQUAL(OptionName, LOCALE_AUDIOMENU_SPDIF_DD)) {
audioDecoder->SetSpdifDD(g_settings.spdif_dd ? true : false);
#endif
} else if (ARE_LOCALES_EQUAL(OptionName, LOCALE_AUDIOMENU_AVSYNC)) {
videoDecoder->SetSyncMode((AVSYNC_TYPE)g_settings.avsync);
audioDecoder->SetSyncMode((AVSYNC_TYPE)g_settings.avsync);

View File

@@ -246,8 +246,13 @@ struct SNeutrinoSettings
int srs_algo;
int srs_ref_volume;
int srs_nmgr_enable;
#if HAVE_ARM_HARDWARE
int ac3_pass;
int dts_pass;
#else
int hdmi_dd;
int spdif_dd;
#endif // HAVE_ARM_HARDWARE
int analog_out;
int audio_volume_percent_ac3;
int audio_volume_percent_pcm;