aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgnif2 <gnif2@svn>2010-05-11 03:01:21 +0000
committergnif2 <gnif2@svn>2010-05-11 03:01:21 +0000
commit21d6c5a7b62f8df310c6e19ffe0c9be7ee10e890 (patch)
treea0a25797f81a162c8015df0710a39bff631d4d8c
parent99dc5f955795b7be5dc950ae6aa0c9505069c014 (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.xml3
-rw-r--r--xbmc/Application.cpp11
-rw-r--r--xbmc/GUIDialogAudioSubtitleSettings.cpp19
-rw-r--r--xbmc/GUISettings.cpp3
-rw-r--r--xbmc/GUISettings.h4
-rw-r--r--xbmc/GUIWindowSettingsCategory.cpp4
-rw-r--r--xbmc/cores/dvdplayer/DVDCodecs/Audio/DVDAudioCodecPassthroughFFmpeg.cpp16
-rw-r--r--xbmc/cores/dvdplayer/DVDPlayerAudio.cpp2
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);