diff options
author | gnif2 <gnif2@svn> | 2010-05-11 03:01:21 +0000 |
---|---|---|
committer | gnif2 <gnif2@svn> | 2010-05-11 03:01:21 +0000 |
commit | 21d6c5a7b62f8df310c6e19ffe0c9be7ee10e890 (patch) | |
tree | a0a25797f81a162c8015df0710a39bff631d4d8c | |
parent | 99dc5f955795b7be5dc950ae6aa0c9505069c014 (diff) |
changed: audio output mode from "Digital" to "Optical/Coax"
changed: AUDIO_DIGITAL define to AUDIO_IEC958
added: audio output mode "HDMI"
added: AUDIO_HDMI define
changed: transcode will not activate when HDMI is selected
git-svn-id: https://xbmc.svn.sourceforge.net/svnroot/xbmc/trunk@29996 568bbfeb-2a22-0410-94d2-cc84cf5bfa90
-rw-r--r-- | language/English/strings.xml | 3 | ||||
-rw-r--r-- | xbmc/Application.cpp | 11 | ||||
-rw-r--r-- | xbmc/GUIDialogAudioSubtitleSettings.cpp | 19 | ||||
-rw-r--r-- | xbmc/GUISettings.cpp | 3 | ||||
-rw-r--r-- | xbmc/GUISettings.h | 4 | ||||
-rw-r--r-- | xbmc/GUIWindowSettingsCategory.cpp | 4 | ||||
-rw-r--r-- | xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecPassthroughFFmpeg.cpp | 16 | ||||
-rw-r--r-- | xbmc/cores/dvdplayer/DVDPlayerAudio.cpp | 2 |
8 files changed, 41 insertions, 21 deletions
diff --git a/language/English/strings.xml b/language/English/strings.xml index 69deac3732..51fec8e778 100644 --- a/language/English/strings.xml +++ b/language/English/strings.xml @@ -281,7 +281,7 @@ <string id="336">Framerate conversion</string> <string id="337">Audio output</string> <string id="338">Analog</string> - <string id="339">Digital</string> + <string id="339">Optical/Coax</string> <string id="340">Various artists</string> <string id="341">Play disc</string> <string id="342">Movies</string> @@ -359,6 +359,7 @@ <string id="417">View: Big icons</string> <string id="418">Low</string> <string id="419">High</string> + <string id="420">HDMI</string> <string id="422">Delete album info</string> <string id="423">Delete CD information</string> diff --git a/xbmc/Application.cpp b/xbmc/Application.cpp index aaca66a4d3..b059035562 100644 --- a/xbmc/Application.cpp +++ b/xbmc/Application.cpp @@ -2557,10 +2557,13 @@ bool CApplication::OnAction(const CAction &action) if (action.GetID() == ACTION_TOGGLE_DIGITAL_ANALOG) { - if(g_guiSettings.GetInt("audiooutput.mode")==AUDIO_DIGITAL) - g_guiSettings.SetInt("audiooutput.mode", AUDIO_ANALOG); - else - g_guiSettings.SetInt("audiooutput.mode", AUDIO_DIGITAL); + switch(g_guiSettings.GetInt("audiooutput.mode")) + { + case AUDIO_ANALOG: g_guiSettings.SetInt("audiooutput.mode", AUDIO_IEC958); break; + case AUDIO_IEC958: g_guiSettings.SetInt("audiooutput.mode", AUDIO_HDMI ); break; + case AUDIO_HDMI : g_guiSettings.SetInt("audiooutput.mode", AUDIO_ANALOG); break; + } + g_application.Restart(); if (g_windowManager.GetActiveWindow() == WINDOW_SETTINGS_SYSTEM) { diff --git a/xbmc/GUIDialogAudioSubtitleSettings.cpp b/xbmc/GUIDialogAudioSubtitleSettings.cpp index c46ffedcd3..f6e053ffeb 100644 --- a/xbmc/GUIDialogAudioSubtitleSettings.cpp +++ b/xbmc/GUIDialogAudioSubtitleSettings.cpp @@ -83,9 +83,9 @@ void CGUIDialogAudioSubtitleSettings::CreateSettings() AddAudioStreams(AUDIO_SETTINGS_STREAM); // only show stuff available in digital mode if we have digital output - AddBool(AUDIO_SETTINGS_OUTPUT_TO_ALL_SPEAKERS, 252, &g_settings.m_currentVideoSettings.m_OutputToAllSpeakers, g_guiSettings.GetInt("audiooutput.mode") == AUDIO_DIGITAL); + AddBool(AUDIO_SETTINGS_OUTPUT_TO_ALL_SPEAKERS, 252, &g_settings.m_currentVideoSettings.m_OutputToAllSpeakers, AUDIO_IS_BITSTREAM(g_guiSettings.GetInt("audiooutput.mode"))); - int settings[2] = { 338, 339 }; //ANALOG, DIGITAL + int settings[3] = { 338, 339, 420 }; //ANALOG, IEC958, HDMI m_outputmode = g_guiSettings.GetInt("audiooutput.mode"); AddSpin(AUDIO_SETTINGS_DIGITAL_ANALOG, 337, &m_outputmode, 2, settings); @@ -227,7 +227,7 @@ void CGUIDialogAudioSubtitleSettings::OnSettingChanged(SettingInfo &setting) // update the screen setting... g_settings.m_currentVideoSettings.m_AudioStream = -1 - m_audioStream; // call monkeyh1's code here... - //bool bAudioOnAllSpeakers = (g_guiSettings.GetInt("audiooutput.mode") == AUDIO_DIGITAL) && g_settings.m_currentVideoSettings.m_OutputToAllSpeakers; + //bool bAudioOnAllSpeakers = (g_guiSettings.GetInt("audiooutput.mode") == AUDIO_IEC958) && g_settings.m_currentVideoSettings.m_OutputToAllSpeakers; return; } } @@ -244,12 +244,15 @@ void CGUIDialogAudioSubtitleSettings::OnSettingChanged(SettingInfo &setting) } else if (setting.id == AUDIO_SETTINGS_DIGITAL_ANALOG) { - if(m_outputmode == 0) // might be unneccesary (indexes match), but just for clearity - g_guiSettings.SetInt("audiooutput.mode", AUDIO_ANALOG); - else - g_guiSettings.SetInt("audiooutput.mode", AUDIO_DIGITAL); + bool bitstream = false; + switch(m_outputmode) + { + case AUDIO_ANALOG: g_guiSettings.SetInt("audiooutput.mode", AUDIO_IEC958 ); break; + case AUDIO_IEC958: g_guiSettings.SetInt("audiooutput.mode", AUDIO_HDMI ); bitstream = true; break; + case AUDIO_HDMI : g_guiSettings.SetInt("audiooutput.mode", AUDIO_ANALOG ); bitstream = true; break; + } - EnableSettings(AUDIO_SETTINGS_OUTPUT_TO_ALL_SPEAKERS, g_guiSettings.GetInt("audiooutput.mode") == AUDIO_DIGITAL); + EnableSettings(AUDIO_SETTINGS_OUTPUT_TO_ALL_SPEAKERS, bitstream); g_application.Restart(); } else if (setting.id == SUBTITLE_SETTINGS_ENABLE) diff --git a/xbmc/GUISettings.cpp b/xbmc/GUISettings.cpp index 88dc260833..20800b9524 100644 --- a/xbmc/GUISettings.cpp +++ b/xbmc/GUISettings.cpp @@ -436,7 +436,8 @@ void CGUISettings::Initialize() map<int,int> audiomode; audiomode.insert(make_pair(338,AUDIO_ANALOG)); - audiomode.insert(make_pair(339,AUDIO_DIGITAL)); + audiomode.insert(make_pair(339,AUDIO_IEC958)); + audiomode.insert(make_pair(420,AUDIO_HDMI )); AddInt(ao, "audiooutput.mode", 337, AUDIO_ANALOG, audiomode, SPIN_CONTROL_TEXT); /* hide this from apple users until CoreAudio has been updated to support this */ diff --git a/xbmc/GUISettings.h b/xbmc/GUISettings.h index adb55026d6..7e30aeef0e 100644 --- a/xbmc/GUISettings.h +++ b/xbmc/GUISettings.h @@ -73,7 +73,9 @@ class TiXmlElement; #define CDDARIP_QUALITY_EXTREME 3 #define AUDIO_ANALOG 0 -#define AUDIO_DIGITAL 1 +#define AUDIO_IEC958 1 +#define AUDIO_HDMI 2 +#define AUDIO_IS_BITSTREAM(x) ((x) == AUDIO_IEC958 || (x) == AUDIO_HDMI) #define VIDEO_NORMAL 0 #define VIDEO_LETTERBOX 1 diff --git a/xbmc/GUIWindowSettingsCategory.cpp b/xbmc/GUIWindowSettingsCategory.cpp index 1a3f7f0ae0..513fd9a0aa 100644 --- a/xbmc/GUIWindowSettingsCategory.cpp +++ b/xbmc/GUIWindowSettingsCategory.cpp @@ -762,7 +762,7 @@ void CGUIWindowSettingsCategory::UpdateSettings() strSetting.Equals("audiooutput.mp3passthrough")) { // only visible if we are in digital mode CGUIControl *pControl = (CGUIControl *)GetControl(pSettingControl->GetID()); - if (pControl) pControl->SetEnabled(g_guiSettings.GetInt("audiooutput.mode") == AUDIO_DIGITAL); + if (pControl) pControl->SetEnabled(AUDIO_IS_BITSTREAM(g_guiSettings.GetInt("audiooutput.mode"))); } else if (strSetting.Equals("musicplayer.crossfade")) { @@ -1017,7 +1017,7 @@ void CGUIWindowSettingsCategory::UpdateSettings() else if (strSetting.Equals("audiooutput.custompassthrough")) { CGUIControl *pControl = (CGUIControl *)GetControl(pSettingControl->GetID()); - if (g_guiSettings.GetInt("audiooutput.mode") == AUDIO_DIGITAL) + if (AUDIO_IS_BITSTREAM(g_guiSettings.GetInt("audiooutput.mode"))) { if (pControl) pControl->SetEnabled(g_guiSettings.GetString("audiooutput.passthroughdevice").Equals("custom")); } diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecPassthroughFFmpeg.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecPassthroughFFmpeg.cpp index 703fcc6b8b..b3f93a99e1 100644 --- a/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecPassthroughFFmpeg.cpp +++ b/xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecPassthroughFFmpeg.cpp @@ -316,8 +316,10 @@ bool CDVDAudioCodecPassthroughFFmpeg::SetupEncoder(CDVDStreamInfo &hints) bool CDVDAudioCodecPassthroughFFmpeg::Open(CDVDStreamInfo &hints, CDVDCodecOptions &options) { + int audioMode = g_guiSettings.GetInt("audiooutput.mode"); + // TODO - move this stuff somewhere else - if (g_guiSettings.GetInt("audiooutput.mode") == AUDIO_DIGITAL) + if (AUDIO_IS_BITSTREAM(audioMode)) { m_bSupportsAC3Out = g_guiSettings.GetBool("audiooutput.ac3passthrough"); m_bSupportsDTSOut = g_guiSettings.GetBool("audiooutput.dtspassthrough"); @@ -351,6 +353,14 @@ bool CDVDAudioCodecPassthroughFFmpeg::Open(CDVDStreamInfo &hints, CDVDCodecOptio /* see if the muxer supports our codec (see spdif.c for supported formats) */ if (!SupportsFormat(hints)) { + /* HDMI can do multichannel LPCM, transcoding would just be silly */ + if (audioMode == AUDIO_HDMI) + { + CLog::Log(LOGINFO, "CDVDAudioCodecPassthroughFFmpeg::Open - Won't transcode for HDMI"); + Dispose(); + return false; + } + if (!SetupEncoder(hints) || !SupportsFormat(hints)) { CLog::Log(LOGERROR, "CDVDAudioCodecPassthroughFFmpeg::Open - FFmpeg SPDIF muxer does not support this codec"); @@ -360,11 +370,11 @@ bool CDVDAudioCodecPassthroughFFmpeg::Open(CDVDStreamInfo &hints, CDVDCodecOptio } else { - /* aac needs to be wrapped into ATDS frames */ + /* aac needs to be wrapped into ADTS frames */ if (hints.codec == CODEC_ID_AAC) if (!SetupMuxer(hints, "adts", m_ADTS)) { - CLog::Log(LOGERROR, "CDVDAudioCodecPassthroughFFmpeg::Open - Unable to setup ATDS muxer"); + CLog::Log(LOGERROR, "CDVDAudioCodecPassthroughFFmpeg::Open - Unable to setup ADTS muxer"); Dispose(); return false; } diff --git a/xbmc/cores/dvdplayer/DVDPlayerAudio.cpp b/xbmc/cores/dvdplayer/DVDPlayerAudio.cpp index 34423719ec..5d1e41062e 100644 --- a/xbmc/cores/dvdplayer/DVDPlayerAudio.cpp +++ b/xbmc/cores/dvdplayer/DVDPlayerAudio.cpp @@ -249,7 +249,7 @@ bool CDVDPlayerAudio::OpenDecoder(CDVDStreamInfo &hints, BYTE* buffer /* = NULL* /* store our stream hints */ m_streaminfo = hints; - bool passthrough = g_guiSettings.GetInt("audiooutput.mode") == AUDIO_DIGITAL; + bool passthrough = AUDIO_IS_BITSTREAM(g_guiSettings.GetInt("audiooutput.mode")); CLog::Log(LOGNOTICE, "Finding audio codec for: %i", m_streaminfo.codec); m_pAudioCodec = CDVDFactoryCodec::CreateAudioCodec(m_streaminfo, passthrough); |